Strategi Crossover Purata Bergerak

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

Ringkasan

Strategi crossover purata bergerak adalah strategi mengikut trend berdasarkan crossover purata bergerak sebagai isyarat perdagangan. Ia menggunakan crossover harga dengan purata bergerak dan crossover antara dua purata bergerak sebagai isyarat beli dan jual untuk mengejar keuntungan.

Prinsip Strategi

Prinsip utama strategi ini ialah:

  1. Mengira dua purata bergerak, satu laju dan satu perlahan, boleh memilih SMA atau EMA.

  2. Pergi panjang apabila garis pantas melintasi di atas garis perlahan, kedudukan dekat apabila garis pantas melintasi di bawah garis perlahan.

  3. Boleh memilih harga pecah atau bergerak purata crossover sebagai isyarat perdagangan.

  4. Boleh menetapkan tempoh masa untuk pelaksanaan strategi.

  5. Hanya boleh pergi panjang di pasaran lembu dan hanya pergi pendek di pasaran beruang.

  6. Mengoptimumkan parameter purata bergerak melalui backtesting untuk tempoh yang berbeza.

Strategi ini menggunakan trend berikut keupayaan purata bergerak. Apabila MA jangka pendek melintasi di atas MA jangka panjang, ia menunjukkan trend menaik, harus pergi lama. sebaliknya, trend menurun, harus mengurangkan kedudukan.

Analisis Kelebihan

Kelebihan utama strategi ini:

  1. Prinsip mudah, mudah dilaksanakan, isyarat perdagangan yang jelas.

  2. Dapat mengesan trend dengan berkesan dan menangkap peluang perdagangan tepat pada masanya.

  3. Boleh menggabungkan parameter MA yang berbeza untuk pelbagai persekitaran pasaran.

  4. Boleh memilih hanya panjang atau hanya pendek untuk mengelakkan operasi terbalik yang tidak pasti.

  5. Boleh menetapkan strategi masa berjalan untuk mengelakkan tempoh tertentu.

  6. Boleh terus meningkatkan strategi melalui pengoptimuman parameter.

Analisis Risiko

Risiko utama strategi ini:

  1. Rendah kepada isyarat palsu, elakkan perdagangan yang terlalu kerap.

  2. Prestasi bergantung pada parameter MA, pemilihan yang tidak betul boleh menyebabkan kerugian.

  3. Terdapat sedikit kelewatan, jangan masuk lebih awal dan keluar lebih lewat.

  4. Tidak sesuai untuk persekitaran pasaran yang terhad.

  5. MA silang mempunyai beberapa rawak, tidak boleh sepenuhnya mengelakkan kerugian.

Risiko boleh dikurangkan melalui pengesahan jumlah, pengoptimuman parameter atau penggunaan dengan penunjuk lain.

Arahan pengoptimuman

Strategi ini boleh dioptimumkan dalam aspek berikut:

  1. Tambah penapis cerun seperti % ((Line - ShortMa) /ShortMa) / ((Line - LongMa) /LongMa).

  2. Mengoptimumkan tempoh purata bergerak, menguji kombinasi yang berbeza.

  3. Tambah penunjuk seperti MACD atau RSI untuk pengesahan berganda.

  4. Tetapkan stop loss untuk mengehadkan kerugian perdagangan tunggal.

  5. Membezakan antara pasaran trend dan jangkauan untuk penggunaan bersyarat.

  6. Uji tempoh tahan yang berbeza untuk mencari skema optimum.

Ringkasan

Strategi crossover purata bergerak adalah strategi trend berikut yang mudah dan praktikal. Kelebihannya adalah pelaksanaan yang mudah dan penjejakan trend yang berkesan. Kelemahannya adalah ketinggalan dan terdedah kepada isyarat palsu. Strategi boleh dipertingkatkan melalui pengoptimuman parameter dan penapisan penunjuk untuk mencapai prestasi yang lebih baik dalam pasaran 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 lanjut