Вопросы по MQL4. - страница 8

 
рис 6
Файлы:
zigtester.jpg  16 kb
 
ANK:
Кто знает, правильно ли это?
один файл не может быть включен в код несколько раз.
поэтому надо:
- или сделать несколько файлов с разными именами глобальных переменных и ф-ций (это ламерский вариант =)
- или продумать логику работы так, чтоб не было пересечений при вызове из разных ф-ций (тут возможно придётся поработать, но это - достойное решение ;)

А что-то более точное сказать не получится без конкретных примеров, описаний ошибок, или полного кода (лучше всего) =)
 
В окне работают одновременно советник и зацикленный скрипт.
Правильно ли считать, что в период, когда советник ждёт ответ сервера по исполнения торговой операции
скрипт продолжает работать своим чередом без остановки и задержек, производить свои вычисления (не торговые операции)?
 
SKif:
В окне работают одновременно советник и зацикленный скрипт.
Правильно ли считать, что в период, когда советник ждёт ответ сервера по исполнения торговой операции
скрипт продолжает работать своим чередом без остановки и задержек, производить свои вычисления (не торговые операции)?
да.
и эксперт, и скрипт работают в своих собственных потоках.
 
ОК, спасибо.
Следует ли считать нормальной ситуацию, когда время начала работы индикатора и советника при включении кнопки советника не совпадает?
Возможно, я чего-то недопонимаю или делаю неправильно, но у меня получается, что разница во времени может составлять более 250 мс.

И ещё. Оказывает какое-либо влияние состояние кнопки советника на работу индикатора?
Можно ли из индикатора отследить состояние этой кнопки?
 
Я провёл небольшие исследования..

Поместил в окно индикатор:
int start() { GlobalVariableSet(GV_Tick, 1); return; }

Поместил в окно советник:
int start() { GlobalVariableSet(GV_Knopka, 1); return; }

И скрипт с таким фрагментом:
... T_Tick=0; T_Knopka=0; while (Tick==0 || Knopka==0 ) // Ждём тика и разреш. кнопки советн. { Tick = 0; Knopka = 0; Tick = GlobalVariableGet(GV_Tick ); Knopka = GlobalVariableGet(GV_Knopka ); if (Tick>0 && T_Tick==0)T_Tick=GetTickCount(); if (Knopka>0) { T_Knopka=GetTickCount(); Alert("T_Tick=",T_Tick, " T_Knopka=",T_Knopka, " Запазд= ",T_Knopka-T_Tick); } } ... GlobalVariableSet(GV_Knopka, 0 ); // Обнуляем прошлые события GlobalVariableSet(GV_Tick, 0 ); // Обнуляем прошлые события


И вот какие пулучились результаты:
в период, выделенный красным цветом, мышка просто перемещалась по кругу диаметром 50мм с частотой 3 оборота в сек.
Никаких воздействий на терминал не оказывалось.

Получается, что в "обычный" тихий период запаздывание составляет ок. 20-60 мс, а в период, когда юзер контачит с терминалом, ещё больше.
Кроме того выяснилось, что start() индикатора запускается в период изменения размеров окна и при переключении между окнами.
---------------
Меня главным образом интересует легальность этой задержки, "обычной" и "необычной".
И хотелось бы немного комментариев разработчиков - насколько это соответствует замыслу.
Файлы:
1.png  21 kb
 
Я самостоятельно проведу тесты и сообщу результаты.
 
ОК.
В условиях отсутствия иной возможности я ориентировался на вариант измерения времени запаздывании сигналов советника и индикатора, для того чтоб судить об откл. кнопки советника. Предполагалось, что это время будет оч. небольшим. Но разброс уж оч. большой.

Очень интересно что Вы выясните.
(вообще, вся эта кухня мне нужна для ответа на один простой вопрос: состояние кнопки советника)
 
Эксперты работают в своих собственных потоках независимо от других задач.
Выяснилось - загрузка процессора вызывается передвижением мыши, когда массово посылаются сотни команд перемещения мыши. Среди этих "мышиных" команд также идут команды на рефреш экспертов, что и приводит к задержкам.
 
Т.е следует считать, что неодновременность начала работы скрипта, индикатора и советника - явление обыденное?
Ну.. и как же жить на белом свете?
Причина обращения: