Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Потому, что никто не сказал этому значению, что оно должно быть EMPTY_VOLUME, а не остаться проинициализированным нулем по-умолчанию.
Алексей, ещё раз!
Я заполняю ВЕСЬ буфер! от корки до корки НЕ НУЛЕВЫМИ ЗНАЧЕНИЯМИ!
Если бы была ошибка в коде, то он бы не проработал правильно 3 часа!
Буферы ПОЛНОСТЬЮ переписываются, при КАЖДОМ OnCalculate()
Алексей, ещё раз!
Я заполняю ВЕСЬ буфер! от корки до корки НЕ НУЛЕВЫМИ ЗНАЧЕНИЯМИ!
Если бы была ошибка в коде, то он бы не проработал правильно 3 часа!
График, на котором работает индикатор имеет таймфрейм равный М1 (ОДНА МИНУТА!!!!!!!!!!)
За 3 часа = 180 баров!!!!!!
График, на котором работает индикатор имеет таймфрейм равный М1 (ОДНА МИНУТА!!!!!!!!!!)
За 3 часа = 180 баров!!!!!!
Тогда, спим.
Кстати, Ваш код совершенно не приемлем для задач, которые я перед собой ставлю.
За 1 OnCalculate() в AskTemp( BidTemp) приходит более 200 значений (event_cnt = 242 )
В Вашей реализации, потеряется 241 значение из 242.
Михаил, вы так и не поняли, зачем я выложил код. Я показал, как корректно заполнять буфер.
Чтоб значения, поступающие из ОнБукИвента не терялись, нужно вызывать OnCalculate при появлении каждой новой цены.
Вот новая версия, в которой появление цены эмулируется через таймер (по умолчанию - каждые 10 мс):
Запустите ее, и сами все поймете.
Для реализации вашей задачи достаточно сделать аналогичный вызов OnCalculate из OnBookEvent.
Запустите ее, и сами все поймете.
Вот видео, демонстрирующее работу:
Всё классно, но бага осталась и, при удалении индикатора,
виснит советник на этом чарте
//+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int OnCalculate( const int rates_total, const int prev_calculated, const int begin, const double &price[] ) { if ( prev_calculated == 0 ) { ArrayInitialize( AskBuffer, EMPTY_VALUE ); ArrayInitialize( BidBuffer, EMPTY_VALUE ); } else { if ( rates_total == event_cnt ) { if ( on_trans ) //мы вызвали OnCalculate() { on_trans = false; //--- for ( int i = rates_total - 1; i > 0; i-- ) { AskBuffer[i] = AskBuffer[i - 1]; BidBuffer[i] = BidBuffer[i - 1]; } } } else { AskBuffer[0] = EMPTY_VALUE; BidBuffer[0] = EMPTY_VALUE; } event_cnt = rates_total; } IndicatorSetDouble( INDICATOR_LEVELVALUE, 0, LevelHigh ); IndicatorSetDouble( INDICATOR_LEVELVALUE, 1, LevelExitHigh ); IndicatorSetDouble( INDICATOR_LEVELVALUE, 2, LevelLow ); IndicatorSetDouble( INDICATOR_LEVELVALUE, 3, LevelExitLow ); //--- return( rates_total ); }При удалении индикатора, по прежнему
виснет советник. Видимо это из-за деинициализации индикатора
В советнике в OnBookEvent() тоже используются эти символы.
Вот с этим кодом, работает правильно:
BidBuffer[0] = BidBuffer[1];Да, советник вис из-за деинициализации индикатора.
УРРРА!
Совместными усилиями с Андреем, удалось создать на 99,9% реал-тайм индикатор!
Код в OnBookEvent()