Strategi momentum crossover dengan stop loss trailing dinamis

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

img

Gambaran umum

Strategi ini menggabungkan indikator rata-rata bergerak dan indikator pergerakan arah (DMI) untuk menghasilkan sinyal beli dan jual berdasarkan crossover indikator ganda.

Logika Strategi

  1. Membangun indikator rata-rata bergerak menggunakan EMA pendek 9 hari dan EMA panjang 21 hari. Sinyal beli dihasilkan ketika EMA pendek melintasi EMA panjang. Sinyal jual dihasilkan ketika EMA pendek melintasi di bawah EMA panjang.
  2. Membangun indikator DMI menggunakan ADX, +DI dan -DI. Sinyal beli dipicu ketika +DI melintasi di atas -DI. Sinyal jual dipicu ketika -DI melintasi di atas +DI.
  3. Menggabungkan sinyal EMA dan DMI, mengharuskan kedua indikator untuk memenuhi kondisi sebelum mengeluarkan sinyal beli atau jual yang sebenarnya.
  4. Gunakan stop loss trailing dinamis untuk melacak harga tertinggi/harga terendah untuk stop loss.

Analisis Keuntungan

  1. Kombinasi indikator ganda menyaring sinyal palsu dan meningkatkan akurasi sinyal. Indikator jangka pendek menangkap perubahan tren sementara indikator jangka panjang menentukan arah keseluruhan.
  2. Indikator momentum dapat menangkap pergeseran tren lebih awal dengan beberapa karakteristik utama.
  3. Stop loss trailing yang dinamis mengunci keuntungan sebanyak mungkin sambil mengendalikan risiko.

Analisis Risiko

  1. Dengan kombinasi indikator ganda, frekuensi sinyal berkurang, mungkin kehilangan beberapa kesempatan.
  2. Penyesuaian parameter indikator yang buruk dapat menyebabkan over-trading atau sinyal berkualitas rendah.
  3. Stop loss yang diatur terlalu luas meningkatkan risiko kerugian sementara pengaturan yang terlalu ketat meningkatkan risiko pemutusan tren.

Arahan Optimasi

  1. Uji kombinasi EMA dengan panjang jangka pendek dan jangka panjang yang berbeda untuk menemukan yang optimal.
  2. Mengoptimalkan parameter ADX untuk meningkatkan kualitas sinyal DMI.
  3. Perbaiki parameter stop loss untuk mengunci keuntungan sambil mengelola risiko.
  4. Pertimbangkan untuk menambahkan lebih banyak filter untuk meningkatkan kualitas sinyal.

Kesimpulan

Strategi ini menggabungkan kekuatan rata-rata bergerak dan indikator momentum untuk konfirmasi sinyal ganda, saling melengkapi untuk meningkatkan profitabilitas. Sementara itu, stop loss trailing dinamis secara efektif mengendalikan risiko. Optimasi parameter lebih lanjut dan penyempurnaan strategi dapat meningkatkan keuntungan dan stabilitas.


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