
Тренд-следящая стоп-стратегия - это стратегия стоп-трейдинга, основанная на трендовом индикаторе TrendAlert. Она определяет направление тренда с помощью индикатора TrendAlert, обеспечивая тренд-следящий вход.
Стратегия состоит из следующих частей:
Показатель TrendAlert определяет направление тренда. Когда TrendAlert больше 0, это знак оптимизма, а когда меньше 0, это знак падения.
Показатель ATR рассчитывает пределы недавних колебаний цены. ATR умножен на ATR StopMultiplier в качестве фиксированной точки остановки.
lowestLow и highestHigh в сочетании с ATR стоп-стоп строят трассировку стоп-стопа. Используется ли контроль с помощью параметров structure.
В зависимости от направления трендового сигнала вступайте в позиции с увеличением или сокращением. После входа установите Take Profit и Stop Loss.
Позиция, которая была ликвидирована после того, как цена вызвала остановку или остановку.
Эта стратегия использует тенденции для фильтрации ложных сигналов, отслеживания рисков сдерживания убытков, обеспечения прибыльности с целью получения прибыли и повышения стабильности торговой системы.
Основные преимущества этой стратегии:
Тренд-фильтрация и отслеживание стоп-лосс являются двойной гарантией, которая позволяет избежать рыночного шума и контролировать торговые риски.
ATR адаптируется для предотвращения избыточной оптимизации и применяется в различных рыночных условиях.
Цель - обеспечить прибыль, а не съесть ее.
Логика стратегии ясна, проста, легко понятна и подходит для вторичной разработки количественными трейдерами.
Письменный язык Pine, который можно использовать непосредственно на платформе TradingView, не требует знаний программирования.
Однако эта стратегия также несет в себе некоторые риски:
Ошибки в оценке тренда могут привести к тому, что будут вызваны ненужные входные и стоп-парозы. Стоп-парозы могут быть соответствующим образом ослаблены или входные сигналы отфильтрованы.
При резкой волатильности ATR может недооценивать истинную величину волны. При этом ATR может увеличить свой стоп-мольтипликаторatrStopMultiplier.
Целевой стоп может ограничить стратегию прибыли. может быть изменен в зависимости от рынка limitMultiplier параметры.
Логика exist-кода основана только на цене, а фактически должна сочетаться с управлением временем.
Эта стратегия может быть оптимизирована в следующих аспектах:
Оптимизация параметров ATR-длиныatrLength и стоп-множителяatrStopMultiplier, корректировка чувствительности стоп-алгоритмов.
Попробуйте различные тенденции, чтобы оценить показатели и найти лучшие возможности для поступления.
Выбор или корректировка параметров целевого сдерживания в зависимости от особенностей конкретной торговой марки.
Увеличение механизмов временного отключения, чтобы избежать риска, связанного с одиночным ночеванием.
Повышение стабильности стратегии в сочетании с фильтрацией ложных прорывов в показателях объема торгов.
Эта стратегия в целом является очень практичной стратегией для отслеживания тренда. Она использует индикаторы для определения направления тренда для отслеживания тренда, в то же время устанавливает адаптивные стопы для обеспечения контроля риска.
/*backtest
start: 2023-01-29 00:00:00
end: 2024-02-04 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © jaque_verdatre
//@version=5
strategy("TrendAlert Based", overlay = true)
// Get inputs
TrendAlert = input.source(close, "TrendAlert")
atrLength = input.int(title="ATR Length", defval=15, minval=1)
useStructure = input.bool(title="Use Structure?", defval=true)
lookback = input.int(title="How Far To Look Back For High/Lows", defval=8, minval=1)
atrStopMultiplier = input.float(title="ATR Multiplier", defval=0.2, minval=0.1)
LimitMultiplier = input.float(title = "Limit Multiplier", defval = 0.5, minval = 0.1)
PineConnectorID = input.int(title = "Pine Connector ID",defval = 0)
CurrencyToSend = input.string(title = "personilized currency", defval = "ETHUSD")
Risk = input.int(title = "risk in % to send", defval = 10, minval = 1)
// Calculate data
atr = ta.atr(atrLength)
lowestLow = ta.lowest(low, lookback)
highestHigh = ta.highest(high, lookback)
longStop = (useStructure ? lowestLow : close) - atr * atrStopMultiplier
shortStop = (useStructure ? highestHigh : close) + atr * atrStopMultiplier
// Draw data to chart
plot(atr, color=color.rgb(33, 149, 243), title="ATR", display = display.none)
plot(longStop, color=color.green, title="Long Trailing Stop")
plot(shortStop, color=color.red, title="Short Trailing Stop")
var float LimitL = na
var float LimitS = na
var float LPosPrice = na
var float SPosPrice = na
var float LPosLongStop = na
var float SPosShortStop = na
KnowLimit (PosPrice, PosStop) =>
(PosPrice-PosStop)*LimitMultiplier+PosPrice
NotInTrade = strategy.position_size == 0
InLongTrade = strategy.position_size > 0
InShortTrade = strategy.position_size < 0
longCondition = TrendAlert > 0 and NotInTrade
if (longCondition)
LPosPrice := close
LPosLongStop := longStop
LimitL := KnowLimit(LPosPrice, LPosLongStop)
strategy.entry("long", strategy.long)
LTPPip = LimitL-LPosPrice
LSLPip = LPosPrice-longStop
alert(str.tostring(PineConnectorID)+',buy,'+str.tostring(CurrencyToSend)+',risk='+str.tostring(Risk)+',sl='+str.tostring(LSLPip)+'tp='+str.tostring(LTPPip), alert.freq_once_per_bar_close)
strategy.exit("exit", "long", stop = longStop, limit = LimitL)
shortCondition = TrendAlert < 0 and NotInTrade
if (shortCondition)
SPosPrice := close
SPosShortStop := shortStop
LimitS := KnowLimit(SPosPrice, SPosShortStop)
strategy.entry("short", strategy.short)
STPPip = SPosPrice-LimitS
SSLPip = shortStop - SPosPrice
alert(str.tostring(PineConnectorID)+',sell,ETHUSD,risk=10,sl='+str.tostring(SSLPip)+'tp='+str.tostring(STPPip), alert.freq_once_per_bar_close)
strategy.exit("exit", "short", stop = shortStop, limit = LimitS)
plotshape(longCondition, color = color.green, style = shape.labelup, location = location.belowbar, size = size.normal, title = "Long Condition")
plotshape(shortCondition, color = color.red, style = shape.labeldown, location = location.abovebar, size = size.normal, title = "Short Condition")
if (InShortTrade)
LimitL := close
LPosLongStop := close
LPosPrice := close
PlotLongTakeProfit = plot(LimitL, color = InLongTrade ? color.rgb(0, 255, 64) : color.rgb(120, 123, 134, 100), title = "Long Take Profit")
PlotLongStopLoss = plot(LPosLongStop, color = InLongTrade ? color.rgb(255, 0, 0) : color.rgb(120, 123, 134, 100), title = "Long Stop Loss")
PlotLongPosPrice = plot(LPosPrice, color = InLongTrade ? color.gray : color.rgb(120, 123, 134, 100), title = "Long Position Price")
if (InLongTrade)
LimitS := close
SPosShortStop := close
SPosPrice := close
PlotShortTakeProfit = plot(LimitS, color = InShortTrade ? color.rgb(0, 255, 64) : color.rgb(120, 123, 134, 100), title = "Short Take Profit")
PlotShortStopLoss = plot(SPosShortStop, color = InShortTrade ? color.rgb(255, 0, 0) : color.rgb(120, 123, 134, 100), title = "Short Stop Loss")
PlotShortPosPrice = plot(SPosPrice, color = InShortTrade ? color.gray : color.rgb(120, 123, 134, 100), title = "Short Position Price")
fill(PlotLongPosPrice, PlotLongTakeProfit, color = InLongTrade ? color.rgb(0, 255, 0, 95) : color.rgb(0, 255, 0, 100))
fill(PlotShortPosPrice, PlotShortTakeProfit, color = InShortTrade ? color.rgb(0, 255, 0, 95) : color.rgb(0, 255, 0, 100))
fill(PlotLongPosPrice, PlotLongStopLoss, color = InLongTrade ? color.rgb(255, 0, 0, 95) : color.rgb(255, 0, 0, 100))
fill(PlotShortPosPrice, PlotShortStopLoss, color = InShortTrade ? color.rgb(255, 0, 0, 95) : color.rgb(255, 0, 0, 100))