Функция ObjectGetValueByTime и оптимизация тестирования!

 

Здравия желаю, товарищи разработчики MQL5!

Скажите пожалуйста, почему на последнем билде 619, да и на ранних тоже, не работает ф-ция ObjectGetValueByTime при оптимизации тестирования?
При визуальном тестировании всё - ОК и даже на отладке кода - также всё работает корректно, а вот с ходом оптимизации - не сложилось...
Или это только у меня такой косяк присутствует? Проверьте, пожалуйста, кто-нибудь у себя этот код:

input bool for_optim_only = true;
int bar, cur, filehandle;
double result;
string filename;
MqlRates rates[];

int OnInit() {
    ArraySetAsSeries(rates, true);
    CopyRates(_Symbol, _Period, 0, 50, rates);
    ObjectCreate(0, "channel", OBJ_CHANNEL, 0,
        rates[45].time, rates[45].high,
        rates[10].time, rates[10].high,
        rates[30].time, rates[30].low);
    ObjectSetInteger(0, "channel", OBJPROP_SELECTABLE, true);
    ObjectSetInteger(0, "channel", OBJPROP_SELECTED, true);
    ObjectSetInteger(0, "channel", OBJPROP_RAY_RIGHT, true);
    StringConcatenate(filename, !MQL5InfoInteger(MQL5_OPTIMIZATION)?"test_":"opt_", IntegerToString(GetTickCount()), ".txt");
    filehandle = FileOpen(filename, FILE_WRITE|FILE_TXT|FILE_ANSI);
    return(0);
}
void OnDeinit(const int reason) {
    FileClose(filehandle);
}
void OnTick() {
    bar = Bars(_Symbol, _Period);
    if (cur!= bar) {
        cur = bar;
        CopyRates(_Symbol, _Period, 0, 1, rates);
        result = ObjectGetValueByTime(0, "channel", rates[0].time, 0);
        FileWrite(filehandle, "Price = ", DoubleToString(result, _Digits));
    }
}

Какой результат в итоге выходит:

При визуальном тестировании При оптимизации тестирования

Price = 1.47376
Price = 1.47386
Price = 1.47397
Price = 1.47405
Price = 1.47415
Price = 1.47426
Price = 1.47436
Price = 1.47447
и т.д.

Price = 0.00000
Price = 0.00000
Price = 0.00000
Price = 0.00000
Price = 0.00000
Price = 0.00000
Price = 0.00000
Price = 0.00000
и т.д.

 

Есть оптимизация параметров, и есть тестирование стратегии. Понятия оптимизации тестирования не существует.

Кроме того, данные функции не работают в тестере стратегий, кроме как на графике визуального тестирования.

 

Прошу прощение за невнятное трактование понятий, Вы как всегда правы - оптимизация параметров.

Ввиду такого поворота событий (просто я предполагал, что тестирование, и уж тем более оптимизация должны иметь единый расчетный механизм логики), возникли пару встречных вопросов:
Если я правильно понял, то в режиме оптимизации - Тестер не работает с графическими объектами графика? Хотя, нет - канал же он рисует, в противном случае ф-ция ObjectCreate возвращала бы false...
В таком случае, существует ли математическая альтернатива данной ф-ции (ObjectGetValueByTime) или её надо самому разрабатывать с нуля?

 
nosms2012:

Если я правильно понял, то в режиме оптимизации - Тестер не работает с графическими объектами графика?

 Посмотрите Клиентский терминал / Тестер стратегий / Визуализация тестирования / Запуск

Для того чтобы запустить визуализацию тестирования необходимо выполнить ряд действий:

- Отключить режим оптимизации, так как визуализация работает только в режиме тестирования.  

 

 

Спасибо уважаемый за отклик!

Но как тогда быть, если логика торговой стратегии построена в основном с использованием графических объектов, таких как Линии Ганна, Фибоначчи, Каналы и пр.
Получается, что в моем случае об оптимизации параметров можно забыть и тестировать методом глаз-экран==ручка-бумага, и так тысячи раз прогонять -  эмулируя генетический алгоритм?..
Хм... как-то не очень весело получается.

 
nosms2012:

Спасибо уважаемый за отклик!

Но как тогда быть, если логика торговой стратегии построена в основном с использованием графических объектов, таких как Линии Ганна, Фибоначчи, Каналы и пр.
Получается, что в моем случае об оптимизации параметров можно забыть и тестировать методом глаз-экран==ручка-бумага, и так тысячи раз прогонять -  эмулируя генетический алгоритм?..
Хм... как-то не очень весело получается.

Ну что здесь можно сказать? - Рош же уже отметил, что

Rosh:
  данные функции не работают в тестере стратегий, кроме как на графике визуального тестирования.

 Если речь идёт о Ваших функциях, то они как бы не должны работать в режиме оптимизации. ..Если не появятся опровержения со стороны разработчиков.

 

В общем, проведя дюжу экспериментов - выявил зависимость ошибки в ф-ции ObjectGetValueByTime при визуальном тестировании!
Как выявить эту ошибку:
При запуске тестирования с галочкой "Визуализация" дождаться когда пойдет эмуляция тиков, а затем нажать кнопку "Прокрутить до" (конечной даты) - получим Первый результат;
Для Второго результата - нужно ползунок "скорости" появления тиком заранее переместить на максимум, закрыть окно визуализации и заново запустить её - результат будет разниться!

Первый результат Второй результат

Price = 1.47217624
Price = 1.47228845
Price = 1.47239434
Price = 1.47250023
Price = 1.47260612
Price = 1.47271201
Price = 1.47281790
Price = 1.47292379
и т.д.

Price = 1.47217624
Price = 1.47228192
Price = 1.47238761
Price = 1.47249329
Price = 1.47259898
Price = 1.47270466
Price = 1.47281035
Price = 1.47291603
и т.д.

Ах да, нужно немного внести корректировку в код:

FileWrite(filehandle, "Price = ", DoubleToString(result, _Digits));
Заменить на:
FileWrite(filehandle, "Price = ", DoubleToString(result));

Что касается моих ф-ций (альтернатива расчета цены относительно времени), то они успешно работают как в режиме оптимизации так и в визуальном тестировании!

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