Strategi berdasarkan purata bergerak eksponen dan penunjuk MACD

Penulis:ChaoZhang, Tarikh: 2023-12-08 16:58:01
Tag:

img

Ringkasan

Strategi ini menggabungkan isyarat pecah dari purata bergerak eksponensial dan penunjuk MACD, dengan tempoh penahan yang panjang dan pendek, untuk merealisasikan keuntungan melalui perdagangan trend berikut dan purata pembalikan.

Prinsip Strategi

Strategi ini terutamanya berdasarkan:

  1. Mengira EMA 200 hari untuk menentukan arah trend utama. Harga penutupan di atas 200-EMA menunjukkan trend menaik, manakala di bawah menunjukkan trend menurun.

  2. Mengira EMA berdasarkan harga median harga tertinggi, terendah dan harga penutupan, kemudian mendapatkan perbezaan antara EMA dan harga tertinggi / terendah untuk membina histogram MACD.

  3. Mengira MA 9 hari histogram MACD untuk membina garis isyarat MACD.

  4. Isyarat beli dihasilkan apabila MACD melintasi di atas garis isyarat, manakala isyarat jual apabila MACD melintasi di bawah garis isyarat.

  5. Gabungkan analisis trend utama untuk menentukan sama ada pasaran adalah pada permulaan trend baru atau hanya pembalikan jangka pendek.

Kelebihan

Strategi ini menggabungkan kedua-dua perdagangan mengikut trend dan perdagangan pembalikan purata, yang kedua-dua boleh mengesan trend jangka panjang dan menangkap peluang pembalikan jangka pendek untuk mengatasi keadaan pasaran yang berbeza.

Kelebihan utama termasuk:

  1. 200 hari EMA menentukan arah trend utama, mengelakkan perdagangan terhadap trend.

  2. Indikator MACD sensitif terhadap perubahan harga jangka pendek dan boleh menangkap isyarat pembalikan yang menguntungkan.

  3. Parameter yang berbeza untuk komponen MACD boleh menjana isyarat dagangan merentasi bingkai masa.

  4. Mengintegrasikan strategi stop loss untuk mengawal kerugian perdagangan tunggal dengan berkesan.

Risiko

Risiko utama termasuk:

  1. Jangka masa antara isyarat dagangan dari penunjuk jangka panjang dan jangka pendek mungkin wujud.

  2. MACD sebagai penunjuk pembalikan purata mungkin berkinerja rendah semasa trend yang kuat.

  3. Penempatan stop loss yang tidak betul boleh menyebabkan pemicu stop loss yang terlalu awal atau kerugian yang terlalu besar.

  4. Isyarat yang terlalu kerap boleh memperkenalkan lebih banyak isyarat palsu.

Penyelesaian:

  1. Mengoptimumkan parameter MACD untuk menyesuaikan kepekaan penunjuk.

  2. Gabungkan penunjuk lain untuk menentukan keadaan pasaran, elakkan mengikuti isyarat MACD secara buta.

  3. Uji dan optimumkan parameter strategi stop loss.

  4. Tambah penapis untuk mengurangkan isyarat palsu.

Arahan pengoptimuman

Strategi ini boleh dioptimumkan melalui:

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

  2. Tambah penunjuk lain seperti jumlah, RSI untuk meningkatkan keberkesanan strategi.

  3. Tetapkan peraturan saiz kedudukan dan bukannya kuantiti tetap untuk setiap perdagangan.

  4. Tambahkan peraturan keluar yang lebih maju di atas stop loss, contohnya sasaran keuntungan, hentian.

  5. Backtest dengan tetapan bayaran yang lebih realistik untuk mensimulasikan perdagangan sebenar.

  6. Melakukan analisis berjalan maju, ujian ketahanan untuk meningkatkan kebolehpercayaan.

Kesimpulan

Strategi ini menyeimbangkan perdagangan trend berikut dan bermaksud pembalikan. Intipati terletak pada penyesuaian parameter yang sesuai dan pemahaman yang betul mengenai trend utama. Dengan mengoptimumkan parameter, menambah penapis, strategi ini dapat membuat penilaian isyarat perdagangan yang lebih baik dan mencapai keuntungan yang lebih stabil. Secara keseluruhan, strategi ini mempunyai tahap integrasi yang tinggi dan prospek aplikasi yang menjanjikan.


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


Lebih lanjut