Ошибки, баги, вопросы - страница 3719

Различие исполнения Stop Loss в режимах тестера MT5: “1 OHLC” vs “Every Tick”

Обнаружил различие в формировании сделки закрытия по Stop Loss в тестере MT5 в разных режимах моделирования.

Условия теста

  • Один и тот же EA, символ и история

  • Открытие позиции происходит в одно и то же время и по одной и той же цене

  • Установлен один и тот же уровень Stop Loss

  • Stop Loss срабатывает на первом тике открытия нового бара

  • Значения Bid/Ask на этом тике одинаковые в обоих режимах


Режимы тестирования

  1. Every Tick

  2. 1 Minute OHLC


Наблюдаемое поведение


При срабатывании Stop Loss:

  • В режиме Every Tick

    DEAL_PRICE = текущий Bid/Ask

  • В режиме 1 OHLC

    DEAL_PRICE = уровень Stop Loss


Из-за этого итоговый убыток отличается, хотя на тике срабатывания Bid/Ask одинаковые.

Обнаружил различие в формировании сделки закрытия по Stop Loss в тестере MT5 в разных режимах моделирования.


Условия теста

  • Один и тот же EA

  • Один и тот же символ и история

  • Открытие позиции происходит в одно и то же время и по одной и той же цене

  • Установлен один и тот же уровень Stop Loss

  • Stop Loss срабатывает на первом тике открытия нового бара

  • Значения Bid/Ask на этом тике одинаковые в обоих режимах


Режимы тестирования

  1. Every Tick

  2. 1 Minute OHLC


Наблюдаемое поведение


При срабатывании Stop Loss:

  • В режиме Every Tick

    DEAL_PRICE = текущий Bid/Ask

  • В режиме 1 OHLC

    DEAL_PRICE = уровень Stop Loss


Из-за этого итоговый убыток отличается, хотя на тике срабатывания Bid/Ask одинаковые.


На приложенном скриншоте видно:

  • Every Tick → закрытие по рыночной цене (~398.45)

  • 1 OHLC → закрытие строго по SL (405.17)


Вопрос

  1. Является ли такое различие ожидаемым поведением тестера?

  2. Есть ли официальная документация, где описано правило формирования DEAL_PRICE при исполнении Stop Loss в разных режимах моделирования?

  3. Почему в режиме 1 OHLC цена сделки берётся из уровня SL, а не из текущего Bid/Ask?


Буду благодарен за ссылку на документацию или описание внутренней логики работы тестера.

Denis Kislicyn #:
  • Every Tick → закрытие по рыночной цене (~398.45)

  • 1 OHLC → закрытие строго по SL (405.17)

  • Эти 2 режима с искусственными котировками, на них нет особого смысла тестировать системы на прибыльность - только на логику работы программы.

    Смотрите только "Каждый тик на основе реальных тиков", это максимально приближённый режим к рынку.

    Vitaly Muzichenko #:

    Эти 2 режима с искусственными котировками, на них нет особого смысла тестировать системы на прибыльность - только на логику работы программы.

    Смотрите только "Каждый тик на основе реальных тиков", это максимально приближённый режим к рынку.

    Главный вопрос не в том какие данные на каждом тике гененрирует тестер в каждом из режимов. Тут все понятно. А в том, что логика расчета убытка в них разная. Я предполагал, что режимы как раз отличаются именно составом тиков и ценами на каждом из них, а все остальное одинаковое. Но выходит так, что DEAL_PRICE для SL в режиме 1OHLC совпадает строго с ценой SL, а в режиме Every tick - DEAL_PRICE - это ask/bid текущего тика.

    Поэтому хочу найти инфу именно об этих отличиях режимов.

    Кстати, в "Every tick" и "Every tick on real data" ведут себя одинаково в части формирования DEAL_PRICE для SL. А отличается от них именно 1OHLC.

    Denis Kislicyn #:

    DEAL_PRICE для SL в режиме 1OHLC совпадает строго с ценой SL

    Потому что альтернативного варианта в этом режиме быть не может даже теоретически.
    fxsaber #:
    Потому что альтернативного варианта в этом режиме быть не может даже теоретически.

    Не могу понять почему в 1OHLC режиме нельзя закрывать позу также по цене Bid, как делают это режимы "Every tick" и "Every tick based on real ticks". 

    На тике закрытия во всех трех режимах ask/bid одинаковый, но в качестве DEAL_OUT_PRICE тестер применяет разные цены в разных режимах. Не могу понять зачем разный расчет делать в разных режимах, если можно одинаковую логику использовать.

    Для уточнения еще 3 картинки (может я как-то непонятно объяснил).


    Denis Kislicyn #:

     (может я как-то непонятно объяснил).

    Всё понятно объяснил.

    fxsaber тоже всё понятно объяснил.

    Попробую и я, другими словами. Немного утрированно.

    При тесте по всем тикам тестер знает, что бар заполнен тиками и при гэпе выбирает для закрытия ближайший тик.

    При торговле OHLC  тестер знает, что бар заполнен тиками, но выбрать ближайший он не может, так как нет у него выбора (тиков нет), поэтому закрывает по указанной цене SL.

    Думаю, при торговле по OHLC для гэпов в тестере было бы хорошо, чтоб разработчики сделали исключение и SL закрывать по ближайшей цене.

    Aleh Sasonka #:

    Предположительно ошибка появилась после обновления 5640.


    Ещё вчера МетаКуотс-Демо рассчитал всё правильно - сегодня накатили 5664, 5665 - и все ошибки вернулись.

    Denis Kislicyn #:

    Не могу понять зачем разный расчет делать в разных режимах, если можно одинаковую логику использовать.

    Потому что в M1_OHLC_Spread мало данных. Этот режим даже не M1_OHLC[1]_Open[0]_Spread[1]_Spread[0], когда идет анализ срабатывания SL/TP не только на баре, что закончился, но и на начале бара. И даже в таком режиме, если OHLC[1] не удовлетворяют SL, а Open[0] - удовлетворяет, нельзя Open[0] использовать для PositionSELL_SL, т.к. нет данных для Open[0]_Ask.


    В общем, мало данных. Поэтому отсутствует проскальзывание у отложенных ордеров и SL/TP.

    fxsaber #:

    Потому что в M1_OHLC_Spread мало данных. Этот режим даже не M1_OHLC[1]_Open[0]_Spread[1]_Spread[0], когда идет анализ срабатывания SL/TP не только на баре, что закончился, но и на начале бара. И даже в таком режиме, если OHLC[1] не удовлетворяют SL, а Open[0] - удовлетворяет, нельзя Open[0] использовать для PositionSELL_SL, т.к. нет данных для Open[0]_Ask.


    В общем, мало данных. Поэтому отсутствует проскальзывание у отложенных ордеров и SL/TP.

    Спред у этих баров есть, а значит вы ошибаетесь про отсутствие Open[0]_Ask.

    Насчёт отсутствия проскальзывания внутри свечей согласен, его быть не может, а вот проскальзывания при открытии свечи с гэпом вполне возможно сделать и в режиме тестирования OHLC.

    Это значительно приблизило бы тестирование по OHLC к более точным режимам тестирования.

    Aleksandr Slavskii #:

    Спред у этих баров есть, а значит вы ошибаетесь про отсутствие Open[0]_Ask.

    Это минимальный спред (такое вынужденное официальное заглядывание в будущее) за время жизни всего бара, а не спред на открытии.

    Сравните Open[0].ask в разных режимах Тестера.