Блог им. fxsaber

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

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


Логика ТС следующая: переворачивается вовнутрь, когда цена с запасом пересекает 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-функцию на другую.

★5
26 комментариев
Судя по коду, модель ТС — пересекаем EMA сверху-вниз — покупаем, снизу-вверх — продаем. И что такие ТС реально прибыльны? А если вола подскакивает внутри дня?
avatar
Dmitryy, 
э, тогда бесконечный убыток???
avatar
Dmitryy, показан пример торгового алгоритма, который удовлетворяет некоторым математическим правилам, обсужденных ранее.

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

ТС желательно писать математически правильно. Тогда гораздо больше шансов прийти к прибыльной ТС не случайным образом.
avatar
Можно сказать что ТС математически если не правильна, то хотя бы интересна, если она может отличить настоящий ценовой ряд от случайного блуждания с матожиданием 0. Одна машка-еэмашка этого сделать не может. Что толку, что она удовлетворяет каким-то правилам?
Пафос Респектыч, приведен простейший пример инвариантного алгоритма, который представляет интерес только с точки зрения анализа причин инвариантности.

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

Более того, есть рабочий код, чтобы проверить свою ТС на устойчивость к определенным изменениям цВР.
avatar
fxsaber, так если у него отсутствует полезность у этого алгоритма, причём принципиально и математически достоверно, то получается неизвестно, инвариантность — это хорошо или плохо? А если вдруг появится пример более сложного алгоритма, который не инвариантен но генерит прибыльные сделки явно неслучайным образом, то что делать?
Пафос Респектыч, почти все в той или иной степени прибыльные ТС в своей логике математически ущербны: не держат инвариантность.

И, как правило, авторы прибыльных ТС не могут себе честно объяснить причины прибыльности своих ТС. Потому что это бывает очень сложно понять. Гораздо проще просто убедиться по различным критериям, что ТС прибыльна. Но понять почему — нет.

Так вот помочь себе скорректировать логику прибыльной ТС в сторону математической верности возможно. И тогда анализ причин прибыльности гораздо лучше будет поддаваться успеху. Ну и, поняв корень прибыльности ТС, возникает масса идей, как улучшить.
avatar
fxsaber, ну чессгря я вот попытался, но не смог придумать пример как ТС может не держать инвариантность относительно линейного масштабирования цен ) хотя я ТС алгоритмом машобучательным генерю, и понятно что если обучить на немасштабированных ценах и прогнать на масштабированных, то работать скорее всего не будет. Но это как бы и нормально же?
Пафос Респектыч, самый распространенный случай нарушения инвариантности — это задавать что-то в пунктах.

Основная причина, почему пишутся не инвариантные ТС — нужно гораздо меньше задумываться. Проще реализовывать.

Пытаюсь свои неправильные ТС переделывать на инвариантные.
avatar
fxsaber, а что не так если задавать что-то в пунктах? Что в чём измеряется то в том и задаётся если это параметр, главное же это размерность не перепутать. Пункты, проценты, контракты/лоты и так далее.
Пафос Респектыч, торговля всегда идет относительного изменения цены. Именно это является причиной инвариантности.

Пункты — абсолютное изменение цены. Соответственно, полное нарушение мат. логики.
avatar
fxsaber, совершенно необязательно, кто сказал что торговля всегда идёт относительного изменения цены?? На тех же фьючах нас интересует количество пунктов изменения цены, которые удалось взять, на форексе в общем то же самое.

Чот вы сами себе какие-то ограничения выдумываете.
Пафос Респектыч, здесь поставим точку.
avatar
fxsaber, спокойной ночи 
Пафос Респектыч, вы это серьезно?
ТС *** может отличить настоящий ценовой ряд
от случайного блуждания с матожиданием 0
avatar
VladMih, да, а что?
Пафос Респектыч, а ничего, вы не в курсе,
что «настоящий ценовой ряд» тоже может «блуждать» как угодно?
avatar
VladMih, конечно может, кто же ему запретит? Но иногда мы можем сказать как он в ближайшее время заблуждает в среднем, и ещё более иногда, глядя на оценку матожидания и дисперсии этого ожидаемого блуждания, можем захотеть встать в лонг или в шорт.
Какой громкий заголовок! Я чуть не оглох...
avatar
MT5-Тестер не умеет работать с произвольными ценами
По-моему ошибаетесь.
В мт5 есть встроенный функционал создания синтетических инструментов. Я не пробовал в тестере, но в архиве этот инструмент точно появляется, значит он должен быть и в меню тестера.
avatar
VladMih, представьте, что нужно прогнать ТС по log(EURUSD). В MT5 есть понятие Digits, которое может очень сильно исказить цВР грубым округлением.

Ненормализованные цВР в MT5 (про другие Тестеры не знаю — не пробовал) невозможны, к сожалению.
avatar
fxsaber, есть способы избежать этих искажений, по крайней мере существенных. Какое бы сильное не получилось искажение, в среднем общую картину оно не изменит (неточности будут в разные стороны — в среднем «точно»).

С чем для вас связана необходимость какой бы то ни было точности выдуманного инструмента? Точность — это соответствие чему-то, а чему будет соответствовать синтетика, пусть даже в её основе реальный инструмент?
avatar
VladMih, есть тысячи обезличенных цВР любого диапазона [minPrice; maxPrice]. ТС должна мочь на них работать без каких-либо предварительных настроек.

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

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

теги блога fxsaber

....все тэги



UPDONW
Новый дизайн