Столкнулся с проблемой: данные индикатора отличаются если переключить с таймфрейма на любой другой и опять вернуться на обратно на исходный. Причем если продолжать переключаться туда сюда, значение индикатора стабилизируется и перестает меняться.
Как индикатор может рассчитывать разные значения на одном и том же таймфрейме? Почему при многократном переключении значения перестают меняться?
В чем может быть причина?
Возможные причины:
1. Где-то не сбрасываются глобальные переменные;
Пожалуй, больше на ум ничего не приходит)
Возможные причины:
1. Где-то не сбрасываются глобальные переменные;
Пожалуй, больше на ум ничего не приходит)
Да ты прав. WTF? Как их сбросить принудительно, после переключения таймфрейма терминала? Почему один раз сбрасываются, другой не сбрасываются?
Да ты прав. WTF? Как их сбросить принудительно, после переключения таймфрейма терминала? Почему один раз сбрасываются, другой не сбрасываются?
инициализировать?
разные значения на новом тике, может только если индикатор считает с далекого бара на более высоком TF, иначе быть не должно
если проблема в подгрузке истории, то используйте скрипт из справки
https://www.mql5.com/ru/docs/series/timeseries_access
на мультисимволе это должно быть на каждом запуске робота
- www.mql5.com
загрузка скрипта примерно так выглядит
//+------------------------------------------------------------------+ //| Вызов загрузки истории | //+------------------------------------------------------------------+ void LoadingHistory() { if(LoadHistory) // в input разрешение { //--- Загрузка истории for(int s=0; s<TRADE_SYMBOLS; s++) { //--- Проверка символа if(Symbols[s]!="") //--- History(Symbols[s],PERIOD_H1,D'2020.01.01'); } } //иначе выходим } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void History(string InpLoadedSymbol,ENUM_TIMEFRAMES InpLoadedPeriod,datetime InpStartDate) { // Print("Start load ",InpLoadedSymbol+","+GetPeriodName(InpLoadedPeriod)," from ",InpStartDate); //--- int res=CheckLoadHistory(InpLoadedSymbol,InpLoadedPeriod,InpStartDate); switch(res)
инициализировать?
разные значения на новом тике, может только если индикатор считает с далекого бара на более высоком TF, иначе быть не должно
если проблема в подгрузке истории, то используйте скрипт из справки
https://www.mql5.com/ru/docs/series/timeseries_access
на мультисимволе это должно быть на каждом запуске робота
Спасибо за вариант. Буду методом тыка искать проблему.
Попробую при инициализации проверить наличие исторических данных.
Спасибо за вариант. Буду методом тыка искать проблему.
Попробую при инициализации проверить наличие исторических данных.
Рекомендую использовать этот скрипт, терминал оптимизируется и не всегда загружает нужную историю, есть лимиты, пока не крутанешь график или переключение на высокие TF, история для длиннорасчетных индикаторов не загрузится сама.
Скрипт из справки гарантированно загрузит историю с указанной даты. Интегрированный скрипт при запуске мгновенно проверит кол-во загруженной истории, и если ее нет - подгрузит. Это неотъемлемая часть работы робота
Столкнулся с проблемой: данные индикатора отличаются если переключить с таймфрейма на любой другой и опять вернуться на обратно на исходный. Причем если продолжать переключаться туда сюда, значение индикатора стабилизируется и перестает меняться.
Как индикатор может рассчитывать разные значения на одном и том же таймфрейме? Почему при многократном переключении значения перестают меняться?
В чем может быть причина?
Постарайтесь обходиться без глобальных переменных. Глобальные переменные как правило, это зло. Переделайте логику работы индикатора в класс, создавайте объект класса в инициализирующей функции и удаляйте в деинициализаторе. Таким образом, вы получите 100% повторяемость при каждом переключении.
Постарайтесь обходиться без глобальных переменных. Глобальные переменные как правило, это зло. Переделайте логику работы индикатора в класс, создавайте объект класса в инициализирующей функции и удаляйте в деинициализаторе. Таким образом, вы получите 100% повторяемость при каждом переключении.
А где хранить банальные счетчики и тп.? Все переводить в ООП? Хочется понять от куда эта дичь исходит, почему переменные не инициализируются заново? Я думал что это кеширование на уровне терминала или рваная история, которая подгружается.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Как индикатор может рассчитывать разные значения на одном и том же таймфрейме? Почему при многократном переключении значения перестают меняться?
В чем может быть причина?