Strategi Crossover Rata-rata Bergerak

Penulis:ChaoZhang, Tanggal: 2023-09-18 17:35:37
Tag:

Gambaran umum

Strategi crossover rata-rata bergerak adalah strategi mengikuti tren berdasarkan crossover rata-rata bergerak sebagai sinyal perdagangan.

Prinsip Strategi

Prinsip utama dari strategi ini adalah:

  1. Hitung dua moving average, satu cepat dan satu lambat, bisa memilih SMA atau EMA.

  2. Pergi panjang ketika garis cepat melintasi di atas garis lambat, posisi dekat ketika garis cepat melintasi di bawah garis lambat.

  3. Dapat memilih price breakout atau moving average crossover sebagai sinyal trading.

  4. Dapat menetapkan periode waktu untuk pelaksanaan strategi.

  5. Hanya bisa pergi panjang di pasar bull dan hanya pergi pendek di pasar bear.

  6. Mengoptimalkan parameter rata-rata bergerak melalui backtesting untuk periode yang berbeda.

Strategi ini memanfaatkan tren mengikuti kemampuan moving average. Ketika MA jangka pendek melintasi di atas MA jangka panjang, itu menunjukkan tren naik, harus pergi panjang. sebaliknya, tren menurun, harus mengurangi posisi.

Analisis Keuntungan

Keuntungan utama dari strategi ini:

  1. Prinsip sederhana, mudah diterapkan, sinyal perdagangan yang jelas.

  2. Dapat melacak tren secara efektif dan menangkap peluang perdagangan tepat waktu.

  3. Dapat menggabungkan parameter MA yang berbeda untuk lingkungan pasar yang berbeda.

  4. Dapat memilih hanya panjang atau hanya pendek untuk menghindari operasi terbalik yang tidak pasti.

  5. Dapat mengatur waktu berjalan strategi untuk menghindari periode tertentu.

  6. Dapat terus meningkatkan strategi melalui optimasi parameter.

Analisis Risiko

Risiko utama dari strategi ini:

  1. Cenderung terhadap sinyal palsu, hindari perdagangan yang terlalu sering.

  2. Kinerja bergantung pada parameter MA, pemilihan yang tidak tepat dapat menyebabkan kerugian.

  3. Ada keterlambatan tertentu, hindari masuk dini dan keluar terlambat.

  4. Tidak cocok untuk lingkungan pasar yang terikat rentang.

  5. MA silang memiliki beberapa acak, tidak bisa sepenuhnya menghindari kerugian.

Risiko dapat dikurangi melalui konfirmasi volume, optimasi parameter atau penggunaan dengan indikator lain.

Arahan Optimasi

Strategi ini dapat dioptimalkan dalam aspek berikut:

  1. Tambahkan filter kemiringan seperti % ((Line - ShortMa) /ShortMa) / ((Line - LongMa) /LongMa).

  2. Mengoptimalkan periode rata-rata bergerak, menguji kombinasi yang berbeda.

  3. Tambahkan indikator seperti MACD atau RSI untuk konfirmasi ganda.

  4. Atur stop loss untuk membatasi kerugian perdagangan tunggal.

  5. Membedakan antara pasar tren dan jangkauan untuk penggunaan bersyarat.

  6. Uji periode penyimpanan yang berbeda untuk menemukan skema yang optimal.

Ringkasan

Strategi crossover rata-rata bergerak adalah strategi yang sederhana dan praktis mengikuti tren. Keuntungannya adalah penerapan yang mudah dan pelacakan tren yang efektif. Kekurangannya adalah tertinggal dan rentan terhadap sinyal palsu. Strategi dapat ditingkatkan melalui optimasi parameter dan penyaringan indikator untuk mencapai kinerja yang lebih baik di pasar tren yang kuat.


/*backtest
start: 2023-09-10 00:00:00
end: 2023-09-17 00:00:00
period: 10m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © gliese581d

//@version=4
strategy(title="Moving Averages Testing", overlay=true, precision=2, calc_on_every_tick=false, max_bars_back=5000, pyramiding=2,  
 default_qty_type=strategy.percent_of_equity, default_qty_value=50, commission_type=strategy.commission.percent, initial_capital=10000)


//SETTINGS

longs_on = input(title="Long Trades enabled", defval=true)
shorts_on = input(title="Short Trades enabled", defval=true)

long_cond = input(title="Buy/Long Crossover Condition", defval="price x MA1", options=["price x MA1", "price x MA2", "MA1 x MA2"])
short_cond = input(title="Sell/Short Crossunder Condition", defval="price x MA2", options=["price x MA1", "price x MA2", "MA1 x MA2"])

ma1_type = input(title="Moving Average 1 Type", defval="SMA", options=["SMA", "EMA"])
ma1_len = input(defval=20, title="Moving Average 1 Len", type=input.integer, minval=1, maxval=1000, step=1)
ma2_type = input(title="Moving Average 2 Type", defval="SMA", options=["SMA", "EMA"])
ma2_len = input(defval=30, title="Moving Average 2 Len", type=input.integer, minval=1, maxval=1000, step=1)


//MOVING AVERAGES

ma_1 = ma1_type == "EMA" ? ema(close, ma1_len) : sma(close, ma1_len)
ma_2 = ma2_type == "EMA" ? ema(close, ma2_len) : sma(close, ma2_len)


//STRATEGY

//trade entries
long_entry = long_cond == "price x MA1" ? crossover(close, ma_1) : long_cond == "price x MA2" ? crossover(close, ma_2) : long_cond == "MA1 x MA2" ? crossover(ma_1, ma_2) : false
short_entry = short_cond == "price x MA1" ? crossunder(close, ma_1) : short_cond == "price x MA2" ? crossunder(close, ma_2) : short_cond == "MA1 x MA2" ? crossunder(ma_1, ma_2) : false

start_month = input(defval=4, title="Strategy Start Month", type=input.integer, minval=1, maxval=12, step=1)
start_year = input(defval=2018, title="Strategy Start Year", type=input.integer, minval=2000, maxval=2025, step=1)
end_month = input(defval=12, title="Strategy End Month", type=input.integer, minval=1, maxval=12, step=1)
end_year = input(defval=2020, title="Strategy End Year", type=input.integer, minval=2000, maxval=2025, step=1)

in_time = true

strategy.entry("Long", strategy.long, when=longs_on and in_time and long_entry)
strategy.close("Long", when=longs_on and not shorts_on and short_entry)

strategy.entry("Short", strategy.short, when=shorts_on and in_time and short_entry)
strategy.close("Short", when=shorts_on and not longs_on and long_entry)


//PLOTTING

//color background
last_entry_was_long = nz(barssince(long_entry)[1], 5000) < nz(barssince(short_entry)[1], 5000)
bgcol = (longs_on and last_entry_was_long) ? color.green : (shorts_on and not last_entry_was_long) ? color.red : na
bgcolor(color=bgcol, transp=90)

plot((long_cond == "price x MA1" or long_cond == "MA1 x MA2") or (short_cond == "price x MA1" or short_cond == "MA1 x MA2") ? ma_1 : na, color=color.blue)
plot((long_cond == "price x MA2" or long_cond == "MA1 x MA2") or (short_cond == "price x MA2" or short_cond == "MA1 x MA2") ? ma_2 : na, color=color.black)
plotshape(long_entry, style=shape.triangleup, location=location.belowbar, color=color.green)
plotshape(short_entry, style=shape.triangledown, location=location.abovebar, color=color.red)

Lebih banyak