Sistem Crossover Purata Bergerak

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

img

Ringkasan

Ini adalah strategi mengikuti trend berdasarkan isyarat crossover purata bergerak. Apabila purata bergerak pantas melintasi di atas purata bergerak perlahan dari bawah, isyarat beli dihasilkan. Apabila purata bergerak pantas melintasi di bawah purata bergerak perlahan dari atas, isyarat jual dihasilkan.

Logika Strategi

Strategi ini menggunakan dua purata bergerak, purata bergerak mudah 20 tempoh dan purata bergerak mudah 30 tempoh. Apabila MA 20 tempoh melintasi di atas MA 30 tempoh, isyarat beli dihasilkan. Apabila MA 20 tempoh melintasi di bawah MA 30 tempoh, isyarat jual dicetuskan.

Purata bergerak sendiri berfungsi sebagai penunjuk trend, menggambarkan arah trend pasaran dengan berkesan. Prinsip silang membolehkan strategi untuk menangkap titik pembalikan trend tepat pada masanya dan menghasilkan isyarat perdagangan. Tempoh 20 hari dan 30 hari ditetapkan dengan sesuai untuk mencerminkan trend pasaran tanpa terlalu sensitif terhadap bunyi bising.

Analisis Kelebihan

Kelebihan utama strategi ini ialah:

  1. Logiknya mudah dan jelas, mudah difahami dan dilaksanakan, sesuai untuk pemula;
  2. Perdagangan mengikut trend mengelakkan kedudukan yang bertentangan dengan trend dan kerugian yang tidak perlu;
  3. Purata bergerak mempunyai kesan penapisan untuk menghilangkan bunyi pasaran dan mengelakkan isyarat palsu;
  4. Tetapan parameter adalah munasabah untuk tidak menyebabkan terlalu banyak kepekaan.

Analisis Risiko

Risiko utama strategi ini termasuk:

  1. Perintah stop loss yang kerap boleh diaktifkan semasa penyatuan pasaran apabila crossover purata bergerak sering berlaku;
  2. Kehilangan beberapa keuntungan kerana sifat pergerakan purata yang tertinggal semasa trend yang kuat;
  3. Tetapan parameter yang tidak sesuai boleh menjejaskan kestabilan.

Penyelesaian:

  1. Sesuaikan tempoh purata bergerak, gunakan purata bergerak segitiga dan lain-lain untuk meluruskan lengkung dan mengurangkan kekerapan persilangan;
  2. Menggunakan penunjuk lain untuk menentukan trend, mengelakkan perdagangan semasa penyatuan;
  3. Mengoptimumkan parameter untuk mencari kombinasi yang terbaik.

Arahan pengoptimuman

Aspek utama untuk mengoptimumkan strategi:

  1. Uji pelbagai jenis purata bergerak, seperti purata bergerak bertingkat, purata bergerak segitiga dan lain-lain;
  2. Menambah penunjuk teknikal lain untuk mengelakkan isyarat semasa penyatuan;
  3. Menggabungkan teknik analisis lain seperti Gelombang Elliott, teori saluran untuk menentukan trend;
  4. Mengguna pakai model pembelajaran mesin untuk mengoptimumkan parameter secara dinamik;
  5. Menggunakan alat kuant dan menggunakan teknik berhenti kerugian / mengambil keuntungan untuk memperbaiki pengurusan wang.

Kesimpulan

Sistem crossover purata bergerak adalah strategi trend yang mudah dan berkesan. Logiknya jelas dan mudah difahami, sangat sesuai untuk pemula belajar. Ia menghasilkan isyarat perdagangan berdasarkan crossover purata bergerak dan keuntungan dari perdagangan di sepanjang trend. Strategi boleh dioptimumkan dengan banyak cara untuk menjadi lebih stabil dan cekap.


/*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 lanjut