Strategi Stop Loss Berasaskan Penunjuk Isyarat Trend

Penulis:ChaoZhang, Tarikh: 2024-02-05 16:00:35
Tag:

img

Ringkasan

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.

Logika Strategi

Strategi ini terdiri daripada bahagian utama berikut:

  1. Indikator TrendAlert menilai arah trend. Apabila TrendAlert lebih besar daripada 0, ia adalah isyarat kenaikan. Apabila kurang dari 0, ia adalah isyarat penurunan.

  2. Indikator ATR mengira julat turun naik harga baru-baru ini. ATR didarabkan dengan pengganda stop loss ATR atrStopMultiplier digunakan sebagai stop loss tetap.

  3. Parameter struktur mengawal sama ada ia diaktifkan.

  4. Masukkan kedudukan panjang atau pendek mengikut arah isyarat trend.

  5. 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.

Analisis Kelebihan

Kelebihan utama strategi ini ialah:

  1. Jaminan berganda penapisan trend dan penjejakan stop loss mengelakkan mengejar bunyi pasaran dan memastikan risiko perdagangan yang terkawal.

  2. Tetapan stop loss adaptif ATR menghalang pengoptimuman berlebihan dan sesuai untuk pelbagai persekitaran pasaran.

  3. Mengambil keuntungan memastikan keuntungan dan menghalang makan keuntungan.

  4. Logik strategi adalah jelas dan ringkas, mudah difahami dan diubah suai, sesuai untuk peniaga kuantitatif pembangunan sekunder.

  5. Ditulis dalam bahasa Pine Script, boleh digunakan terus di platform TradingView tanpa kemahiran pengaturcaraan.

Analisis Risiko

Terdapat juga beberapa risiko dalam strategi ini:

  1. Penghakiman trend yang salah boleh menyebabkan masuk yang tidak perlu dan memicu stop loss.

  2. Apabila pasaran turun naik dengan ganas, ATR mungkin meremehkan amplitud sebenar. Pada masa ini, pengganda stop loss ATR atrStopMultiplier boleh ditingkatkan.

  3. Sasaran mengambil keuntungan boleh mengehadkan ruang keuntungan strategi.

  4. Logika yang berasaskan harga sahaja harus digabungkan dengan pengurusan masa.

Arahan pengoptimuman

Strategi ini boleh dioptimumkan dalam aspek berikut:

  1. Mengoptimumkan parameter ATR panjang atrLength dan stop loss pengganda atrStopMultiplier untuk menyesuaikan kepekaan algoritma stop loss.

  2. Cuba indikator trend yang berbeza untuk mencari peluang kemasukan yang lebih baik.

  3. Pilih atau sesuaikan parameter target mengambil keuntungan mengikut ciri-ciri jenis perdagangan tertentu.

  4. Meningkatkan mekanisme berhenti kehilangan masa untuk mengelakkan risiko semalam.

  5. Menapis pecah palsu dengan menggabungkan penunjuk jumlah dagangan untuk meningkatkan kestabilan strategi.

Kesimpulan

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 penyelidikan dan pengoptimuman yang mendalam.


/*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))

Lebih lanjut