Добрый день!
Почему, когда "бросаешь" индикатор на график, то
он не сразу начинает работать?
Приходится 5-7 раз устанавливать его.
Он до того момента как начал работать вываливается (его нет в списке индикаторов) или после того как он начал работать - индикаторов уже в списке 5-7 шт?
Добрый день!
Почему, когда "бросаешь" индикатор на график, то
он не сразу начинает работать?
Приходится 5-7 раз устанавливать его.
Если это в выходные - значит индикатор тесно завязан на условие
if(prev_calculate==0)
Можно поступить так: правый клик на графике с индикатором и выбрать команду "Обновить".
Он до того момента как начал работать вываливается (его нет в списке индикаторов) или после того как он начал работать - индикаторов уже в списке 5-7 шт?
Нет, не вываливается, просто нет самого графика.
Уебрешь - установишь (5-7) раз, тогда появляется график.
Нет, не вываливается, просто нет самого графика.
Уебрешь - установишь (5-7) раз, тогда появляется график.
Если это в выходные - значит индикатор тесно завязан на условие
Можно поступить так: правый клик на графике с индикатором и выбрать команду "Обновить".
Ок, зафурыкало :)
Аккуратнее! Такое поведение индюка говорит, что где-то косяк. Правая кнопка и команда "Обновить" не меняет prev_calculated. Команда "Обновить" просто запускает OnCalculate() ещё раз. Значит при первом запуске где-то косяк. Если есть CopyRates() в OnCalculate() лучше посмотрите - срабатывает она как надо при первом запуске или нет.
Сделайте контроль количества копируемых элементов (должно быть >0) и в случае ошибки Print() и return(). Скорее всего при первом запуске увидите ошибку в этой функции (в журнале).
В том то и дело, что проверки стоят и нет ошибок!
Спасибо, нашел "косяк"
"Косяк" нашел, но что с ним делать?
Проверяя историю этой функцией:
//+------------------------------------------------------------------+ //| Custom indicator Check Load History function | //+------------------------------------------------------------------+ bool CheckLoadHistory( string symbol, ENUM_TIMEFRAMES period, datetime start_date ) { if ( !SymbolInfoInteger( symbol, SYMBOL_SELECT ) ) { if ( GetLastError() == ERR_MARKET_UNKNOWN_SYMBOL ) return( false ); SymbolSelect( symbol,true ); } //--- if ( MQL5InfoInteger( MQL5_PROGRAM_TYPE ) == PROGRAM_INDICATOR && Period() == period && Symbol() == symbol ) return( false ); //--- datetime first_date; datetime times[1]; if ( SeriesInfoInteger( symbol, PERIOD_M1, SERIES_TERMINAL_FIRSTDATE, first_date ) ) { if ( first_date > 0 ) { CopyTime( symbol, period, first_date + PeriodSeconds( period ), 1, times ); //--- if( SeriesInfoInteger( symbol,period, SERIES_FIRSTDATE, first_date ) ) if ( ( first_date > 0 ) && ( first_date <= start_date ) ) return( true ); } } //--- int max_bars = TerminalInfoInteger( TERMINAL_MAXBARS ); //--- load symbol history info datetime first_server_date = 0; int fail_cnt = 0; while( !SeriesInfoInteger( symbol, PERIOD_M1, SERIES_SERVER_FIRSTDATE, first_server_date ) ) { fail_cnt++; if ( fail_cnt >= 1000 ) { Print( " У серии ", symbol, " нет начальной даты! ", first_server_date ); return( false ); } Sleep( 100 ); } //--- wait for timeseries build while( !SeriesInfoInteger( symbol, period, SERIES_SYNCHRONIZED ) && !IsStopped() ) Sleep( 10 ); //-- int bars = Bars( symbol, period ); //--- if ( bars > 0 ) { if ( bars >= max_bars ) return( false ); //--- ask for first date if ( SeriesInfoInteger( symbol, period, SERIES_FIRSTDATE, first_date ) ) { if ( symbol == _Symbol ) { if ( ( first_date > 0 ) && ( first_date <= start_date ) ) return( true ); } else { if ( first_date > 0 ) return( true ); } } } else { Print( "Не получены данные по символу ", symbol ); } return( false ); }
Получаю следующее:
Как быть?
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Добрый день!
Почему, когда "бросаешь" индикатор на график, то
он не сразу начинает работать?
Приходится 5-7 раз устанавливать его.