
Эта стратегия использует концепцию динамического трейлинг-стопа, чтобы рассчитать долгосрочную и короткую стоп-позиции в зависимости от ATR и ценовых максимумов. В сочетании с идеей Chandelier Exit, в зависимости от того, в какую сторону движется стоп-позиция, чтобы определить долгосрочную и короткую позиции.
Стратегия имеет двойную функцию - одновременно определяет стоп- и входные сигналы.
Стратегия состоит из следующих частей:
ATR рассчитывается в режиме реального времени на основе ATR-циклической длины и кратного множества, установленных пользователем. Затем на основе ATR и ценовых максимумов рассчитывается длинная и короткая стоп-линия:
longStop = 最高价 - ATR
shortStop = 最低价 + ATR
Сравнение стоп-линии предыдущей K-линии и стоп-линии текущей K-линии. Если стоп-линия текущей K-линии будет прорвана, то будет выпущен торговый сигнал:
长仓止损线上方突破,做多
短仓止损线下方突破,做空
Стоп-стап и стоп-ранш рассчитываются из ATR в зависимости от установленного пользователем риска-возвращения по сравнению с риском-вознаграждения (risk-reward ratio). При открытии позиции устанавливаются стоп-лосс и стоп-плей.
Эта стратегия имеет следующие преимущества:
Стратегия использует динамическое отслеживание стоп-линий, чтобы своевременно остановить убытки и контролировать риск падения.
Эта стратегия упрощает логику стратегии, одновременно используя ее в качестве критерия входа.
В зависимости от установленного соотношения между риском и прибылью, следует стремиться к более высоким доходам.
Эта стратегия была разработана с простым дизайном, чтобы ее было легко понять и оптимизировать.
Однако эта стратегия также несет в себе некоторые риски:
Эта стратегия является двусторонней, при которой принимаются риски как лишнего, так и низкого курса.
Настройка параметров ATR напрямую влияет на линию стоп-лосса и частоту торгов. Неправильная настройка может привести к тому, что стоп-лосса станет слишком мягким или частота торгов станет слишком высокой.
Эта стратегия лучше подходит для прорывов после скорректировки средней линии, а не для сценариев с слишком сильной тенденцией.
В отношении этих рисков можно оптимизировать следующее:
В сочетании с трендовыми индикаторами, такими как MA, оценивайте рыночные тенденции и избегайте контрастной торговли.
Оптимизация параметров ATR, а также параметров соотношения риска и прибыли, чтобы сделать остановки и остановки более разумными.
Увеличение количества сделок или фильтрации показателей волатильности для обеспечения качества сделок.
В этой стратегии есть место для дальнейшей оптимизации:
Использование моделей машинного обучения для прогнозирования ценовых тенденций повышает точность входа.
Используйте ценовые колебания опционов, чтобы создать портфель без риска.
Статистический арбитраж между различными рынками, различными видами, чтобы получить стабильную альфу.
Эффективная стратегия обратной связи и реальные сделки с помощью алгоритмической торговой системы.
В этой статье подробно рассматривается стратегия количественного трейдинга, основанная на динамическом отслеживании остановок. Эта стратегия одновременно обладает функциями управления остановками и определения торговых сигналов, что позволяет эффективно контролировать риск. Мы также анализируем преимущества стратегии, возможные риски и последующие идеи оптимизации.
/*backtest
start: 2023-12-29 00:00:00
end: 2024-01-28 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Chandelier Exit with 1-to-1 Risk-Reward", shorttitle='CE', overlay=true)
// Chandelier Exit Logic
length = input.int(title='ATR Period', defval=22)
mult = input.float(title='ATR Multiplier', step=0.1, defval=3.0)
useClose = input.bool(title='Use Close Price for Extremums', defval=true)
atr = mult * ta.atr(length)
longStop = (useClose ? ta.highest(close, length) : ta.highest(length)) - atr
longStopPrev = nz(longStop[1], longStop)
longStop := close[1] > longStopPrev ? math.max(longStop, longStopPrev) : longStop
shortStop = (useClose ? ta.lowest(close, length) : ta.lowest(length)) + atr
shortStopPrev = nz(shortStop[1], shortStop)
shortStop := close[1] < shortStopPrev ? math.min(shortStop, shortStopPrev) : shortStop
var int dir = 1
dir := close > shortStopPrev ? 1 : close < longStopPrev ? -1 : dir
// Risk-Reward Ratio
riskRewardRatio = input.int(1, title="Risk-Reward Ratio", minval=1, maxval=10, step=1)
// Calculate Take Profit and Stop Loss Levels
takeProfitLevel = atr * riskRewardRatio
stopLossLevel = atr
// Entry Conditions
longCondition = dir == 1 and dir[1] == -1
shortCondition = dir == -1 and dir[1] == 1
// Entry Signals
if (longCondition)
strategy.entry("Long", strategy.long, stop=close - stopLossLevel, limit=close + takeProfitLevel)
if (shortCondition)
strategy.entry("Short", strategy.short, stop=close + stopLossLevel, limit=close - takeProfitLevel)
longStopPlot = plot(dir == 1 ? longStop : na, title='Long Stop', style=plot.style_linebr, linewidth=2, color=color.green)
shortStopPlot = plot(dir == 1 ? na : shortStop, title='Short Stop', style=plot.style_linebr, linewidth=2, color=color.red)
midPricePlot = plot(ohlc4, title='', style=plot.style_circles, linewidth=0, display=display.none, editable=false)
fill(midPricePlot, longStopPlot, color=color.new(color.green, 90), title='Long State Filling')
fill(midPricePlot, shortStopPlot, color=color.new(color.red, 90), title='Short State Filling')
// Alerts
if (dir != dir[1])
strategy.entry("Direction Change", strategy.long, comment="Chandelier Exit has changed direction!")
if (longCondition)
strategy.entry("Buy Signal", strategy.long, comment="Chandelier Exit Buy!")
if (shortCondition)
strategy.entry("Sell Signal", strategy.short, comment="Chandelier Exit Sell!")