Strategi Trend Following Stop Loss adalah strategi perdagangan stop loss yang berdasarkan pada penunjuk TrendAlert. Ia menentukan arah trend melalui penunjuk TrendAlert untuk melaksanakan entri penjejakan trend. Pada masa yang sama, ia menggunakan penunjuk ATR untuk menetapkan stop loss untuk mengawal risiko.
Strategi ini terdiri daripada bahagian utama berikut:
Indikator TrendAlert menilai arah trend. Apabila TrendAlert lebih besar daripada 0, ia adalah isyarat kenaikan. Apabila kurang dari 0, ia adalah isyarat penurunan.
Indikator ATR mengira julat turun naik harga baru-baru ini. ATR didarabkan dengan pengganda stop loss ATR atrStopMultiplier digunakan sebagai stop loss tetap.
Parameter struktur mengawal sama ada ia diaktifkan.
Masukkan kedudukan panjang atau pendek mengikut arah isyarat trend.
Tutup kedudukan apabila harga mencetuskan berhenti kerugian atau mengambil keuntungan.
Strategi ini menapis isyarat palsu melalui penilaian trend, mengawal risiko dengan mengesan stop loss, memastikan keuntungan melalui mengambil keuntungan, dan meningkatkan kestabilan sistem perdagangan.
Kelebihan utama strategi ini ialah:
Jaminan berganda penapisan trend dan penjejakan stop loss mengelakkan mengejar bunyi pasaran dan memastikan risiko perdagangan yang terkawal.
Tetapan stop loss adaptif ATR menghalang pengoptimuman berlebihan dan sesuai untuk pelbagai persekitaran pasaran.
Mengambil keuntungan memastikan keuntungan dan menghalang makan keuntungan.
Logik strategi adalah jelas dan ringkas, mudah difahami dan diubah suai, sesuai untuk peniaga kuantitatif
Ditulis dalam bahasa Pine Script, boleh digunakan terus di platform TradingView tanpa kemahiran pengaturcaraan.
Terdapat juga beberapa risiko dalam strategi ini:
Penghakiman trend yang salah boleh menyebabkan masuk yang tidak perlu dan memicu stop loss.
Apabila pasaran turun naik dengan ganas, ATR mungkin meremehkan amplitud sebenar. Pada masa ini, pengganda stop loss ATR atrStopMultiplier boleh ditingkatkan.
Sasaran mengambil keuntungan boleh mengehadkan ruang keuntungan strategi.
Logika yang berasaskan harga sahaja harus digabungkan dengan pengurusan masa.
Strategi ini boleh dioptimumkan dalam aspek berikut:
Mengoptimumkan parameter ATR panjang atrLength dan stop loss pengganda atrStopMultiplier untuk menyesuaikan kepekaan algoritma stop loss.
Cuba indikator trend yang berbeza untuk mencari peluang kemasukan yang lebih baik.
Pilih atau sesuaikan parameter target mengambil keuntungan mengikut ciri-ciri jenis perdagangan tertentu.
Meningkatkan mekanisme berhenti kehilangan masa untuk mengelakkan risiko semalam.
Menapis pecah palsu dengan menggabungkan penunjuk jumlah dagangan untuk meningkatkan kestabilan strategi.
Secara amnya, ini adalah strategi rintangan stop loss yang sangat praktikal. Ia menggunakan penunjuk untuk menentukan arah trend untuk mencapai rintangan trend, sambil menetapkan hentian adaptif untuk memastikan kawalan risiko. Logik strategi jelas dan mudah digunakan, menjadikannya ideal untuk pemula belajar. Pada masa yang sama, ia juga menyediakan kerangka strategi perdagangan yang baik untuk pembangunan strategi lanjutan, yang bernilai peniaga kuantitatif
/*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))