fxsaber
fxsaber личный блог
04 марта 2020, 20:41

Пример математически правильной Торговой Системы

Ниже математически правильная ТС с проверкой, что это так.
Пример математически правильной Торговой Системы


Логика ТС следующая: переворачивается вовнутрь, когда цена с запасом пересекает EMA-шку от цены.

// Пример математически правильной ТС с возможностью ее проверки в MT5-Тестере.
// https://www.mql5.com/ru/forum/333746

input group "EA"
input int inPeriod = 100;       // Период EMA-шки
input double inFilter = 0.0005; // Фильтр сделок

// Торговая система
void EA()
{
  static const double Filter = MathLog(1 + inFilter); // С таким запасом нужно будет пересечь EMA для переворота.
  static EMA Ema(inPeriod); // Инициализировали EMA с соответствующим периодом.

  MqlTick Tick;

  if (!SymbolInfoTick(_Symbol, Tick)) // Взяли текущий тик.
    return;

  const MqlTick LogTick = LogTick(Tick); // Логарифмировали его.
  const double Price = Ema.Get((LogTick.bid + LogTick.ask) / 2); // Применили EMA к средней цене.

  const int Type = OrderSelect(0, SELECT_BY_POS) ? OrderType() : -1; // Направление текущей открытой позиции.

  if (LogTick.bid > Price + Filter) // Если bid выше EMA-шки с запасом, переворачиваемся в SELL.
  {
    if (Type != OP_SELL) // Если SELL не открыта.
    {
      if (Type == OP_BUY)                                             // Если BUY открыта,
        OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 0); // закроем ее.

      OrderSend(_Symbol, OP_SELL, 1, Tick.bid, 0, 0, 0); // Откроем SELL-позицию.
    }
  }
  else if ((LogTick.ask < Price - Filter) && (Type != OP_BUY)) // Если ask ниже EMA-шки с запасом, переворачиваемся в BUY.
  {
    if (Type == OP_SELL)                                            // Если SELL открыта,
      OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 0); // закроем ее.

    OrderSend(_Symbol, OP_BUY, 1, Tick.ask, 0, 0, 0); // Откроем BUY-позицию.
  }
}

Вся система — это лаконичная EA-функция. Остальной функционал — проверка правильности ТС. Специально привел полный листинг, чтобы было понятно, о чем речь. Код простой.

Запускается советник в MT5-Тестере, но совершает он сделки в виртуальном торговом окружении, т.к. MT5-Тестер не умеет работать с произвольными ценами.

Отчет торговли автоматически появляется в браузере в виде HTML (нужно разрешить использование DLL — WinAPI).

Проверка.

 

Итак, запускаем на EURUSD по реальным тикам с такими настройками.
Пример математически правильной Торговой Системы
Исходный символ не меняется (нет домножения и/или переворота).

Получаем в браузере торговый отчет с графиком баланса (см. выше). И смотрим значение прибыльности ТС.
Пример математически правильной Торговой Системы

Собственно, именно это значение и должно быть инвариантом для всех изменений исходного символа. Т.е. как бы я его не менял (согласно ранее озвученным правилам), это значение должно оставаться постоянным.


Замена символа.

Попробуем изменить исходный символ.
Пример математически правильной Торговой Системы
Выделенное в настройках показывет, что символ теперь равен 7/EURUSD. Т.е. перевернули EURUSD и потом домножили на семь. После запуска Вы увидите, что график торговли и значение OnTester остались неизменны.

На всякий случай сравним каждый вход/выход до изменения и после. Ниже на скрине оба HTML-отчета.
Пример математически правильной Торговой Системы
Видим, что входы идентичны (с точностью до миллисекунды).


Зачем это нужно?

По коду видно, что в торговле нигде не используются размеры пунктов, лотов, маржинальных требований и т.д. Имеем просто голый ненормализованный ценовой ряд и торгуем на нем, соблюдая инвариантность к некоторым изменениям этого ряда. Удовлетворение логики ТС таким простым правилам позволяет с помощью нее легко делать масштабные исследования различных синтетических символов. Избавляет от математической ущербности в построении торговых сигналов. А значит уменьшает вероятность самообмана

Чтобы проверить любую ТС, замените просто EA-функцию на другую.

26 Комментариев
  • Dmitryy
    04 марта 2020, 20:50
    Судя по коду, модель ТС — пересекаем EMA сверху-вниз — покупаем, снизу-вверх — продаем. И что такие ТС реально прибыльны? А если вола подскакивает внутри дня?
    • baron_samedi
      04 марта 2020, 21:08
      Dmitryy, 
      э, тогда бесконечный убыток???
  • Пафос Респектыч
    04 марта 2020, 22:39
    Можно сказать что ТС математически если не правильна, то хотя бы интересна, если она может отличить настоящий ценовой ряд от случайного блуждания с матожиданием 0. Одна машка-еэмашка этого сделать не может. Что толку, что она удовлетворяет каким-то правилам?
      • Пафос Респектыч
        04 марта 2020, 23:03
        fxsaber, так если у него отсутствует полезность у этого алгоритма, причём принципиально и математически достоверно, то получается неизвестно, инвариантность — это хорошо или плохо? А если вдруг появится пример более сложного алгоритма, который не инвариантен но генерит прибыльные сделки явно неслучайным образом, то что делать?
          • Пафос Респектыч
            04 марта 2020, 23:48
            fxsaber, ну чессгря я вот попытался, но не смог придумать пример как ТС может не держать инвариантность относительно линейного масштабирования цен ) хотя я ТС алгоритмом машобучательным генерю, и понятно что если обучить на немасштабированных ценах и прогнать на масштабированных, то работать скорее всего не будет. Но это как бы и нормально же?
              • Пафос Респектыч
                05 марта 2020, 00:12
                fxsaber, а что не так если задавать что-то в пунктах? Что в чём измеряется то в том и задаётся если это параметр, главное же это размерность не перепутать. Пункты, проценты, контракты/лоты и так далее.
                  • Пафос Респектыч
                    05 марта 2020, 00:19
                    fxsaber, совершенно необязательно, кто сказал что торговля всегда идёт относительного изменения цены?? На тех же фьючах нас интересует количество пунктов изменения цены, которые удалось взять, на форексе в общем то же самое.

                    Чот вы сами себе какие-то ограничения выдумываете.
    • VladMih
      04 марта 2020, 23:39
      Пафос Респектыч, вы это серьезно?
      ТС *** может отличить настоящий ценовой ряд
      от случайного блуждания с матожиданием 0
      • Пафос Респектыч
        04 марта 2020, 23:45
        VladMih, да, а что?
        • VladMih
          04 марта 2020, 23:51
          Пафос Респектыч, а ничего, вы не в курсе,
          что «настоящий ценовой ряд» тоже может «блуждать» как угодно?
          • Пафос Респектыч
            04 марта 2020, 23:57
            VladMih, конечно может, кто же ему запретит? Но иногда мы можем сказать как он в ближайшее время заблуждает в среднем, и ещё более иногда, глядя на оценку матожидания и дисперсии этого ожидаемого блуждания, можем захотеть встать в лонг или в шорт.
  • SergP
    04 марта 2020, 22:41
    Какой громкий заголовок! Я чуть не оглох...
  • VladMih
    04 марта 2020, 23:36
    MT5-Тестер не умеет работать с произвольными ценами
    По-моему ошибаетесь.
    В мт5 есть встроенный функционал создания синтетических инструментов. Я не пробовал в тестере, но в архиве этот инструмент точно появляется, значит он должен быть и в меню тестера.
      • VladMih
        05 марта 2020, 00:20
        fxsaber, есть способы избежать этих искажений, по крайней мере существенных. Какое бы сильное не получилось искажение, в среднем общую картину оно не изменит (неточности будут в разные стороны — в среднем «точно»).

        С чем для вас связана необходимость какой бы то ни было точности выдуманного инструмента? Точность — это соответствие чему-то, а чему будет соответствовать синтетика, пусть даже в её основе реальный инструмент?
  • SergeyJu
    05 марта 2020, 12:25
    Вот спинным мозгом чувствуют, что авторское ограничение избыточно. 
    В порядке примера. Линейное преобразование (умножение на константу и прибавление константы) ценового ряда не перестановочно с логарифмированием. Значит, все системы, которые разрабатываются в логарифмах цен, автор отбросит.
    Другой пример. 
    Существует много реальных параметров в абсолютной шкале. Например, минимальный шаг цены. Он не инвариантен относительно умножения. 
    Вероятно, автор пытается перенести специфику форекса, где все это практически неважно, на все рынки вообще. 

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн