Особенности режима моделирования "по ценам открытия" в тестере

 

Вот такая ситуация. То ли я не могу понять логику действий тестера, то ли недоработка компании-разработчика (вряд ли конечно).

int start()
  {
   if (OrdersTotal()<1)
    OrderSend(Symbol(),OP_BUYSTOP,1,1.2884,0,1.2850,0,NULL,0,0);
   return(0);
  }

Выставляется отложенный ордер buy stop, в нем сразу указан stop loss. Все нормально, ордер выставлен.

http://ipicture.ru/upload/100520/5kyU6Ya77U.png

http://ipicture.ru/upload/100520/USDUS6geT2.png

Вырисовывается следующий бар. И вот здесь отложенный ордер становится рыночным, но stop loss не срабатывает, хотя цена была ниже (1,2840).

http://ipicture.ru/upload/100520/K7ZOVTwJNS.png

http://ipicture.ru/upload/100520/rVXRy75d7E.png

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

Или может я где-то ошибаюсь? Что поправить в коде, чтобы SL сработал на 1,2850 на текущем баре в данном примере?

 

Похоже я некорректно задал вопрос, поэтому и не получил ответ. Попробую его перефразировать.

При тестировании текущий бар имеет такие данные: O=H=L=C=1.2877

Выставляется отложенный ордер buy stop по заявленной цене 1,2884, указывается SL 1,2850

Далее тестер вырисовывает эту свечу, этот отложенный ордер становится рыночным, Low свечи равен 1,2840 (это на 10 пунктов ниже уровня SL), но SL не срабатывает. То есть получается, что если выставлять отложенный ордер и указывать сразу SL, и если High и Low (тело свечи) зацепят и заявленную цену открытия ордера и уровень SL в пределах одной свечи, то ордер станет рыночным, но SL не сработает.

Помогите, что можно сделать, чтобы тестер исполнял SL на том же баре, в пределах которого отложенный ордер стал рыночным (конечно, если цена пробила уровень SL)?

 
kravs >>:

Похоже я некорректно задал вопрос, поэтому и не получил ответ. Попробую его перефразировать.

При тестировании текущий бар имеет такие данные: O=H=L=C=1.2877

Выставляется отложенный ордер buy stop по заявленной цене 1,2884, указывается SL 1,2850

Далее тестер вырисовывает эту свечу, этот отложенный ордер становится рыночным, Low свечи равен 1,2840 (это на 10 пунктов ниже уровня SL), но SL не срабатывает. То есть получается, что если выставлять отложенный ордер и указывать сразу SL, и если High и Low (тело свечи) зацепят и заявленную цену открытия ордера и уровень SL в пределах одной свечи, то ордер станет рыночным, но SL не сработает.

Помогите, что можно сделать, чтобы тестер исполнял SL на том же баре, в пределах которого отложенный ордер стал рыночным (конечно, если цена пробила уровень SL)?

Откройте минутный таймфрейм и посмотрите как развивалось движение внутри бара, может цена действительно вначале сходила вниз.
 
kravs >>:

Похоже я некорректно задал вопрос, поэтому и не получил ответ. Попробую его перефразировать.

При тестировании текущий бар имеет такие данные: O=H=L=C=1.2877

Выставляется отложенный ордер buy stop по заявленной цене 1,2884, указывается SL 1,2850

Далее тестер вырисовывает эту свечу, этот отложенный ордер становится рыночным, Low свечи равен 1,2840 (это на 10 пунктов ниже уровня SL), но SL не срабатывает. То есть получается, что если выставлять отложенный ордер и указывать сразу SL, и если High и Low (тело свечи) зацепят и заявленную цену открытия ордера и уровень SL в пределах одной свечи, то ордер станет рыночным, но SL не сработает.

Помогите, что можно сделать, чтобы тестер исполнял SL на том же баре, в пределах которого отложенный ордер стал рыночным (конечно, если цена пробила уровень SL)?

Так вы же сами сказали тестирование по ценам открытия, поставьте тестирование по контрольным точкам сработает ваш стоплосс.
 
khorosh >>:
Откройте минутный таймфрейм и посмотрите как развивалось движение внутри бара, может цена действительно вначале сходила вниз.

Я поставил режим моделирования: "по ценам открытия", поэтому тестер использует только 4 цены бара (O,H,L,C) и все. Движение цены внутри бара он не знает. Я где-то читал, что если возникает спорный момент, например, в пределах одного бара будет достигнут и SL и TP (что раньше, он, естественно не знает), то тестер будет считать, что сработал именно SL. Ну это и логично, ведь выбирается худший вариант. Но почему тестер игнорирует SL в описанном мною случае, не понятно...

Urain >>:
Так вы же сами сказали тестирование по ценам открытия, поставьте тестирование по контрольным точкам сработает ваш стоплосс.

Да, похоже, вариант. Попробую. Но уже ради интереса, есть ли способы использования режима "по ценам открытия" и обхода выше описанной проблемы посредством, например, MQL-кода?

 
kravs >>:

Но уже ради интереса, есть ли способы использования режима "по ценам открытия" и обхода выше описанной проблемы посредством MQL-кода?

Думаю что нет, тестер сам по себе приближенная версия торговли вашего советника в реале(даже по всем тикам) а по "по ценам открытия" это урезанная версия урезанной версии.
 
kravs писал(а) >>

Но уже ради интереса, есть ли способы использования режима "по ценам открытия" и обхода выше описанной проблемы посредством, например, MQL-кода?


Переработайте свой советник, что бы он пропускал все тики, кроме "создателя" нового тика - и все будет 1:1 - напр.

int start()
{
  static datetime prevtime=0;
  
  if(prevtime == Time[0]) return(0);
  prevtime = Time[0];


  
  if (OrdersTotal()<1)
    OrderSend(Symbol(),OP_BUYSTOP,1,1.2884,0,1.2850,0,NULL,0,0);
  return(0);
}