Баг из тестера

 
Наконец-то удалось сгенерировать в тестере баг, который уже много времени мне не дает спать спокойно.

Ситуация. Открываются одновременно 2 ордера, один buy другой отложенный sell, стоп-лосс бая ставится на цену открытия селл, вот код:
void StartTorg()
{
int err;
double aaa;
  aaa = NormalizeDouble(Bid - Point * StopLoss, Digits);
  err = OrderSend(Symbol(), OP_BUY, Lots, Ask, 0, aaa, 0, OrderComm, MagicID, 0, Green);
  if (err < 0)
    Print("OrderSend() BUY Error=", GetLastError(), " Open=", Ask, " SL=", aaa);
  else
  {
    err = OrderSend(Symbol(), OP_SELLSTOP, Lots, aaa, 0, Bid, 0, OrderComm, MagicID, 0, Red);
    if (err < 0)
      Print("OrderSend() SELLSTOP Error=", GetLastError(), " Open=", aaa, " SL=", Bid);
  }
}


И вот что нам показывает тестер:


А теперь попытаюсь все объяснить. На графике обведено 2 ошибки, но скорее всего это последствия одной ошибки. На графике, где написано «Совпало», это правильная ситуация, при срабатывании стоп-лосс по sell сробатывает функция код которой представлен выше, т.е. buy открывается там же где и сработал стоп-лосс. Далее срабатывает стоп-лосс по buy, смотрим надпись «Сработало», в этот же момент активируется отложенный sell, все идет как и задумано.

Но вод в следующем случае начинаются ошибки. Смотрим надпись «НЕ совпало». В этот момент сработал стоп-лосс по sell, тут же вызывается функция приведенная выше, и что мы видим, время срабатывания стоп-лосс по sell, выставления buy и отложенного sell одно и тоже 9:50 (нижний рисунок, обведено красным), но цены почему-то отличаются, т.е. стоп-лосс по sell сработал по цене 1.3028, а buy и отложенного sell отсчитывались от цены 1.3029. Не забываем, это тестер, у него нет каких-то там временных задержек.

Следом идет следующая ошибка. Сработала активация отложенного sell, в этот же момент должен сработать и стоп-лосс по buy, но он НЕ сработал. И это самое ужасное. В результате мы имеем 2 активных ордера. А ведь этот алгоритм и был сделан для того чтобы реализовать идею переворота направления, т.е. при срабатывании стоп-лосс открыть ордер в другом направлении.

Уважаемые разработчики, просьба хоть как-то прореагировать на эту ошибку. Вероятность возникновения этой ошибки очень мала, но ее появление выводит эксперта из строя.

 
Какой это билд? Я самостоятельно протестировал и у меня все отрабатывает верно. Вероятно, нужны более сложные условия со множеством сделок, чтобы обнаружить расхождения.

Выложите полный код (или вышлите его на renat AT metaquotes. ru) эксперта, пожалуйста. Это поможет нам найти проблему.
 
Билд 200 (от 14 ноября). Ошибка появляется очень редко. Я ее вылавливал всего лишь раза 3-4. Скорее всего, эта ошибка связана с нормализацией вещественных чисел внутри функции OrderSend, а потом восприятия этих чисел, как уровней s/l и t/p. Попытаюсь сегодня еще раз смоделировать эту ошибку, если получится, вышлю больше данных.
 
По присланному коду:

Я проверил и выяснил. Все очень просто - никакой ошибки нет:

1) стоит стоплосс на цене 1.3028 (с Вашего графика, первый кусок "не совпало")
2) текущий ask 1.3027, цена движется вверх
3) вместо того, чтобы цене измениться на 1 пипс до 1.3028, цена прыгает на 2 пипса до 1.3029
4) в результате без проскальзывания отрабатывается стоплосс по цене 1.3028 (когда рынок уже 1.3029)
5) тут вступает в игру открытие BUY позиции, но конечно же по рыночной цене в 1.3029 (это видно по Вашей
таблице сделок и графику)

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

Это не ошибка, а нормальная рыночная ситуация.

Кстати, нежелательно строить стратегию, которая так сильно зависит от точности уровней срабатывания. На реальном счете обязательно будут расхождения из-за разности времени срабатывания стопов и отработки приказа на открытие новых позиций.
 
На счет открытия BUY я с вами согласен, скачки цены более чем на 1 пункт, это нормально. Ошибка, на которую я хотел обратить ваше внимание, не в этом. Ошибка (см. «Сработало», «НЕ сработало») в срабатывании ордера SELL и НЕ срабатывании стоп-лосс. Ведь и sell и стоп выставляются в одно и то же время, и на одно и тоже значение, значит и сработать должны вместе и срабатывают в 99% случаев, а иногда все-таки НЕ срабатывают.
 
На счет открытия BUY я с вами согласен, скачки цены более чем на 1 пункт, это нормально. Ошибка, на которую я хотел обратить ваше внимание, не в этом. Ошибка (см. «Сработало», «НЕ сработало») в срабатывании ордера SELL и НЕ срабатывании стоп-лосс. Ведь и sell и стоп выставляются в одно и то же время, и на одно и тоже значение, значит и сработать должны вместе и срабатывают в 99% случаев, а иногда все-таки НЕ срабатывают.

Проверю сегодня.
 
Последний случай "не сработало" вообще стоит на последнем баре и по скриншоту видно, что тестирование не закончено? Где строка "close at stop"?

Опишите, пожалуйста, как проходило тестирование, в каких режимах, закончилось ли оно и тд.
 
Я остановил тест, чтобы показать ошибку. Какой смысл идти дальше, если в работе произошел сбой. Выкладываю вариант картинок с законченным тестированием. Тестирование идет по всем тикам. А проще говоря, берете эксперта, которого я вам (Ренат) выслал, подключаетесь к тому серверу (тоже в письме прикрепил), и прогоняете по EURUSD, M1 с даты 01.02.2007 по всем тикам и получаете эту же картину.

 
Интересно узнать, как продвигается поиск бага или эта тема уже никому не интересно?
 
Для начала поставьте самый свежий билд. Подобную ошибку мы исправляли в декабре месяце.
 
Попробовал в 201 декабрьском билде и вправду все работает, ошибка не появляется. Чтож вы сразу-то не сказали, а я вас мучил из-за этого.
Причина обращения: