Алгоритм докупки: симуляция мультивалютной торговли
Почему вообще стоит моделировать торговлю? Проблема в том, что исторические данные ограничены. У нас есть только один вариант развития событий — то, что уже произошло. Но рынок мог пойти и по-другому. Получается, что мы оцениваем стратегию всего лишь на одной «ветке событий», тогда как в реальности их могло быть тысячи.
Чтобы реально проверить стратегию, нужно посмотреть, как она будет вести себя в разных сценариях. Для этого и нужна симуляция — искусственное создание ценовых рядов.
Смысл в том, что мы можем сгенерировать множество «альтернативных историй». Это даёт шире взгляд: если стратегия работает стабильно при разных вариантах движения цены, значит, она действительно надёжная.
Кроме того, симуляция снимает проблему недостатка данных. На обычных котировках у нас есть, допустим, 10 лет истории. А с помощью модели можно прогнать сотни «виртуальных» лет, и это покажет, насколько система жизнеспособна на длинной дистанции.
Таким образом, симуляция — это способ протестировать стратегию не только на том, что уже было, но и на том, что могло бы быть. Это даёт более честную и объективную оценку.
Математическая модель симуляции цен с использованием логики дискретизации
Чтобы стратегия докупок работала максимально эффективно. Для этого мы используем подход «дискретизации» — то есть разбиваем движение цены на отдельные шаги.
Почему это удобно? Потому что каждый шаг можно рассматривать как небольшое событие: цена пошла вверх или цена пошла вниз. Если таких шагов много, то мы получаем полную картину движения.
Чтобы описать вероятность, что цена пойдёт вверх или вниз, вводятся простые формулы.
- Уравнение, которое показывает баланс: если сложить вероятность движения вверх и вниз, мы получим математическое ожидание шага.
Это условие говорит: если M = 0, значит рынок полностью случайный, и никакой предсказательности нет.
- Мы можем описать движение цены как случайный процесс, но добавить в него вероятность возврата к исходному уровню.
- Если вероятность полностью равновероятна (50/50), то поведение цены хаотичное.
- Но если есть хоть небольшой перекос, например, цена чаще возвращается назад, чем уходит дальше, то появляется предсказательный момент. Именно на нём и строится работа стратегии докупок.
Чтобы стратегия была понятной, нам нужно ввести ещё один параметр — шаг цены (S*). Он показывает, насколько изменится цена на каждом этапе симуляции.
Эта формула значит: шаг определяется как процент от текущей цены. То есть он всегда пересчитывается заново, и поэтому симуляция не зависит от того, с какой цены мы начинаем. Это удобно: стартовая точка не важна, а модель остаётся универсальной.
Теперь мы хотим вычислить вероятность того, что следующий шаг будет вверх. Для этого используем простое уравнение:
Здесь показано: вероятность движения вверх (Pu) умножается на величину шага вверх (Du), а вероятность движения вниз — на шаг вниз (Dd). Баланс этих значений и даёт математическое ожидание.
Это итоговое выражение, которое позволяет нам рассчитать вероятность шага вверх.
Теперь возникает вопрос: что делать, если цена ушла выше стартовой точки?
Чтобы модель оставалась корректной и в этой ситуации, мы используем «зеркальное отражение». То есть график цены как бы переворачивается, и все формулы продолжают работать так же, только в обратную сторону.
Это значит: если цена ушла вверх, мы просто берём обратную величину, и расчёты продолжают выполняться без изменений.
- S* — это шаг цены, всегда пересчитывается заново.
- Pu — это вероятность того, что цена двинется вверх.
- Зеркальное отражение нужно, чтобы формулы одинаково работали и при падении цены, и при росте.
- Таким образом, мы получили модель, в которой любое движение можно описать через вероятность шага вверх или вниз.
Теперь, когда мы разобрали шаги и вероятности, можно собрать саму торговую модель.
Модель делается односторонней: мы учитываем только докупки, то есть работаем по нижним полуволнам (когда цена идёт вниз). Верхние шаги — продажи — в тестировании пропускаем, чтобы максимально упростить систему.
Почему так? Потому что если модель работает только в случае докупок, то симметрично она будет работать и при продажах. Это значит, что логика сохраняется и для полной торговой системы, которая учитывает и верхние, и нижние движения.
Для управления торговой моделью вводятся параметры:
- StepMultiplier — множитель шага. Он показывает, во сколько раз увеличивается шаг при каждом следующем движении. Например, если множитель = 1.2, то шаги растут постепенно.
- StepPercent — стартовый шаг в процентах от цены.
- BuyValue — фиксированный объём докупки.
- ExchangeCommissionPercent — комиссия за сделку (учитывается всегда).
- Мы берём фиксированный объём сделки и шаг в процентах.
- Каждый новый шаг может быть увеличен в «N» раз за счёт множителя.
- Комиссия всегда учитывается — это критически важно, потому что при маленьком шаге она может съесть весь профит.
- Модель одинаково подходит и для форекса, и для криптобирж, потому что логика универсальна.
Теперь разберём важный параметр — волатильность, то есть скорость изменения цены.
В классическом понимании волатильность часто считают как разницу между максимумом и минимумом цены. Но это неудобно: слишком размыто и плохо отражает реальную скорость движения.
Мы делаем проще: берём среднее изменение цены за фиксированный промежуток времени (бар). Это позволяет описывать скорость движения более точно и удобно.
- Если шаги вверх и вниз равновероятны, то цена двигается случайно, и график получается хаотичным.
- Но если мы вводим вероятность возврата к среднему, то график начинает тяготеть к стартовой точке — получается «гравитация цены».
- Таким образом, через волатильность мы можем регулировать флетовость рынка (как сильно цена колеблется возле средней линии).
Мы специально связываем волатильность со временем, чтобы можно было правильно оценивать: за сколько шагов проходит торговый цикл, сколько прибыли даёт стратегия в среднем и как это меняется на длинной дистанции.
Усреднённые характеристики (αₙ и Pr)
Теперь введём ещё два параметра, которые помогают описывать движение цены.
- αₙ (альфа) — это средний размер отката цены после её движения вниз. По сути, это математическое ожидание отката.
- Pr — это средний процент отката относительно предыдущего движения.
Эти два параметра связаны между собой: один выражается через другой.
- Мы берём все откаты цены и усредняем их.
- Считаем, какой процент от предыдущего движения цена обычно возвращается назад.
- Если этот процент равен нулю, то мы имеем полностью случайное движение (нет возвратов).
- Если процент положительный — значит, в цене есть предсказуемость, потому что возвраты к средней точке происходят регулярно.
Средний процент отката очень удобен для регулировки модели.
- Он позволяет контролировать, насколько рынок «флетовый» (то есть склонен к возвратам).
- Даёт возможность заранее оценить, будет ли стратегия прибыльной: если процент отката достаточно высокий, система работает стабильно.
Чтобы проверить, насколько корректно работает наша математическая конструкция, мы протестировали её на разных вариантах генерации цен.
1. Полностью случайное движение (Pr = 0%)
Если шаги вверх и вниз равновероятны, то цена двигается хаотично.
- В одном тесте может получиться кривая вверх, в другом — вниз, в третьем — боковик.
- Это чистая случайность, и никакой устойчивой закономерности нет.
Если добавить вероятность возврата к средней точке всего 20%, то ситуация немного меняется.
- В отдельных генерациях получаются как прибыльные, так и убыточные кривые.
- Но всё ещё нет стабильности: результат слишком сильно зависит от конкретной симуляции.
А вот если увеличить вероятность возврата до 50%, эффект становится очевидным.
- Цена начинает тяготеть к средней линии.
- Флетовые участки сглаживаются.
- Кривая доходности становится гораздо устойчивее.
- Если вероятность возврата равна нулю → стратегия работает как случайный процесс.
- При слабом возврате (20%) видим отдельные улучшения, но стабильности нет.
- При возврате 50% и выше кривая приобретает форму устойчивого роста.
То есть математическая модель показывает: чем сильнее выражен возврат к средней цене, тем стабильнее работает стратегия докупок.
Чтобы проверить, как математическая модель работает на практике, мы сделали тестовый советник для MetaTrader 5.
Этот советник повторяет нашу модель докупок, но добавляет ещё и верхние полуволны (продажи). То есть он полностью отрабатывает циклы — и на покупку, и на продажу.
- Тест шёл с 2009 по 2023 год.
- Использовались все 28 валютных пар (параллельно).
- Алгоритм строился на том же шаблоне мультибота, который описывался в предыдущих статьях.
- Кривая прибыли получилась неидеальной (не прямая линия), но стабильной.
- Для запуска потребовался большой депозит, но это естественно: стратегия работает с постоянными докупками, и капитал нужен для выдерживания просадок.
- Главное — модель показала, что она действительно рабочая: даже на такой длинной дистанции и большом числе инструментов она не «сломалась».
Зачем нужен советник
Наша цель была не в том, чтобы дать готового робота.
Задача — показать, что математическая модель и реальный тест совпадают по сути.
Это значит, что при доработке параметров (мани-менеджмента, фильтров и т. д.) алгоритм можно сделать ещё более надёжным, безопасным и прибыльным.
Сначала мы показали, что стратегия докупок в своей основе работает только тогда, когда в движении цены есть хотя бы небольшой предсказательный элемент. Если движение полностью случайное — результат тоже будет случайным, и система не даст стабильной прибыли.
Затем мы ввели параметры, которые описывают движение цены: шаг, вероятность возврата, средний процент отката. Эти показатели позволили построить универсальную модель, которая одинаково применима и к форексу, и к криптобиржам, и к любым другим активам.
С помощью симуляций мы убедились:
- при отсутствии возвратов (Pr = 0%) стратегия ведёт себя как случайный процесс;
- при слабых возвратах (Pr = 20%) появляются улучшения, но стабильности нет;
- при выраженных возвратах (Pr = 50% и выше) система становится устойчивой и даёт стабильный рост.
Наконец, мы перенесли модель в тестовый советник для MetaTrader 5 и прогнали её на 28 валютных парах за 14 лет истории. Результаты подтвердили: идея работает и в математике, и в реальных условиях.
Главный вывод простой: стратегия докупок жизнеспособна, если она опирается на закономерность рынка — возврат к средней цене. Именно эта особенность позволяет ей показывать стабильный рост на длинной дистанции.