preview
Трейлинг-стоп в трейдинге

Трейлинг-стоп в трейдинге

MetaTrader 5Примеры | 30 января 2024, 17:00
1 363 0
Aleksej Poljakov
Aleksej Poljakov

Введение

Основное предназначение трейлинг-стопа — получить гарантированную прибыль с минимальным риском. Суть работы трейлинг-стопа очень проста. Стоп-лосс постепенно перемещается за ценой, если она движется в пользу трейдера. И остается на месте, если цена пошла в противоположном направлении.

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

Существует большое количество вариантов трейлинг-стопа. Свои варианты трейлинг-стопа есть в составе торговой платформы MetaTrader.

Кроме того, трейлинг-стоп можно автоматизировать и включать его в код торговых экспертов. Например, это можно сделать с помощью классов сопровождения открытых позиций.

Эффективность трейлинг-стопа во многом зависит от волатильности цены и подбора уровня стоп-лосса. Для установки стоп-лосса могут использоваться самые разные подходы. Например, при ярко выраженном тренде можно использовать значения максимумов или минимумов цены. Кроме того, параметры трейлинг-стопа могут определяться и с помощью технических индикаторов. Такой подход описан в статье "Как создать свой Trailing Stop". В этой статье мы рассмотрим возможность построения трейлинг-стопа на основе статистических данных.


Простой трейлинг-стоп

Торговая стратегия и трейлинг-стоп не зависят друг от друга. Главное отличие между ними заключается в том, что стратегии открывают и закрывают позиции. А трейлинг-стоп предназначен только для закрытия позиций.

Сначала давайте рассмотрим ограничения, которые накладываются на стоп-лосс.

Верхняя граница стоп-лосса задается в свойствах символа – минимальная разница между ценой закрытия позиции и устанавливаемым стоп-лоссом не может быть меньше минимального отступа в пунктах от текущей цены закрытия позиции.

SymbolInfoInteger(_Symbol,SYMBOL_TRADE_STOPS_LEVEL)

А вот нижнюю границу стоп-лосса для трейлинг-стопа нам придется рассчитывать самостоятельно. Первое требование к минимальному стоп-лоссу – он должен находиться в области безубытка. На первый взгляд все просто – минимальный стоп-лосс должен быть не хуже, чем цена открытия позиции. Правильно? Да, неправильно.

При открытии позиции с трейдера может быть удержана комиссия. Кроме того, позиция за время своего существования может накопить своп. Эти дополнительные расходы должны быть учтены при расчете минимально возможного стоп-лосса. Для этого нам нужно узнать стоимость одного пункта в валюте депозита.

PointValue=SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE)*SymbolInfoDouble(_Symbol,SYMBOL_POINT)/SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE)

Теперь мы можем рассчитать сколько пунктов должна пройти цена, чтобы компенсировать комиссию и своп. Кроме того, необходимо учесть еще влияние проскальзывания. В ходе совершения торговых операций проскальзывание может сработать как в худшую, так и в лучшую сторону. Но, мы проявим осторожность и будем считать, что проскальзывание всегда будет срабатывать против трейдера.

Пусть, PriceOpen – цена открытия позиции, Lot – ее объем. Тогда минимальный стоп-лосс можно вычислить по формуле:

Верхние знаки используются для позиций Buy, а нижние для Sell.

Минимальный стоп-лосс соответствует уровню гарантированной безубыточности позиции. То есть, если позиция будет закрыта по минимальному стоп-лоссу, то ее полная прибыль (с учетом текущего профита, свопа и комиссии) будет неотрицательной.

Теперь мы можем сформулировать основные правила трейлинг-стопа:

  • новый стоп-лосс должен находиться в промежутке между минимальным и максимальным уровнем;
  • новый стоп-лосс должен быть лучше предыдущего.

При выполнении этих требований стоп-лосс можно модернизировать. Но, перед модернизацией необходимо провести еще одну проверку – старый стоп-лосс должен находиться за пределами уровня заморозки (подробнее об этом можно ознакомиться в статье "Какие проверки должен пройти торговый робот перед публикацией в Маркете").

Для определения нового стоп-лосса можно использовать разные подходы. Я буду использовать уровни, которые описаны в статье "Стоп-лосс и тейк-профит, дружелюбные к трейдеру".

Но, я внесу небольшие изменения для расчета оптимального стоп-лосса. Трейлинг-стоп должен срабатывать на текущем баре, поэтому время удержания позиции будет всегда равно 1 бару. Кроме того, статистика по движению цены будет собираться по произвольно выбранному таймфрейму. Такой подход дает возможность регулировать чувствительность трейлинг-стопа.

Несколько слов о тейк-профите. Здесь, может быть, несколько различных вариантов.

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

Если торговая стратегия не предусматривает установки тейк-профита, или есть возможность применять скользящий тейк-профит, то трейлинг-стоп может следить за уровнями и стоп-лосса, и тейк-профита. В этом случае прибыльность трейдинга может измениться, так как часть позиций могут быть закрыты по более выгодным ценам.

Кроме того, возможен случай, когда трейлинг-стоп используется в потиковом режиме. Тогда установка тейк-профита не имеет никакого смысла – цена никогда не догонит тейк-профит. А единственный возможный вариант закрытия позиции только по стоп-лоссу.

Давайте проверим как работает простой трейлинг-стоп с тейк-профитом и без него. При этом, введем дополнительное условие - установка и модификация тейк-профита становится возможной только после того, как трейлинг-стоп перенесет стоп-лосс в область безубытка.

Я буду использовать символ EURUSD, таймфрейм H1. Период тестирования с 1 января по 31 декабря 2023 г. Таймфрейм трейлинг-стопа M1. Направление и объем позиций определяется случайным образом. Стоп-лосс и тейк-профит позиций не устанавливается.

График изменения баланса выглядит так.


Часть позиций была закрыта по окончанию тестирования принудительно – это недостаток используемой стратегии. Но, график дает представление о том, как может работать трейлинг-стоп. Давайте посмотрим на результаты тестов.

PERIOD_M1 Total Net Profit Gross Profit Gross Loss
UseTakeProfit=false 4 758.48 10 689.84 -5 931.36
UseTakeProfit=true 5 483.94 11 297.68 -5 813.74

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

PERIOD_M15 Total Net Profit Gross Profit Gross Loss
UseTakeProfit=false 16 371.11 33 435.31 -17 064.20
UseTakeProfit=true 17 038.63 34 042.13 -17 003.50

Изменение таймфрейма оказало существенное влияние на результаты тестирования. Это связанно с изменением уровней оптимальных стоп-лосса и тейк-профита. Ну, а мы можем сделать вывод — маленькие таймфреймы трейлинг-стопа подходят для скальпинга, большие — для трендовых стратегий.


Моральное ожидание и трейлинг-стоп

Моральное ожидание — это оценка риска, которую впервые ввел Даниил Бернулли в 1732 году. Моральное ожидание позволяет оценить полезность игры. При этом оно учитывает капитал игрока, возможные выигрыш и проигрыш, а также их вероятности.

Давайте посмотрим на процесс трейдинга немного по-другому. Представьте, что каждая позиция является отдельным игроком. Тогда у позиции есть капитал – общая прибыль позиции. Этот капитал может увеличиться, если позиция закроется по тейк-профиту. Или уменьшиться, если позиция будет закрыта по стоп-лоссу.

Пусть, ProfitPoint – прибыль позиции в пунктах, а p – вероятность того, что позиция будет закрыта по тейк-профиту. Тогда моральное ожидание позиции можно найти так:

Очевидно, что трейдеру необходимо подобрать такие стоп-лосс и тейк-профит при которых моральное ожидание становится максимальным. Давайте рассмотрим особенности сопровождения позиции с помощью морального ожидания.

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

Предположим, что трейлинг-стоп установил оптимальный стоп-лосс, но из-за проскальзывания позиция может закрыться по худшей цене. В этом случае реальный стоп-лосс может оказаться больше профита позиции. А это допускать нельзя. Т.е. на стоп-лосс накладывается ограничение:

При расчете морального ожидания используется значение тейк-профита. Но его использование не является обязательным. В этом вопросе особенности торговой стратегии важнее.

Такие результаты показывает трейлинг-стоп по моральному ожиданию.

PERIOD_M1 Total Net Profit Gross Profit Gross Loss
UseTakeProfit=false 4 482.35 8 175.37 -3 693.02
UseTakeProfit=true 4 747.94 8 434.11 -3 686.17

Результаты оказались немного хуже, чем у простого трейлинг-стопа. Это связанно с тем, что при сопровождении позиций по моральному ожиданию перевод позиции в безубыток происходит раньше, чем при простом трейлинг-стопе. Поэтому, такой трейлинг-стоп лучше всего использовать в скальпинговых стратегиях.

Еще одним серьезным недостатком является большое количество необходимых операций. Расчеты можно оптимизировать. Но даже в этом случае таймфрейм трейлинг-стопа по моральному ожиданию должен быть небольшим.


Трейлинг-стоп для нескольких позиций

До сих пор мы применяли трейлинг-стоп к каждой позиции отдельно. А можно ли применить его к нескольким позициям сразу? Давайте рассмотрим и такую возможность. При этом мы будем предполагать, что позиции могут быть разных типов и с разными объемами одновременно.

В первую очередь нам необходимо определить какой тип позиций имеет преимущество. Для этого найдем сумму объемов позиций Buy и вычтем из нее сумму объемов позиций Sell.

Полученный результат покажет какой тип позиции сильнее. Положительное число указывает на то, что сильнее позиции Buy, отрицательное – сильнее позиции Sell. Если результат равен нулю, то позиции имеют одинаковую силу.

Далее необходимо найти минимально возможные цены закрытия для каждой позиции. Они рассчитываются так же, как и минимальный стоп-лосс, но без учета проскальзывания.

Теперь эти цены закрытия нужно преобразовать в цены Ask/Bid и найти их среднее взвешенное значение. В качестве весов будут выступать объемы позиций.

Эти два значения удобнее привести к одному оптимальному значению Bid, которое в дальнейшем потребуется для сопровождения позиций.

Теперь у нас есть три варианта:

  • Если объемы позиций Buy и Sell равны друг другу, то оптимальное значение Bid будет соответствовать минимальному убытку. Т.е. трейдер может закрыть все позиции, если реальная цена Bid совпадет с оптимальной.
  • Если объемы позиций Buy больше, то нужно увеличить BidOpt на величину проскальзывания. Это будет минимальный стоп-лосс для всех позиций.
  • Если больше объемы позиций Sell, то значение BidOpt нужно уменьшить на величину проскальзывания.

Сопровождение позиций происходит так же, как и с простым трейлинг-стопом. Вычисляются новые уровни стоп-лосса и подтягиваются к цене. Единственное отличие – этот стоп-лосс является виртуальным. Поэтому нам придется отслеживать изменение цены на каждом тике.

Я реализовал сопровождение нескольких позиций по принципу простого трейлинг-стопа. Вот так изменяется график баланса при его применении.


Следует помнить, что сопровождение всех позиций и каждой в отдельности не конфликтуют друг с другом. Например, простой трейлинг-стоп + трейлинг-стоп всех позиций дают такие результаты.


Total Net Profit Gross Profit Gross Loss
PERIOD_M1 4 907.90 10 425.52 -5 517.62
PERIOD_M15 16 524.44 32 304.01 -15 779.57

В целом, трейлинг-стоп является полезным инструментом. Однако трейдеру следует помнить, что его применение не гарантирует безубыточную торговлю. Недостаточно проработанную торговую стратегию он не улучшит.


Заключение

При написании статьи использовалась следующая программа.

Название Тип Особенности
Trailing stop эксперт
  • TFTS - таймфрейм трейлинг-стопа
  • Seed - Начальное число для ряда случайных чисел. Если не 0, то последовательность позиций и их объемов будет повторяться
  • Slippage - проскальзывание
  • TypeTS - выбор типа трейлинг-стопа
  • UseTakeProfit - использовать тейк-профит
  • MultiTS - трейлинг-стоп всех открытых позиций

Прикрепленные файлы |
Trailing_stop.mq5 (32.71 KB)
Теория категорий в MQL5 (Часть 21): Естественные преобразования с помощью LDA Теория категорий в MQL5 (Часть 21): Естественные преобразования с помощью LDA
Эта статья, 21-я в нашей серии, продолжает рассмотрение естественных преобразований и того, как их можно реализовать с помощью линейного дискриминантного анализа. Как и в предыдущей статье, реализация представлена в формате класса сигнала.
Причинно-следственный вывод в задачах классификации временных рядов Причинно-следственный вывод в задачах классификации временных рядов
В этой статье мы рассмотрим теорию причинно-следственного вывода с применением машинного обучения, а также реализацию авторского подхода на языке Python. Причинно-следственный вывод и причинно-следственное мышление берут свои корни в философии и психологии, это важная часть нашего способа мыслить эту реальность.
Разработка MQTT-клиента для MetaTrader 5: методология TDD (Часть 3) Разработка MQTT-клиента для MetaTrader 5: методология TDD (Часть 3)
Статья является третьей частью серии, описывающей этапы разработки нативного MQL5-клиента для протокола MQTT. В этой части мы подробно описываем применение принципа разработки через тестирование для реализации обмена пакетами CONNECT/CONNACK. В конце этого шага наш клиент ДОЛЖЕН уметь вести себя соответствующим образом при работе с любыми возможными результатами сервера при попытке подключения.
Нейросети — это просто (Часть 74): Адаптивное прогнозирование траекторий Нейросети — это просто (Часть 74): Адаптивное прогнозирование траекторий
Предлагаю Вам познакомиться с довольно эффективным методом многоагентного прогнозирования траекторий, который способен адаптироваться к различным состояниям окружающей среды.