По этой "больной" теме говорилось уже не раз. Но вот опять приходится её поднимать.
В общем так.
Провёл ген. оптимизацию советника.
Запустил по его результатам одиночный тест.
Ну и решил просмотреть открытый график. (Кстати, тоже уже не один раз спрашивал в разных ветках, почему на этом графике не отображаются пользовательские индикаторы? Никто ничего так и не ответил. Но сейчас не об этом...)
Одно из заинтересовавших меня мест:
По логике, эта позиция должна была уже несколько раз быть закрытой.
Решил проверить в визуальном режиме.
Вот позиция открыта. Синяя линия - это виртуальный стоп, который должен сработать после открытия нового бара.
Что в принципе и отработало как и должно.
Вопрос на засыпку:
Почему при оптимизации и просто тесте этого не произошло??? Как можно в таком случае доверять результатам оптимизации?
пользовательский индикатор можно наложить на график если его вызвать через iCustom. Это нужно делать в OnDeinit, если он нужен вам на графике, который открывается после одиночного прохода. И в OnInit если на визуализации.
касательно основного вопроса: учитывает ли ваш код, что при оптимизации графические объекты не создаются? т.е. и доступа к их свойствам нет.
какой был режим тестера? - по открытию баров?
Доверять надо, в первую очередь, правильно написанному коду. Где вы нашли, что на отсутствующем графике рисуются линии¿¿¿
На каком отсутствующем?
Первая картинка - это график одиночного теста открытый автоматически после оптимизации.
И вопрос не в коде, а в том, что в визуальном режиме этот код работает правильно, а оптимизация и просто тест не отрабатывают код.
пользовательский индикатор можно наложить на график если его вызвать через iCustom. Это нужно делать в OnDeinit, если он нужен вам на графике, который открывается после одиночного прохода. И в OnInit если на визуализации.
касательно основного вопроса: учитывает ли ваш код, что при оптимизации графические объекты не создаются? т.е. и доступа к их свойствам нет.
какой был режим тестера? - по открытию баров?
За OnDeinit спасибо, попробую.
Сами графические объекты (линия виртуального стопа) нужны исключительно для визуализации правильности работы. Сами же данные храняться в структуре и используются из неё.
В визуальном режиме все индикаторы пересчитываются на каждом тике.
В простом тестировании и оптимизации индикаторы пересчитываются по запросу (то есть вполне возможна ситуация. что не на каждом тике, в
отличие от визуализатора), если не указано специальное свойство tester_everytick_calculate
На каком отсутствующем?
Первая картинка - это график одиночного теста открытый автоматически после оптимизации.
И вопрос не в коде, а в том, что в визуальном режиме этот код работает правильно, а оптимизация и просто тест не отрабатывают код.
На том отсутствующем графике которого НЕТ пока идёт оптимизация. График открывается только после полного прохода.
Вопрос именно в коде. Как получить значение линии если её нет? Как её нарисовать если нет графика???
В визуальном режиме все индикаторы пересчитываются на каждом тике.
В простом тестировании и оптимизации индикаторы пересчитываются по запросу (то есть вполне возможна ситуация. что не на каждом
тике, в отличие от визуализатора), если не указано специальное свойство tester_everytick_calculate
Логика советника строится на принятии решения на новом баре. При появлении нового бара считываются показания индикаторов. Если данные не получены - ничего не происходит.
Но вопрос то не по индикаторам. Есть заданная цена виртуального стопа. Если цена закрытия бара оказывается ниже ВС (при позиции buy), то позиция закрывается. Индикаторы тут не при делах.
Так вот, каким образом оптимизатор не видит такой расклад?
Print("проверка выхода на баре"); // проверка выхода на баре if((!in_up_virt_stop && pos_PREP.position_type == POSITION_TYPE_BUY && virt.virt_stop != 0.0 && last_tick.bid <= virt.virt_stop) || (!in_dn_virt_stop && pos_PREP.position_type == POSITION_TYPE_SELL && virt.virt_stop != 0.0 && last_tick.ask >= virt.virt_stop)) { Print("position_type = ",(pos_PREP.position_type == POSITION_TYPE_BUY ? "POSITION_TYPE_BUY" : (pos_PREP.position_type == POSITION_TYPE_SELL ? "POSITION_TYPE_SELL" : "POSITION_NO"))); Print("last_tick = ",(pos_PREP.position_type == POSITION_TYPE_BUY ? last_tick.bid : last_tick.ask)); Print("virt_stop = ",virt.virt_stop); if(cst_Position.closePosition(true)) { count_clouse_Vsl += 1; virt.virt_stop = 0.0; virt.whait_sign_up = 0; virt.whait_sign_dn = 0; ObjectDelete(ChartID(),"vst"); } }
На том отсутствующем графике которого НЕТ пока идёт оптимизация. График открывается только после полного прохода.
Вопрос именно в коде. Как получить значение линии если её нет? Как её нарисовать если нет графика???
Я не получаю никаких значений никаких линий.
Но, раз уж Вы спрашиваете, то значение любой линии (трендовой, например) можно запросто получить и в тестере, и в оптимизаторе в любой момент времени. У меня есть советник, который и оптимизируется (по крайней мере раньше) нормально и тестируется и в котором постоянно идёт считывание значений трендовых линий.
Я не получаю никаких значений никаких линий.
Но, раз уж Вы спрашиваете, то значение любой линии (трендовой, например) можно запросто получить и в тестере, и в оптимизаторе в любой момент времени. У меня есть советник, который и оптимизируется (по крайней мере раньше) нормально и тестируется и в котором постоянно идёт считывание значений трендовых линий.
Видимо вы волшебник...
Видимо вы волшебник...
Нет, я только учусь ))))
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
По этой "больной" теме говорилось уже не раз. Но вот опять приходится её поднимать.
В общем так.
Провёл ген. оптимизацию советника.
Запустил по его результатам одиночный тест.
Ну и решил просмотреть открытый график. (Кстати, тоже уже не один раз спрашивал в разных ветках, почему на этом графике не отображаются пользовательские индикаторы? Никто ничего так и не ответил. Но сейчас не об этом...)
Одно из заинтересовавших меня мест:
По логике, эта позиция должна была уже несколько раз быть закрытой.
Решил проверить в визуальном режиме.
Вот позиция открыта. Синяя линия - это виртуальный стоп, который должен сработать после открытия нового бара.
Что в принципе и отработало как и должно.
Вопрос на засыпку:
Почему при оптимизации и просто тесте этого не произошло??? Как можно в таком случае доверять результатам оптимизации?