Strategi dagangan kuantitatif berdasarkan purata bergerak eksponen dan penunjuk MACD


Tarikh penciptaan: 2023-12-08 16:58:01 Akhirnya diubah suai: 2023-12-08 17:04:03
Salin: 0 Bilangan klik: 706
1
fokus pada
1621
Pengikut

Strategi dagangan kuantitatif berdasarkan purata bergerak eksponen dan penunjuk MACD

Gambaran keseluruhan

Strategi ini menggabungkan isyarat penembusan dari purata bergerak indeks dan MACD, menetapkan dua tempoh pemegangan yang panjang dan menguntungkan melalui trend-following dan perdagangan reversal.

Prinsip Strategi

Strategi ini berdasarkan kepada prinsip-prinsip berikut:

  1. Hitung purata bergerak indeks 200 hari untuk menentukan arah trend utama. Harga penutupan yang lebih tinggi daripada purata itu adalah bullish, dan lebih rendah daripada itu adalah bearish.

  2. Menggambar purata bergerak indeks harga rata-rata berdasarkan harga tertinggi, harga terendah, dan harga penutupan, dan mengira perbezaan antara purata dan harga tertinggi dan terendah, untuk membina carta MACD.

  3. Hitung purata bergerak 9 hari dari carta MACD dan bina garis isyarat MACD.

  4. MACD menghasilkan isyarat beli apabila ia menembusi garisan isyarat dari bawah ke atas; menghasilkan isyarat jual apabila ia menembusi garisan isyarat dari atas ke bawah.

  5. Dengan menggabungkan arah trend besar, anda boleh menentukan sama ada trend memasuki trend yang lebih panjang atau pembalikan garis pendek.

Kelebihan Strategik

Strategi ini menggabungkan trend dan perdagangan reversal, yang dapat mengesan trend dalam jangka masa yang lebih lama dan menangkap peluang reversal pada garis pendek, dengan fleksibiliti untuk menghadapi keadaan pasaran yang berbeza.

Kelebihan khusus termasuk:

  1. Menggunakan purata bergerak 200 hari untuk menentukan arah trend utama, dan mengelakkan operasi berlawanan arah.

  2. Indeks MACD lebih sensitif terhadap perubahan harga jangka pendek dan dapat menangkap peluang pembalikan yang lebih berkesan.

  3. Kombinasi MACD di bawah tetapan parameter yang berbeza, dapat mewujudkan isyarat perdagangan dalam pelbagai bingkai masa.

  4. Di samping itu, anda boleh mengawal kerugian tunggal dengan berkesan dengan menggunakan strategi Hentikan Kerugian.

Risiko Strategik

Strategi ini mempunyai risiko utama:

  1. Indikator jangka pendek mungkin mempunyai selisih masa tertentu apabila ia memberi isyarat perdagangan, yang memerlukan penilaian trend besar secara menyeluruh.

  2. MACD sebagai penunjuk reversal, apabila terdapat keadaan yang teruk, penjelasannya akan berkurang.

  3. Titik hentian yang tidak betul, mungkin hentian terlalu awal atau terlalu besar.

  4. Isyarat penembusan dinilai terlalu kerap dan mungkin menghasilkan lebih banyak isyarat palsu.

Penyelesaian:

  1. Mengoptimumkan parameter MACD, menyesuaikan sensitiviti penunjuk.

  2. Mengelakkan pengesanan buta terhadap isyarat MACD apabila ia digabungkan dengan isyarat-isyarat lain.

  3. Uji dan mengoptimumkan parameter strategi hentikan kerugian.

  4. Menambah syarat penapisan untuk mengelakkan terlalu banyak isyarat palsu.

Arah pengoptimuman strategi

Strategi ini boleh dioptimumkan dengan cara berikut:

  1. Mengoptimumkan parameter purata bergerak dan MACD untuk mendapatkan isyarat dagangan yang lebih berkesan.

  2. Tambah beberapa indikator lain untuk meningkatkan keberkesanan strategi.

  3. Set up a position sizing strategy rather than fixed lots for each trade.

  4. Add more advanced exit rules rather than just stop loss. Such as profit target, trailing stops etc. Tambah peraturan keluar yang lebih maju, bukan hanya berhenti, seperti berhenti, berhenti bergerak dan sebagainya.

  5. Backtest with more complex fee settings to better simulate real trading environoment. Backtest with more complex fee settings to better simulate real trading environoment. Backtest with more complex fee settings to better simulate real trading environoment.

  6. Walk forward analysis, robustness test among multiple products to enhance reliability. Analisis langkah maju, ujian ketahanan antara pelbagai produk untuk meningkatkan kebolehpercayaan.

ringkaskan

Strategi ini menyelaraskan trend dan perdagangan terbalik pada masa yang sama. Kunci utama adalah ketepatan penetapan parameter penunjuk dan pemahaman mengenai trend besar. Dengan cara terus mengoptimumkan penetapan parameter, menambah keadaan gelombang, strategi ini dapat membuat penilaian isyarat pasaran lebih tepat dan keuntungan lebih stabil. Secara keseluruhan, strategi ini mempunyai integrasi yang tinggi dan mempunyai prospek aplikasi yang baik.

Kod sumber strategi
/*backtest
start: 2022-12-01 00:00:00
end: 2023-12-07 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Strategia EMA + Impulse MACD", shorttitle="EMA+IMACD", overlay=true)

// Impostazioni
ema_length = input(200, title="Periodo EMA a 200", type=input.integer)
lengthMA = input(34, title="Periodo EMA", type=input.integer)
lengthSignal = input(9, title="Periodo Signal", type=input.integer)
lengthImpulseMACD = input(12, title="Periodo Impulse MACD", type=input.integer)
lengthImpulseMACDSignal = input(9, title="Periodo Impulse MACD Signal", type=input.integer)
stopLossPeriod = input(20, title="Periodo Stop Loss", type=input.integer)

var float ema200 = na
if bar_index >= ema_length
    ema200 := ema(close, ema_length)

// Impulse MACD
var float hi = na
var float lo = na
var float mi = na
var float impulseMACD = na
var float impulseMACDSignal = na

calc_smma(src, len) =>
    var float smma = na
    if na(smma)
        smma := sma(src, len)
    else
        smma := (smma[1] * (len - 1) + src) / len
    smma

calc_zlema(src, length) =>
    ema1 = ema(src, length)
    ema2 = ema(ema1, length)
    d = ema1 - ema2
    ema1 + d

if bar_index >= lengthMA
    src = hlc3
    hi := calc_smma(high, lengthMA)
    lo := calc_smma(low, lengthMA)
    mi := calc_zlema(src, lengthMA)

    impulseMACD := (mi > hi) ? (mi - hi) : (mi < lo) ? (mi - lo) : 0
    impulseMACDSignal := sma(impulseMACD, lengthSignal)

// Calcolo dello stop loss
var float stopLossLong = na
var float stopLossShort = na

stopLossLong := lowest(low, stopLossPeriod)
stopLossShort := highest(high, stopLossPeriod)

// Calcolo del take profit
var float takeProfitLong = na
var float takeProfitShort = na

if not na(stopLossLong)
    takeProfitLong := close + (close - stopLossLong) * 1.5
if not na(stopLossShort)
    takeProfitShort := close - (stopLossShort - close) * 1.5

// Condizioni per aprire una posizione long
longCondition = not na(ema200) and not na(impulseMACD) and not na(impulseMACDSignal) and close > ema200 and impulseMACD < 0 and impulseMACDSignal < 0 and crossover(impulseMACD, impulseMACDSignal)

// Condizioni per aprire una posizione short
shortCondition = not na(ema200) and not na(impulseMACD) and not na(impulseMACDSignal) and close < ema200 and impulseMACD > 0 and impulseMACDSignal > 0 and crossunder(impulseMACD, impulseMACDSignal)

// Disegna l'EMA 200 sul grafico
plot(ema200, color=color.blue, title="EMA 200")

// Imposta lo stop loss e il take profit
strategy.entry("Long", strategy.long, when=longCondition)
strategy.entry("Short", strategy.short, when=shortCondition)
strategy.exit("Take Profit/Stop Loss Long", from_entry="Long", stop=stopLossLong, limit=takeProfitLong)
strategy.exit("Take Profit/Stop Loss Short", from_entry="Short", stop=stopLossShort, limit=takeProfitShort)

// Impulse MACD
plot(0, color=color.gray, linewidth=1, title="MidLine")
plot(impulseMACD, color=color.red, linewidth=2, title="ImpulseMACD", style=plot.style_histogram)
plot(impulseMACDSignal, color=color.blue, linewidth=2, title="ImpulseMACDSignal", style=plot.style_histogram)

// Disegna le operazioni long e short sul grafico
plotshape(series=longCondition, location=location.belowbar, color=color.green, style=shape.triangleup, title="Long Entry")
plotshape(series=shortCondition, location=location.abovebar, color=color.red, style=shape.triangledown, title="Short Entry")