Эта стратегия сочетает в себе следующее за трендом со следствием стоп-лосса и логику прибыли, чтобы непрерывно ездить по тренду для получения прибыли. Она использует скользящую среднюю для определения направления тренда и генерирует торговые сигналы, когда цена пробивается через линии MA. После входа в длинную позицию стратегия устанавливает стоп-лосс на основе значения ATR и корректирует его с логикой последующего стоп-лосса, чтобы следовать за трендом. Когда цена поднимается до определенного уровня, требуется частичная прибыль, чтобы заблокировать некоторые прибыли.
Установите время начала и остановки обратного тестирования на основе ввода пользователя.
Инициализируйте длинную и короткую цены остановки, и отстающие проценты.
Введите длинный, когда цена превышает линию MA.
Вычислить расстояние стоп-лосса с помощью ATR и установить цену стоп-лосса.
По мере того как цена продолжает расти, остановка потерь вверх, чтобы получить больше прибыли.
Когда цена достигнет порога прибыли, возьмите частичную прибыль.
Входите в короткий период, когда цена опускается ниже линии MA.
Вычислить расстояние стоп-лосса с помощью ATR и установить цену стоп-лосса.
По мере того как цена продолжает падать, остановка потерь снижается, чтобы закрепить больше прибыли.
Когда цена достигнет порога прибыли, возьмите частичную прибыль.
Следующая стоп-лосс может следовать тенденциям и получать больше прибыли, защищая прибыль.
Динамическая ATR-стоп-лосс лучше реагирует на колебания рынка, чем фиксированная стоп-лосс.
Частичная прибыль помогает зафиксировать некоторые прибыли и уменьшает риски вывода.
Простая и понятная логика, легко понятная и реализуемая.
Внезапное изменение тренда может привести к большим потерям при большом расстоянии остановки.
Стоп-лосс на основе ATR может быть слишком чувствительным и быть остановлен преждевременно.
Неправильное соотношение частичной прибыли может упустить тенденцию или увеличить убытки.
Многие параметры нуждаются в оптимизации, например, период ATR, процент отставания, коэффициент получения прибыли.
Стратегия зависит только от MA и ATR, могут возникнуть неправильные сигналы.
Добавьте другие индикаторы, такие как MACD, KD, чтобы отфильтровать торговые сигналы и избежать неправильных сигналов MA.
Рассмотрим динамические коэффициенты прибыли, основанные на силе тренда.
Испытывайте различные периоды ATR для оптимальной стабильности или используйте другие индикаторы для остановки потерь.
Внедрить машинное обучение для автоматической оптимизации параметров и их динамической корректировки.
Используйте модели глубокого обучения для обнаружения тенденций и автоматического генерирования сигналов.
Стратегия включает в себя отслеживание стоп-лосса, динамический стоп-лосс ATR и частичную прибыль, чтобы следовать тенденциям и контролировать снижение. Но у нее есть некоторые ограничения, такие как простое обнаружение тренда и сложная оптимизация параметров. Это дает хорошие направления для дальнейшего улучшения стратегии с использованием большего количества методов и индикаторов для повышения стабильности и прибыльности. В целом она предоставляет хорошие ссылки на разработку механизмов стоп-лосса и прибыли для живой торговли.
/*backtest start: 2023-09-29 00:00:00 end: 2023-10-29 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © felipefs //@version=4 strategy("Meu Script", overlay=true) plot(ohlc4) //Funçao de Datas testStartYear = input(2018, "Backtest Start Year") testStartMonth = input(6, "Backtest Start Month") testStartDay = input(1, "Backtest Start Day") testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0) testStopYear = input(2019, "Backtest Stop Year") testStopMonth = input(12, "Backtest Stop Month") testStopDay = input(30, "Backtest Stop Day") testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0) testPeriod() => time >= testPeriodStart and time <= testPeriodStop ? true : false //Funções de Trailing Stop long_stop_price = 0.0 short_stop_price = 0.0 long_trail_perc = 0 short_trail_perc = 0 long_stop_price := if (strategy.position_size > 0) stopValue = close * (1 - long_trail_perc) max(stopValue, long_stop_price[1]) else 0 short_stop_price := if (strategy.position_size < 0) stopValue = close * (1 + short_trail_perc) min(stopValue, short_stop_price[1]) else 999999 //Função de Debug debug(value) => x = bar_index y = close label.new(x, y, tostring(value)) //Take Profit profit = close * (1 + 0.12) strategy.entry("Long", true) strategy.exit("Take Profit 1 Long", from_entry="Long", limit=profit, qty_percent=50.0) //ATR Stop // xATRTrailingStopLong = 0.0 // xATR = atr(nATRPeriod) // nLossLong = nATRMultipLong * xATR // if (strategy.position_size > 0) // xATRTrailingStopLong := max(nz(xATRTrailingStopLong[1]), close - nLossLong)