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 сверху-вниз — покупаем, снизу-вверх — продаем. И что такие ТС реально прибыльны? А если вола подскакивает внутри дня?
  • Пафос Респектыч
    04 марта 2020, 22:39
    Можно сказать что ТС математически если не правильна, то хотя бы интересна, если она может отличить настоящий ценовой ряд от случайного блуждания с матожиданием 0. Одна машка-еэмашка этого сделать не может. Что толку, что она удовлетворяет каким-то правилам?
  • SergP
    04 марта 2020, 22:41
    Какой громкий заголовок! Я чуть не оглох...
  • VladMih
    04 марта 2020, 23:36
    MT5-Тестер не умеет работать с произвольными ценами
    По-моему ошибаетесь.
    В мт5 есть встроенный функционал создания синтетических инструментов. Я не пробовал в тестере, но в архиве этот инструмент точно появляется, значит он должен быть и в меню тестера.

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

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