И опять двадцать пять.. ((( (к достоверности оптимизации)

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Сергей Таболин
2650
Сергей Таболин  


По этой "больной" теме говорилось уже не раз. Но вот опять приходится её поднимать.

В общем так.

Провёл ген. оптимизацию советника.

Запустил по его результатам одиночный тест.

Ну и решил просмотреть открытый график. (Кстати, тоже уже не один раз спрашивал в разных ветках, почему на этом графике не отображаются пользовательские индикаторы? Никто ничего так и не ответил. Но сейчас не об этом...)

Одно из заинтересовавших меня мест:


По логике, эта позиция должна была уже несколько раз быть закрытой.

Решил проверить в визуальном режиме.


Вот позиция открыта. Синяя линия - это виртуальный стоп, который должен сработать после открытия нового бара.

Что в принципе и отработало как и должно.

Вопрос на засыпку:

Почему при оптимизации и просто тесте этого не произошло??? Как можно в таком случае доверять результатам оптимизации?

Alexey Viktorov
26080
Alexey Viktorov  
Сергей Таболин:


По этой "больной" теме говорилось уже не раз. Но вот опять приходится её поднимать.

В общем так.

Провёл ген. оптимизацию советника.

Запустил по его результатам одиночный тест.

Ну и решил просмотреть открытый график. (Кстати, тоже уже не один раз спрашивал в разных ветках, почему на этом графике не отображаются пользовательские индикаторы? Никто ничего так и не ответил. Но сейчас не об этом...)

Одно из заинтересовавших меня мест:


По логике, эта позиция должна была уже несколько раз быть закрытой.

Решил проверить в визуальном режиме.


Вот позиция открыта. Синяя линия - это виртуальный стоп, который должен сработать после открытия нового бара.

Что в принципе и отработало как и должно.

Вопрос на засыпку:

Почему при оптимизации и просто тесте этого не произошло??? Как можно в таком случае доверять результатам оптимизации?

Доверять надо, в первую очередь, правильно написанному коду. Где вы нашли, что на отсутствующем графике рисуются линии¿¿¿
Igor Zakharov
6511
Igor Zakharov  

пользовательский индикатор можно наложить на график если его вызвать через iCustom. Это нужно делать в OnDeinit, если он нужен вам на графике, который открывается после одиночного прохода. И в OnInit если на визуализации.

касательно основного вопроса: учитывает ли ваш код, что при оптимизации графические объекты не создаются? т.е. и доступа к их свойствам нет.

какой был режим тестера? - по открытию баров?

Сергей Таболин
2650
Сергей Таболин  
Alexey Viktorov:
Доверять надо, в первую очередь, правильно написанному коду. Где вы нашли, что на отсутствующем графике рисуются линии¿¿¿

На каком отсутствующем?

Первая картинка - это график одиночного теста открытый автоматически после оптимизации.

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

Сергей Таболин
2650
Сергей Таболин  
Igor Zakharov:

пользовательский индикатор можно наложить на график если его вызвать через iCustom. Это нужно делать в OnDeinit, если он нужен вам на графике, который открывается после одиночного прохода. И в OnInit если на визуализации.

касательно основного вопроса: учитывает ли ваш код, что при оптимизации графические объекты не создаются? т.е. и доступа к их свойствам нет.

какой был режим тестера? - по открытию баров?

За OnDeinit спасибо, попробую.

Сами графические объекты (линия виртуального стопа) нужны исключительно для визуализации правильности работы. Сами же данные храняться в структуре и используются из неё.


Slava
Модератор
13454
Slava  

В визуальном режиме все индикаторы пересчитываются на каждом тике.

В простом тестировании и оптимизации индикаторы пересчитываются по запросу (то есть вполне возможна ситуация. что не на каждом тике, в отличие от визуализатора), если не указано специальное свойство tester_everytick_calculate

Alexey Viktorov
26080
Alexey Viktorov  
Сергей Таболин:

На каком отсутствующем?

Первая картинка - это график одиночного теста открытый автоматически после оптимизации.

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

На том отсутствующем графике которого НЕТ пока идёт оптимизация. График открывается только после полного прохода.

Вопрос именно в коде. Как получить значение линии если её нет? Как её нарисовать если нет графика???

Сергей Таболин
2650
Сергей Таболин  
Slava:

В визуальном режиме все индикаторы пересчитываются на каждом тике.

В простом тестировании и оптимизации индикаторы пересчитываются по запросу (то есть вполне возможна ситуация. что не на каждом тике, в отличие от визуализатора), если не указано специальное свойство 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");
                     }
                  }
Сергей Таболин
2650
Сергей Таболин  
Alexey Viktorov:

На том отсутствующем графике которого НЕТ пока идёт оптимизация. График открывается только после полного прохода.

Вопрос именно в коде. Как получить значение линии если её нет? Как её нарисовать если нет графика???

Я не получаю никаких значений никаких линий.

Но, раз уж Вы спрашиваете, то значение любой линии (трендовой, например) можно запросто получить и в тестере, и в оптимизаторе в любой момент времени. У меня есть советник, который и оптимизируется (по крайней мере раньше) нормально и тестируется и в котором постоянно идёт считывание значений трендовых линий.

Alexey Viktorov
26080
Alexey Viktorov  
Сергей Таболин:

Я не получаю никаких значений никаких линий.

Но, раз уж Вы спрашиваете, то значение любой линии (трендовой, например) можно запросто получить и в тестере, и в оптимизаторе в любой момент времени. У меня есть советник, который и оптимизируется (по крайней мере раньше) нормально и тестируется и в котором постоянно идёт считывание значений трендовых линий.

Видимо вы волшебник...

Сергей Таболин
2650
Сергей Таболин  
Alexey Viktorov:

Видимо вы волшебник...

Нет, я только учусь ))))

12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий