Strategi stop loss dinamik crossover penunjuk momentum


Tarikh penciptaan: 2024-02-29 13:55:16 Akhirnya diubah suai: 2024-02-29 13:55:16
Salin: 0 Bilangan klik: 671
1
fokus pada
1617
Pengikut

Strategi stop loss dinamik crossover penunjuk momentum

Gambaran keseluruhan

Strategi ini menggabungkan penunjuk purata bergerak dan penunjuk indeks bergerak, mewujudkan isyarat silang kedua-dua penunjuk untuk menghantar isyarat membeli dan menjual. Pada masa yang sama, strategi ini menambah stop loss pengesanan dinamik untuk mengawal risiko.

Prinsip Strategi

  1. Membina penunjuk purata bergerak menggunakan EMA 9 hari jangka pendek dan EMA 21 hari jangka panjang. Ia menghasilkan isyarat beli apabila EMA jangka pendek berada di atas EMA jangka panjang; ia menghasilkan isyarat jual apabila EMA jangka pendek berada di bawah EMA jangka panjang.
  2. Menggunakan ADX, +DI dan -DI untuk membina penunjuk DMI. Apabila +DI di atas memakai -DI sebagai isyarat beli; Apabila -DI di atas memakai +DI sebagai isyarat jual.
  3. Gabungkan isyarat indikator EMA dan isyarat indikator DMI, iaitu kedua-dua indikator memenuhi syarat untuk menghantar isyarat membeli dan menjual sebenar.
  4. Menggunakan Stop Loss Dinamik untuk mengesan harga tertinggi / terendah.

Analisis kelebihan

  1. Penunjuk ganda menggabungkan penapis isyarat palsu, meningkatkan ketepatan isyarat. Penunjuk jangka pendek menangkap perubahan trend; Penunjuk jangka panjang menentukan arah trend besar.
  2. Indeks momentum dapat menangkap trend harga lebih awal dan mempunyai ciri-ciri utama.
  3. Mekanisme Hentikan Kerosakan Dinamis dapat mengunci keuntungan maksimum dan mengawal risiko.

Analisis risiko

  1. Apabila kedua-dua indikator digabungkan, isyarat untuk membeli dan menjual akan berkurangan, dan anda mungkin akan terlepas beberapa peluang.
  2. Tetapan parameter penunjuk yang tidak betul boleh menyebabkan frekuensi perdagangan yang terlalu tinggi atau kualiti isyarat yang buruk.
  3. Tetapan stop loss yang terlalu longgar akan meningkatkan risiko kerugian; tetapan yang terlalu ketat akan meningkatkan risiko keluar dari trend.

Arah pengoptimuman

  1. Uji kombinasi parameter jangka pendek dan panjang EMA yang berbeza untuk mencari parameter yang optimum.
  2. Uji pilihan parameter ADX yang berbeza untuk meningkatkan kualiti isyarat DMI.
  3. Mengoptimumkan parameter stop loss supaya ia dapat mengunci keuntungan maksimum dan mengawal risiko.
  4. Ia boleh dipertimbangkan untuk menambah lebih banyak penunjuk gelombang filter untuk meningkatkan lagi kualiti isyarat.

ringkaskan

Strategi ini mengintegrasikan kelebihan rata-rata bergerak dan penunjuk momentum, mengesahkan isyarat ganda, memanfaatkan saling melengkapi antara penunjuk untuk meningkatkan keuntungan strategi. Pada masa yang sama, mekanisme berhenti kerugian yang mengesan secara dinamik dapat mengawal risiko strategi dengan berkesan. Dengan pengoptimuman parameter dan penyempurnaan peraturan, kemampuan dan kestabilan strategi ini dijangka dapat ditingkatkan.

Kod sumber strategi
/*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)