Strategi Perpindahan Momentum dengan Stop Loss Trailing Dinamik

Penulis:ChaoZhang, Tarikh: 2024-02-29 13:55:16
Tag:

img

Ringkasan

Strategi ini menggabungkan penunjuk purata bergerak dan penunjuk indeks pergerakan arah (DMI) untuk menjana isyarat beli dan jual berdasarkan silang dua penunjuk.

Logika Strategi

  1. Membina penunjuk purata bergerak menggunakan EMA 9 hari pendek dan EMA 21 hari panjang. Isyarat beli dihasilkan apabila EMA pendek melintasi EMA panjang. Isyarat jual dihasilkan apabila EMA pendek melintasi EMA panjang.
  2. Membina penunjuk DMI menggunakan ADX, +DI dan -DI. Isyarat beli diaktifkan apabila +DI melintasi di atas -DI. Isyarat jual diaktifkan apabila -DI melintasi di atas +DI.
  3. Menggabungkan isyarat EMA dan DMI, yang memerlukan kedua-dua penunjuk untuk memenuhi syarat sebelum mengeluarkan isyarat beli atau jual sebenar.
  4. Menggunakan stop loss yang dinamik untuk mengesan harga tertinggi/harga terendah untuk stop loss.

Analisis Kelebihan

  1. Kombo penunjuk ganda menapis isyarat palsu dan meningkatkan ketepatan isyarat.
  2. Penunjuk momentum boleh menangkap perubahan trend awal dengan beberapa ciri utama.
  3. Stop loss yang dinamik mengunci keuntungan sebanyak mungkin sambil mengawal risiko.

Analisis Risiko

  1. Dengan kombinasi dua penunjuk, frekuensi isyarat dikurangkan, mungkin kehilangan beberapa peluang.
  2. Penyesuaian parameter indikator yang tidak baik boleh membawa kepada perdagangan berlebihan atau isyarat berkualiti rendah.
  3. Set stop loss terlalu luas meningkatkan risiko kerugian manakala set terlalu ketat meningkatkan risiko pemutusan trend.

Arahan pengoptimuman

  1. Uji gabungan EMA dengan panjang jangka pendek dan jangka panjang yang berbeza untuk mencari yang optimum.
  2. Mengoptimumkan parameter ADX untuk meningkatkan kualiti isyarat DMI.
  3. Sesuaikan parameter stop loss untuk mengunci keuntungan sambil menguruskan risiko.
  4. Pertimbangkan untuk menambah lebih banyak penapis untuk meningkatkan kualiti isyarat.

Kesimpulan

Strategi ini menggabungkan kekuatan purata bergerak dan penunjuk momentum untuk pengesahan isyarat berganda, saling melengkapi untuk meningkatkan keuntungan. Sementara itu, penghentian kerugian yang dinamis secara berkesan mengawal risiko. Pengoptimuman parameter dan penyempurnaan strategi yang lebih lanjut dapat meningkatkan keuntungan dan kestabilan.


/*backtest
start: 2023-02-22 00:00:00
end: 2024-02-28 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Combined EMA and DMI Strategy with Enhanced Table", overlay=true)

// Input parameters for EMA
shortTermEMA = input.int(9, title="Short-Term EMA Period")
longTermEMA = input.int(21, title="Long-Term EMA Period")
riskPercentageEMA = input.float(1, title="Risk Percentage EMA", minval=0.1, maxval=5, step=0.1)

// Calculate EMAs
emaShort = ta.ema(close, shortTermEMA)
emaLong = ta.ema(close, longTermEMA)

// EMA Crossover Strategy
longConditionEMA = emaShort > emaLong and emaShort[1] <= emaLong[1]
shortConditionEMA = emaShort < emaLong and emaShort[1] >= emaLong[1]

// Input parameters for DMI
adxlen = input(17, title="ADX Smoothing")
dilen = input(17, title="DI Length")

// DMI Logic
dirmov(len) =>
    up = ta.change(high)
    down = -ta.change(low)
    truerange = ta.tr
    plus = fixnan(100 * ta.rma(up > down and up > 0 ? up : 0, len) / truerange)
    minus = fixnan(100 * ta.rma(down > up and down > 0 ? down : 0, len) / truerange)
    [plus, minus]

adx(dilen, adxlen) => 
    [plus, minus] = dirmov(dilen)
    sum = plus + minus
    adxValue = 100 * ta.rma(math.abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)
    [adxValue, plus, minus]

[adxValue, up, down] = adx(dilen, adxlen)

// DMI Conditions
buyConditionDMI = up > down or (up and adxValue > down)
sellConditionDMI = down > up or (down and adxValue > up)

// Combined Conditions for Entry
longEntryCondition = longConditionEMA and buyConditionDMI
shortEntryCondition = shortConditionEMA and sellConditionDMI

// Combined Conditions for Exit
longExitCondition = shortConditionEMA
shortExitCondition = longConditionEMA

// Enter long trade based on combined conditions
if (longEntryCondition)
    strategy.entry("Long", strategy.long)

// Enter short trade based on combined conditions
if (shortEntryCondition)
    strategy.entry("Short", strategy.short)

// Exit trades
if (longExitCondition)
    strategy.close("Long")

if (shortExitCondition)
    strategy.close("Short")

// Plot EMAs
plot(emaShort, color=color.blue, title="Short-Term EMA")
plot(emaLong, color=color.red, title="Long-Term EMA")

// Create and fill the enhanced table
var tbl = table.new(position.top_right, 4, 1)
if (barstate.islast)
    table.cell(tbl, 0, 0, "ADX: " + str.tostring(adxValue), bgcolor=color.new(color.red, 90), width=15, height=4)
    table.cell(tbl, 1, 0, "+DI: " + str.tostring(up), bgcolor=color.new(color.blue, 90), width=15, height=4)
    table.cell(tbl, 2, 0, "-DI: " + str.tostring(down), bgcolor=color.new(color.orange, 90), width=15, height=4)

   

Lebih lanjut