Strategi Perdagangan Rata-rata Bergerak Ganda Cepat Perlahan

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

img

Gambaran umum

Strategi perdagangan rata-rata bergerak ganda menghasilkan sinyal perdagangan dengan menghitung rata-rata bergerak cepat dan lambat dan menonton persilangan. Ketika rata-rata bergerak cepat melintasi di atas rata-rata bergerak lambat, posisi panjang diambil. Ketika rata-rata bergerak cepat melintasi di bawah rata-rata bergerak lambat, posisi pendek diambil. Strategi ini dapat digunakan untuk perdagangan tren dan perdagangan kontra-tren.

Logika Strategi

Strategi pertama menetapkan panjang rata-rata bergerak cepat maFastLength dan rata-rata bergerak lambat maSlowLength. Kemudian menghitung rata-rata bergerak cepat fastMA dan rata-rata bergerak lambat slowMA. Rata-rata bergerak cepat bereaksi lebih cepat terhadap perubahan harga dan digunakan untuk menilai tren saat ini, sementara rata-rata bergerak lambat bereaksi lebih lambat dan digunakan untuk menentukan arah tren.

Ketika rata-rata bergerak cepat melintasi di atas rata-rata bergerak lambat, sinyal masuk panjang goLong() dihasilkan.

Strategi dapat diatur untuk hanya panjang, hanya pendek, atau memungkinkan perdagangan panjang dan pendek.

Dalam mode panjang saja, posisi panjang dimasukkan pada sinyal goLong() dan keluar pada sinyal killLong().

Dalam mode hanya pendek, posisi pendek dimasukkan pada sinyal killLong() dan keluar pada sinyal goLong().

Dalam mode swapping, posisi panjang dimasukkan pada goLong(), ditutup dan dibalikkan ke short pada killLong().

Strategi ini juga mencakup stop loss, trailing stop, messaging dan fitur opsional lainnya.

Keuntungan

  1. Sederhana dan mudah diterapkan.

  2. Fleksibilitas untuk pergi panjang, pendek atau keduanya.

  3. Fitur stop loss dan trailing stop opsional.

  4. Pesan yang dapat disesuaikan untuk memperingatkan perdagangan.

  5. Sensitif terhadap perubahan tren di pasar.

  6. Parameter yang dapat disesuaikan menyesuaikan dengan pasar yang berbeda.

Risiko

  1. Dapat menghasilkan perdagangan yang berlebihan di pasar yang bergolak atau berkisar.

  2. Lambat bereaksi terhadap berita yang tiba-tiba.

  3. Pilihan parameter mempengaruhi kinerja strategi.

  4. Harus mengikuti sinyal secara ketat, menghindari perdagangan discretionary.

  5. Biaya perdagangan dapat mengikis keuntungan jika tidak dipertimbangkan.

Peningkatan

  1. Tambahkan filter seperti RSI untuk menghindari sinyal palsu.

  2. Melakukan optimasi parameter untuk menemukan pengaturan terbaik.

  3. Gunakan stop dinamis untuk mengunci keuntungan dan menyesuaikan.

  4. Masukkan pembelajaran mesin untuk membantu prediksi tren.

  5. Mengoptimalkan pesan untuk kebiasaan perdagangan individu.

Kesimpulan

Strategi rata-rata bergerak ganda relatif sederhana dan berguna untuk menangkap tren yang kuat. Namun, harus berhati-hati untuk menghindari whipsaws di lingkungan tren rendah. Parameter penyesuaian halus dan menambahkan indikator tambahan atau peningkatan dapat lebih meningkatkan ketahanan dan kemampuan beradaptasi.


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