Strategi Perdagangan Purata Bergerak Berganda Cepat Perlahan

Penulis:ChaoZhang, Tarikh: 2023-10-27 16:41:24
Tag:

img

Ringkasan

Strategi perdagangan purata bergerak berganda menjana isyarat perdagangan dengan mengira purata bergerak pantas dan perlahan dan menonton salib. Apabila purata bergerak pantas melintasi di atas purata bergerak perlahan, kedudukan panjang diambil. Apabila purata bergerak pantas melintasi di bawah purata bergerak perlahan, kedudukan pendek diambil. Strategi ini boleh digunakan untuk perdagangan trend dan perdagangan kontra-trend.

Logika Strategi

Strategi ini mula-mula menetapkan panjang purata bergerak pantas maFastLength dan purata bergerak perlahan maSlowLength. Ia kemudian mengira purata bergerak pantas fastMA dan purata bergerak perlahan slowMA. Purata bergerak pantas bertindak balas dengan lebih cepat terhadap perubahan harga dan digunakan untuk menilai trend semasa, sementara purata bergerak perlahan bertindak balas lebih perlahan dan digunakan untuk menentukan arah trend.

Apabila purata bergerak pantas melintasi di atas purata bergerak perlahan, isyarat masuk panjang goLong() dihasilkan. Apabila purata bergerak pantas melintasi di bawah purata bergerak perlahan, kedudukan panjang yang sedia ada ditutup dengan isyarat killLong().

Strategi boleh ditetapkan untuk hanya panjang, pendek sahaja, atau membenarkan kedua-dua perdagangan panjang dan pendek.

Dalam mod panjang sahaja, kedudukan panjang dimasukkan pada isyarat goLong() dan keluar pada isyarat killLong().

Dalam mod pendek sahaja, kedudukan pendek dimasukkan pada isyarat killLong() dan keluar pada isyarat goLong().

Dalam mod pertukaran, kedudukan panjang dimasukkan pada goLong ((), ditutup dan terbalik menjadi pendek pada killLong (().

Strategi ini juga merangkumi stop loss, trailing stop, mesej dan ciri pilihan lain.

Kelebihan

  1. Sederhana dan mudah dilaksanakan.

  2. Fleksibiliti untuk pergi panjang, pendek atau kedua-duanya.

  3. Fitur stop loss dan trailing stop pilihan.

  4. Mesej yang boleh disesuaikan untuk memberi amaran perdagangan.

  5. Sensitif terhadap perubahan trend di pasaran.

  6. Parameter yang boleh diselaraskan menyesuaikan diri dengan pasaran yang berbeza.

Risiko

  1. Boleh menghasilkan perdagangan yang berlebihan di pasaran yang bergelora atau berkisar.

  2. Perlahan bertindak balas terhadap berita tiba-tiba.

  3. Pilihan parameter memberi kesan kepada prestasi strategi.

  4. Harus mengikuti isyarat dengan ketat, mengelakkan perdagangan pertimbangan.

  5. Kos perdagangan boleh mengikis keuntungan jika tidak dipertimbangkan.

Peningkatan

  1. Tambah penapis seperti RSI untuk mengelakkan isyarat palsu.

  2. Melaksanakan pengoptimuman parameter untuk mencari tetapan terbaik.

  3. Gunakan hentian dinamik untuk mengunci keuntungan dan menyesuaikan.

  4. Menggabungkan pembelajaran mesin untuk membantu ramalan trend.

  5. Mengoptimumkan mesej untuk tabiat perdagangan individu.

Kesimpulan

Strategi purata bergerak berganda adalah agak mudah dan berguna untuk menangkap trend yang kuat. Walau bagaimanapun, berhati-hatilah untuk mengelakkan whipsaws dalam persekitaran trend rendah. Parameter penyesuaian halus dan menambah penunjuk atau penambahbaikan tambahan dapat meningkatkan ketahanan dan kesesuaian.


/*backtest
start: 2022-10-20 00:00:00
end: 2023-10-26 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4

strategy("SMA Strategy", shorttitle="SMA Strategy", overlay=true, pyramiding=0, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

// === Inputs ===
// short ma
maFastSource = input(defval=close, title="Fast MA Source")
maFastLength = input(defval=3, title="Fast MA Period", minval=1)

// long ma
maSlowSource = input(defval=close, title="Slow MA Source")
maSlowLength = input(defval=9, title="Slow MA Period", minval=1)

// Trade direction
shorting = input(defval=false, title="Short only?")
longonly = input(defval=true, title="Long only?")
swapping = input(defval=false, title="Swap orders?")
// risk management
useStop = input(defval=false, title="Use Initial Stop Loss?")
slPoints = input(defval=25, title="Initial Stop Loss Points", minval=1)
useTS = input(defval=false, title="Use Trailing Stop?")
tslPoints = input(defval=120, title="Trail Points", minval=1)
useTSO = input(defval=false, title="Use Offset For Trailing Stop?")
tslOffset = input(defval=20, title="Trail Offset Points", minval=1)

// Messages for buy and sell
message_long_entry  = input("Long entry message", title="Long entry message")
message_long_exit   = input("Long exit message", title="Long exit message")
message_short_entry = input("Short entry message", title="Short entry message")
message_short_exit  = input("Short exit message", title="Short exit message")

// Calculate start/end date and time condition
startDate  = input(timestamp("2021-01-01T00:00:00"), type = input.time)
finishDate = input(timestamp("2021-12-31T00:00:00"), type = input.time)
 
time_cond  = true
// === Vars and Series ===
fastMA = sma(maFastSource, maFastLength)
slowMA = sma(maSlowSource, maSlowLength)

plot(fastMA, color=color.blue)
plot(slowMA, color=color.purple)

goLong() =>
    crossover(fastMA, slowMA)
killLong() =>
    crossunder(fastMA, slowMA)
    
// Long only
if longonly
    strategy.entry("Buy", strategy.long, when=goLong() and time_cond, alert_message = message_long_entry)
    strategy.close("Buy", when=killLong() and time_cond, alert_message = message_long_exit)

// Short only
if shorting
    strategy.entry("Sell", strategy.short, when=killLong() and time_cond, alert_message = message_short_entry)
    strategy.close("Sell", when=goLong() and time_cond, alert_message = message_short_exit)
    
// Order Swapping
if swapping
    strategy.entry("Buy", strategy.long, when=goLong() and time_cond, alert_message = message_long_entry)
    strategy.entry("Sell", strategy.short, when=killLong() and time_cond, alert_message = message_short_entry)

if useStop
    strategy.exit("XLS", from_entry="Buy", stop=strategy.position_avg_price / 1.08, alert_message = message_long_exit)
    strategy.exit("XSS", from_entry="Sell", stop=strategy.position_avg_price * 1.08, alert_message = message_short_exit)



Lebih lanjut