Ошибки, баги, вопросы - страница 1787

Подскажите, пожалуйста, в советнике MT4, если последовательно вызывается пользовательский индикатор у которого больше одного графического буфера, то перерасчет происходит при каждом вызове или все буферы рассчитываются сразу и можно много раз обращаться к индикатору в коде и не ожидать, что будет трата ресурсов. Так же интересен этот вопрос, что будет, если код не закончит исполняться (будет работать дольше тика), но изменится значение индикатора.

A100:

Тогда я прямо так и пишу в ServiceDesk#1666680

Просим рассмотреть возможность изменения принципов работы функции

bool SymbolInfoTick( string symbol, MqlTick& tick );

с тем, чтобы в Индикаторах (включая тело OnCalculate) она возвращала текущие цены, согласно своему описанию

одновременно дополнив язык функцией

bool SymbolInfoTick_OnCalculate( string& symbol, MqlTick& tick ); //(*)

которая возвращала бы в функции OnCalculate символ и конкретный tick послужившие причиной вызова OnCalculate

или как альтернатива (*) : дополнить этими параметрами вызов OnCalculate

OnCalculate( ..., const string& symbol, const MqlTick& tick );
Присоединяюсь к этой очевидной наглости! ))
Alexey Kozitsyn:
Этого очень мало. Замеряйте несколько часов. На нескольких инструментах.
Опа
Test_SymbolInfoTcick (Si-3.17,M1)       OnCalculate: ОШИБКА ПОСЛЕДОВАТЕЛЬНОСТИ! SymbolInfoTick() вернуло не последнее значение!
Test_SymbolInfoTcick (Si-3.17,M1)       OnCalculate: Текущее время мс = 1486493406313 (2017.02.07 18:50:06), предыдущее = 1486493406315
Test_SymbolInfoTcick (Si-3.17,M1)       OnTick: ОШИБКА ПОСЛЕДОВАТЕЛЬНОСТИ! SymbolInfoTick() вернуло не последнее значение!
Test_SymbolInfoTcick (Si-3.17,M1)       OnTick: Текущее время мс = 1486493406313 (2017.02.07 18:50:06), предыдущее = 1486493406315
Test_SymbolInfoTcick (Si-3.17,M1)       OnCalculate: ОШИБКА ПОСЛЕДОВАТЕЛЬНОСТИ! SymbolInfoTick() вернуло не последнее значение!
Test_SymbolInfoTcick (Si-3.17,M1)       OnCalculate: Текущее время мс = 1486495281212 (2017.02.07 19:21:21), предыдущее = 1486495281213
Test_SymbolInfoTcick (Si-3.17,M1)       OnTick: ОШИБКА ПОСЛЕДОВАТЕЛЬНОСТИ! SymbolInfoTick() вернуло не последнее значение!
Test_SymbolInfoTcick (Si-3.17,M1)       OnTick: Текущее время мс = 1486495281212 (2017.02.07 19:21:21), предыдущее = 1486495281213
Проблемы и в OnTick. По логу за несколько часов в OnCalculate проблемы раза в три чаще, чем в OnTick. При этом OnTick-проблема всегда повторяется и на OnCalculate, но не наоборот.
[Удален]
fxsaber:
Опа
Проблемы и в OnTick. По логу за несколько часов в OnCalculate проблемы раза в три чаще, чем в OnTick. При этом OnTick-проблема всегда повторяется и на OnCalculate, но не наоборот.
Получается SymbolInfoTick() асинхронная...
-Aleks-:

Подскажите, пожалуйста, в советнике MT4, если последовательно вызывается пользовательский индикатор у которого больше одного графического буфера, то перерасчет происходит при каждом вызове или все буферы рассчитываются сразу и можно много раз обращаться к индикатору в коде и не ожидать, что будет трата ресурсов. Так же интересен этот вопрос, что будет, если код не закончит исполняться (будет работать дольше тика), но изменится значение индикатора.

Все буферы рассчитываются сразу. Спокойно опрашивайте значения индикатора - перерасчёта не будет

В MT4 индикатор, вызванный из эксперта, работает в потоке этого самого эксперта и на копии историчнских данных этого эксперта. Вы можете зациклить эксперта, но получать при этом данные индикатора рассчитанные на момент вызова OnTick. До тех пор, пока не вызовите RefreshRates. RefreshRates обновляет исторические данные эксперта, после этого при первом вызове индикатора все его данные будут пересчитаны
Slawa:
Все буферы рассчитываются сразу. Спокойно опрашивайте значения индикатора - перерасчёта не будет

В MT4 индикатор, вызванный из эксперта, работает в потоке этого самого эксперта и на копии историчнских данных этого эксперта. Вы можете зациклить эксперта, но получать при этом данные индикатора рассчитанные на момент вызова OnTick. До тех пор, пока не вызовите RefreshRates. RefreshRates обновляет исторические данные эксперта, после этого при первом вызове индикатора все его данные будут пересчитаны

Спасибо за ответ! 

Ранее меня интересовал ещё вопрос мигания индикатора ZigZag в MT5 (в MT4 такого эффекта нет) - очень нервирует - с чем это связано?

Уважаемые программисты, как сделать, чтобы последняя, информационная, строка терминала "Баланс", "Средства", "Маржа", .... не "убежала"  и не спряталась внизу с появлением новых позиций?
Yousufkhodja Sultonov:
Уважаемые программисты, как сделать, чтобы последняя, информационная, строка терминала "Баланс", "Средства", "Маржа", .... не "убежала"  и не спряталась внизу с появлением новых позиций?
В окне "Инструменты" двойной клик на названии любой вкладки - таким образом окно "Инструменты" свернётся автоматически в одну строку. В этой строке будет Баланс, Прибыль, Средства, Маржа, Свободная маржа, Уровень маржи. 
Комбинатор:

Конечно нет. Во-первых сейчас циклы не нужны, есть таймер. Во-вторых его можно всегда расциклить для тестера.

Как расциклить таймер в тестере? Ведь в тестере таймер не работает.