Сделали мы динамический РОС. Работает он путем запроса тиковых данных - истории запрашивает, считает, реал, соответственно, дальше получает тики. Берем либо торговые (Volume, Ticks), либо неторговые - bid/ask. Все прекрасно работает. Однако при попытки загрузить индикатор на Маркет валидатор дает ошибку - час думает/соображает, в итоге пишет, что слишком долго, падите прочь. У меня есть мысли - валидатор пытается прогнать индюк на валютах либо крипте, но поскольку индюк работает с тиками, то на таких инструментах брокер нужные тики не поставляет, и поэтому индикатор просто не просчитывается.
Как мне победить это дело?
Картинку подгрузил - это работа индикатора на РТС. И те тики, которые он использует - на валютах и крипте подобные данные не поставляются брокером.
если
MQL_TESTER | Признак работы запущенной программы в тестере |
то ...
удачи!
Про
MQL_TESTER |
вообще не понятно. Не знаю, что это. Индикатор в принципе не предназначен для использования в тестере, поскольку требует ручного управления - указание точки старта
Индикатор тики закачивает через CopyTicks
Про
MQL_TESTER |
вообще не понятно. Не знаю, что это. Индикатор в принципе не предназначен для использования в тестере, поскольку требует ручного управления - указание точки старта
а валидация это и есть тестирование
потому и глухо
переключите тестер на тестирование индикатора и надеюсь что Вам все таки удастся понять в чем проблема
Индикатор тики закачивает через CopyTicks
Покажите эту часть кода. Какая перегрузка функции используется?
//+------------------------------------------------------------------+ void GetTicks( bool current ) //+------------------------------------------------------------------+ { MqlTick tick_array[]; if( CopyTicks(_Symbol,tick_array,COPY_TICKS_ALL,last_msc,INT_MAX ) > 0 ) { last_msc = tick_array[ArraySize(tick_array)-1].time_msc; // время (мкс) последнего тика for(int i=0; i<ArraySize(tick_array)-1; i++) { if( tick_array[i].time_msc == last_msc ) break; // последние тики не обрабатываем if( tick_array[i].time > time[ lastBar ] ) { last_msc = tick_array[i].time_msc; break; } if( !current ) { datetime tickTime = tick_array[i].time; // время (с) текущего тика tickTime = (datetime)(tickTime - fmod( tickTime, PeriodSeconds() ) ); if( tickTime > currentTime ) // время (с) текущего тика > времени текущего бара { CalculatePOC( currentBar ); // расчет РОС currentBar++; currentTime = (datetime)Ti[currentBar]; } } if( tick_array[i].flags == 2 || tick_array[i].flags == 6 ) ProcessTick( tick_array[i].bid, 1); } if( current ) CalculatePOC( lastBar ); // расчет РОС } } //+------------------------------------------------------------------+
Вот так:
if( CopyTicks(_Symbol,tick_array,COPY_TICKS_ALL,last_msc,INT_MAX ) > 0 )
в индикаторе нельзя делать. Здесь не контролируется количество тиков, которые запрашиваются. Индикатор работает синхронно с терминалом и не должен его тормозить.
Поэтому логику запроса нужно переделать, строго контролируя количество тиков, которые запрашиваются. Вместо INT_MAX нужно поставить какое-то небольшое значение. У себя я, к примеру, использовал 10000. После получения этой порции тиков следует запомнить время последнего полученного тика и прервать загрузку до следующего тика. На следующем тике повторить загрузку с новой даты. И так до тех пор, пока не будут получены все необходимые тики.

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Сделали мы динамический РОС. Работает он путем запроса тиковых данных - истории запрашивает, считает, реал, соответственно, дальше получает тики. Берем либо торговые (Volume, Ticks), либо неторговые - bid/ask. Все прекрасно работает. Однако при попытки загрузить индикатор на Маркет валидатор дает ошибку - час думает/соображает, в итоге пишет, что слишком долго, падите прочь. У меня есть мысли - валидатор пытается прогнать индюк на валютах либо крипте, но поскольку индюк работает с тиками, то на таких инструментах брокер нужные тики не поставляет, и поэтому индикатор просто не просчитывается.
Как мне победить это дело?
Картинку подгрузил - это работа индикатора на РТС. И те тики, которые он использует - на валютах и крипте подобные данные не поставляются брокером.