Работа советника без тиков

 

Гдето на форуме видел код, как заставить советник работать без поступления тиков, но немогу найти.

Кто видел гдето, дайте ссылку; Кто знает как реализовать, напишыте код.

Спасибо.

 
PostMessageA (WindowHandle (Symbol(), 0), RegisterWindowMessageA ("MetaTrader4_Internal_Message"), 2, 1);
 
Там чето было типа исконект рефрешрейт в инит().
 
MOLET писал(а) >>
Там чето было типа исконект рефрешрейт в инит().

Любой советник можно заставить работать без тиков, достаточно в старт() добавить вечный цикл и каждый раз обновлять котировки и рыночное окружение

 
Vinin >>:

Любой советник можно заставить работать без тиков, достаточно в старт() добавить вечный цикл и каждый раз обновлять котировки и рыночное окружение

Вечный цикл в старте не запустится без первого тика. Вот его надо обязательно эмулировать.

По своему опыту знаю, что эмуляция в ините ни чего не даст. Между эмуляцией тика в конце инита и началом старта проходит какое-то время. Тик в пустую...

Надо в ините запустить скрипт, который эмулирует тики для эксперта пока он не запустится. После запуска вечного цикла в эксперте, можно дать команду скрипту на завершение работы и выгрузку.

У меня всё так и работает.

Этот же скрипт у меня вызывает меню свойств эксперта, загружает индикаторы и выгружает их по командам из эксперта. По сути, параллельные вычисления получились.

 
А код?
 
HideYourRichess >>:
А код?

//----
init(){start();}
//----
void start()
{
while(;;)
{
if(!IsConnected())continue;
RefreshRates();
//----

//тут "рабочее тело" советника

//----
//Sleep(1000); //можно сделать задержкучтоб не грузило сильно проц
}
}
 
meta-trader2007 >>:

Ааа!.. Хитро! Не догадался старт из инита вызывать.

Метаквоты, что-то писали про 2,5 секунды на выполнение инита... Потом принудительно завершается.

Не уж-то работает?

 

Если честно - не проверял)

По идее инит() при инизиализации запускает старт(), а старт() в свою очередь зацикливается.

И сколько времени работает инит() не важно (return(0); - отсутствует!), хотя кажется метаквоты говорили что это именно деинит() работает 2,5 сек при деинициализации.

 

"return()" на завершение функции не влияет. Это просто возврат результата функции, которого она по своему определению вернуть не может.

Может, всё таки, стандартным образом старт вызывать. Надо всего лишь один тик вышеуказанной конструкцией эмулировать. Можно ещё скрипт зациклить с этой конструкцией и он будет запускать старт эксперта.

Это из справки:

Нежелательно из функции init() вызывать start() или совершать торговые операции, так как в момент инициализации модуля могут быть не готовы данные графиков, рыночные цены и т.д. Функции init() и deinit() должны максимально быстро завершать свою работу и ни в коем случае не зацикливаться в попытке начать полноценную работу раньше вызова функции start().

 

Тогда строчку:

init(){start();}
следует убрать. В этом случае  советник будет запускаться с первым тиком.
Причина обращения: