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

 
fxsaber:
Логично даже добавить номер тика в текущей очереди.

Тогда я прямо так и пишу в 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 );
 

Возник вопрос: можно ли как-то средствами mql5 определить все запущенные программы на графиках и их имена? В частности, интересует как можно получить имена всех индикаторов на текущем графике? 

 
Alexey Kozitsyn:

Возник вопрос: можно ли как-то средствами mql5 определить все запущенные программы на графиках и их имена? В частности, интересует как можно получить имена всех индикаторов на текущем графике? 

https://www.mql5.com/ru/docs/chart_operations/chartindicatorstotal

https://www.mql5.com/ru/docs/chart_operations/chartindicatorname

https://www.mql5.com/ru/docs/chart_operations/chartgetstring

https://www.mql5.com/ru/docs/constants/chartconstants/enum_chart_property#enum_chart_property_string
Документация по MQL5: Операции с графиками / ChartIndicatorName
Документация по MQL5: Операции с графиками / ChartIndicatorName
  • www.mql5.com
Операции с графиками / ChartIndicatorName - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 

Подскажите, пожалуйста, в советнике 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 такого эффекта нет) - очень нервирует - с чем это связано?

Причина обращения: