Strategi Berdasarkan Rata-rata Bergerak Eksponensial dan Indikator MACD

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

img

Gambaran umum

Strategi ini menggabungkan sinyal keluar dari rata-rata bergerak eksponensial dan indikator MACD, dengan periode penahan yang panjang dan pendek, untuk mewujudkan keuntungan melalui perdagangan trend berikut dan rata-rata reversi.

Prinsip Strategi

Strategi ini terutama didasarkan pada:

  1. Menghitung EMA 200 hari untuk menentukan arah tren utama. harga penutupan di atas 200-EMA menunjukkan tren naik, sementara di bawah menunjukkan tren turun.

  2. Hitung EMA berdasarkan harga median harga tertinggi, terendah dan harga penutupan, kemudian dapatkan perbedaan antara EMA dan harga tertinggi/terendah untuk membangun histogram MACD.

  3. Hitung MA 9 hari dari histogram MACD untuk membangun garis sinyal MACD.

  4. Sinyal beli dihasilkan ketika MACD melintasi di atas garis sinyal, sementara sinyal jual ketika MACD melintasi di bawah garis sinyal.

  5. Gabungkan analisis tren utama untuk menentukan apakah pasar berada di awal tren baru atau hanya pembalikan jangka pendek.

Keuntungan

Strategi ini menggabungkan perdagangan trend dan reversi rata-rata, yang dapat melacak tren jangka panjang dan menangkap peluang pembalikan jangka pendek untuk mengatasi kondisi pasar yang berbeda.

Keuntungan utama meliputi:

  1. 200 hari EMA menentukan arah tren utama, menghindari perdagangan melawan tren.

  2. Indikator MACD sensitif terhadap perubahan harga jangka pendek dan dapat menangkap sinyal pembalikan yang menguntungkan.

  3. Parameter yang berbeda untuk komponen MACD dapat menghasilkan sinyal perdagangan di seluruh kerangka waktu.

  4. Mengintegrasikan strategi stop loss untuk secara efektif mengendalikan kerugian perdagangan tunggal.

Risiko

Risiko utama termasuk:

  1. Perbedaan waktu antara sinyal perdagangan dari indikator jangka panjang dan jangka pendek.

  2. MACD sebagai indikator reversi rata-rata dapat berkinerja buruk selama tren yang kuat.

  3. Penempatan stop loss yang tidak tepat dapat mengakibatkan pemicu stop loss yang prematur atau kerugian yang terlalu besar.

  4. Sinyal keluar yang terlalu sering dapat memperkenalkan lebih banyak sinyal palsu.

Solusi:

  1. Mengoptimalkan parameter MACD untuk menyesuaikan sensitivitas indikator.

  2. Gabungkan indikator lain untuk menentukan kondisi pasar, hindari mengikuti sinyal MACD secara buta.

  3. Uji dan optimalkan parameter strategi stop loss.

  4. Tambahkan filter untuk mengurangi sinyal palsu.

Arahan Optimasi

Strategi dapat dioptimalkan melalui:

  1. Mengoptimalkan parameter untuk moving average dan MACD untuk mendapatkan sinyal perdagangan yang lebih efektif.

  2. Tambahkan indikator lain seperti volume, RSI untuk meningkatkan efektivitas strategi.

  3. Atur aturan ukuran posisi daripada jumlah tetap untuk setiap perdagangan.

  4. Tambahkan aturan keluar yang lebih maju di atas stop loss, misalnya target keuntungan, trailing stop.

  5. Backtest dengan pengaturan biaya yang lebih realistis untuk mensimulasikan perdagangan nyata.

  6. Melakukan analisis berjalan ke depan, pengujian ketahanan untuk meningkatkan keandalan.

Kesimpulan

Strategi ini menyeimbangkan tren mengikuti dan trading reversi rata-rata. Intinya terletak pada penyesuaian parameter yang tepat dan pemahaman yang benar tentang tren utama. Dengan mengoptimalkan parameter, menambahkan filter strategi dapat membuat penilaian sinyal perdagangan yang lebih baik dan mencapai keuntungan yang lebih stabil. Secara keseluruhan, strategi ini memiliki tingkat 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 banyak