Логика ТС следующая: переворачивается вовнутрь, когда цена с запасом пересекает 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 по реальным тикам с такими настройками.
Собственно, именно это значение и должно быть инвариантом для всех изменений исходного символа. Т.е. как бы я его не менял (согласно ранее озвученным правилам), это значение должно оставаться постоянным.
По коду видно, что в торговле нигде не используются размеры пунктов, лотов, маржинальных требований и т.д. Имеем просто голый ненормализованный ценовой ряд и торгуем на нем, соблюдая инвариантность к некоторым изменениям этого ряда. Удовлетворение логики ТС таким простым правилам позволяет с помощью нее легко делать масштабные исследования различных синтетических символов. Избавляет от математической ущербности в построении торговых сигналов. А значит уменьшает вероятность самообмана
Чтобы проверить любую ТС, замените просто EA-функцию на другую.
э, тогда бесконечный убыток???
Пример ценен тем, что дает лекгую возможность пощупать инвариантность на реальных данных. И на лаконичном примере понять, почему так происходит.
ТС желательно писать математически правильно. Тогда гораздо больше шансов прийти к прибыльной ТС не случайным образом.
Нужно это, чтобы сделать дальнейшие выводы по тому, как свои торговые идеи не уводить в сторону нарушения математических требований при построении внутренней логики своих ТС.
Более того, есть рабочий код, чтобы проверить свою ТС на устойчивость к определенным изменениям цВР.
И, как правило, авторы прибыльных ТС не могут себе честно объяснить причины прибыльности своих ТС. Потому что это бывает очень сложно понять. Гораздо проще просто убедиться по различным критериям, что ТС прибыльна. Но понять почему — нет.
Так вот помочь себе скорректировать логику прибыльной ТС в сторону математической верности возможно. И тогда анализ причин прибыльности гораздо лучше будет поддаваться успеху. Ну и, поняв корень прибыльности ТС, возникает масса идей, как улучшить.
Основная причина, почему пишутся не инвариантные ТС — нужно гораздо меньше задумываться. Проще реализовывать.
Пытаюсь свои неправильные ТС переделывать на инвариантные.
Пункты — абсолютное изменение цены. Соответственно, полное нарушение мат. логики.
Чот вы сами себе какие-то ограничения выдумываете.
что «настоящий ценовой ряд» тоже может «блуждать» как угодно?
В мт5 есть встроенный функционал создания синтетических инструментов. Я не пробовал в тестере, но в архиве этот инструмент точно появляется, значит он должен быть и в меню тестера.
Ненормализованные цВР в MT5 (про другие Тестеры не знаю — не пробовал) невозможны, к сожалению.
С чем для вас связана необходимость какой бы то ни было точности выдуманного инструмента? Точность — это соответствие чему-то, а чему будет соответствовать синтетика, пусть даже в её основе реальный инструмент?
Только мат. выверенные ТС позволяют проводит масштабные исследования на синтетиках.
В порядке примера. Линейное преобразование (умножение на константу и прибавление константы) ценового ряда не перестановочно с логарифмированием. Значит, все системы, которые разрабатываются в логарифмах цен, автор отбросит.
Другой пример.
Существует много реальных параметров в абсолютной шкале. Например, минимальный шаг цены. Он не инвариантен относительно умножения.
Вероятно, автор пытается перенести специфику форекса, где все это практически неважно, на все рынки вообще.
Также можно пройти по ссылкам в посте на тему форума, где идет активное обсуждение данной темы. К сожалению, здесь мне не всегда приходят уведомления о новых комментариях. Поэтому многие могу просто пропустить.