Sistem Crossover Rata-rata Bergerak

Penulis:ChaoZhang, Tanggal: 2024-01-03 16:22:18
Tag:

img

Gambaran umum

Ini adalah strategi mengikuti tren berdasarkan sinyal crossover rata-rata bergerak. Ketika rata-rata bergerak cepat melintasi di atas rata-rata bergerak lambat dari bawah, sinyal beli dihasilkan. Ketika rata-rata bergerak cepat melintasi di bawah rata-rata bergerak lambat dari atas, sinyal jual dihasilkan.

Logika Strategi

Strategi ini menggunakan dua rata-rata bergerak, rata-rata bergerak sederhana 20 periode dan rata-rata bergerak sederhana 30 periode. Ketika MA 20 periode melintasi di atas MA 30 periode, sinyal beli dihasilkan. Ketika MA 20 periode melintasi di bawah MA 30 periode, sinyal jual dipicu.

Rata-rata bergerak sendiri berfungsi sebagai indikator tren, menggambarkan arah tren pasar secara efektif. Prinsip crossover memungkinkan strategi untuk menangkap titik pembalikan tren tepat waktu dan menghasilkan sinyal perdagangan. Periode 20 hari dan 30 hari ditetapkan dengan tepat untuk mencerminkan tren pasar tanpa terlalu sensitif terhadap kebisingan.

Analisis Keuntungan

Keuntungan utama dari strategi ini adalah:

  1. Logika sederhana dan jelas, mudah dimengerti dan diterapkan, cocok untuk pemula;
  2. Perdagangan di sepanjang tren menghindari posisi yang bertentangan dengan tren dan kerugian yang tidak perlu;
  3. Rata-rata bergerak memiliki efek penyaringan untuk menghilangkan kebisingan pasar dan menghindari sinyal palsu;
  4. Pengaturan parameter wajar untuk tidak menyebabkan terlalu banyak sensitivitas.

Analisis Risiko

Risiko utama dari strategi ini meliputi:

  1. Perintah stop loss yang sering dapat dipicu selama konsolidasi pasar ketika crossover rata-rata bergerak sering terjadi;
  2. Kehilangan beberapa keuntungan karena sifat lambat dari rata-rata bergerak selama tren yang kuat;
  3. Pengaturan parameter yang tidak tepat dapat mempengaruhi stabilitas.

Solusi:

  1. Sesuaikan periode rata-rata bergerak, gunakan rata-rata bergerak segitiga dll untuk meratakan kurva dan mengurangi frekuensi silang;
  2. Gunakan indikator lain untuk menentukan tren, hindari perdagangan selama konsolidasi;
  3. Mengoptimalkan parameter untuk menemukan kombinasi terbaik.

Arahan Optimasi

Aspek utama untuk mengoptimalkan strategi:

  1. Uji berbagai jenis rata-rata bergerak, seperti rata-rata bergerak tertimbang, rata-rata bergerak segitiga dll.
  2. Tambahkan indikator teknis lainnya untuk menghindari sinyal selama konsolidasi;
  3. Menggabungkan teknik analisis lain seperti Elliott Waves, teori saluran untuk menentukan tren;
  4. Mengadopsi model pembelajaran mesin untuk mengoptimalkan parameter secara dinamis;
  5. Menggunakan alat kuantitatif dan menerapkan teknik stop loss / profit taking untuk menyempurnakan manajemen uang.

Kesimpulan

Sistem crossover rata-rata bergerak adalah strategi yang sederhana dan efektif mengikuti tren. Logika jelas dan mudah dipahami, sangat cocok untuk pemula untuk belajar. Ini menghasilkan sinyal perdagangan berdasarkan crossover rata-rata bergerak dan keuntungan dari perdagangan sepanjang tren. Strategi dapat dioptimalkan dengan berbagai cara untuk menjadi lebih stabil dan efisien.


/*backtest
start: 2023-12-03 00:00:00
end: 2024-01-02 00:00:00
period: 1h
basePeriod: 15m
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