Strategi moving average crossover adalah strategi pelacakan tren yang didasarkan pada crossover moving average sebagai sinyal perdagangan. Strategi ini menggunakan crossover harga dan moving average serta dua crossover moving average sebagai sinyal beli dan jual untuk mengejar keuntungan.
Prinsip-prinsip utama dari strategi ini adalah sebagai berikut:
Perhitungan dua rata-rata bergerak, cepat atau lambat, dapat memilih SMA atau EMA.
Ketika Anda melewati garis cepat, lakukan lebih banyak; ketika Anda melewati garis cepat, lakukan lebih banyak; ketika Anda melewati garis lambat, lakukan lebih sedikit.
Anda dapat memilih harga untuk menembus garis rata-rata atau untuk melintasi garis rata-rata sebagai sinyal perdagangan.
Anda dapat mengatur jangka waktu untuk menjalankan strategi tersebut.
Untuk pasar multihead hanya bisa melakukan lebih banyak, pasar kosong hanya bisa kosong.
Optimalkan parameter rata-rata bergerak untuk menyesuaikan dengan periode yang berbeda.
Strategi ini memanfaatkan fitur pelacakan tren dari moving averages, yang menunjukkan bahwa saat ini sedang dalam tren naik di atas rata-rata jangka pendek dan harus melakukan lebih banyak; sebaliknya, saat ini sedang dalam tren turun di bawah rata-rata jangka pendek dan harus mengurangi posisi.
Keuntungan utama dari strategi ini adalah:
Prinsipnya sederhana, mudah diimplementasikan, sinyalnya jelas.
Ini adalah cara yang efektif untuk melacak tren dan menangkap peluang jual beli tepat waktu.
Dapat digabungkan dengan parameter garis rata yang berbeda untuk berbagai lingkungan pasar.
Anda dapat memilih hanya melakukan lebih atau hanya melakukan kosong, menghindari operasi terbalik yang tidak pasti.
Anda dapat mengatur waktu operasi strategi untuk menghindari periode waktu tertentu.
Dengan optimasi parameter, kinerja strategi dapat terus ditingkatkan.
Risiko utama dari strategi ini adalah:
Ini akan menghasilkan sinyal palsu dan harus dihindari jika terlalu sering.
Penampilan bergantung pada pilihan parameter rata-rata, pilihan yang tidak tepat dapat menyebabkan kerugian.
Ada beberapa keterlambatan yang harus dihindari untuk masuk terlalu dini dan keluar terlalu terlambat.
Tidak cocok untuk pasar yang bergejolak.
Persilangan rata-rata memiliki sifat acak dan tidak dapat sepenuhnya menghindari kerugian.
Risiko dapat dikurangi dengan mengkonfirmasi volume transaksi, mengoptimalkan parameter, atau menggunakan kombinasi dengan indikator lainnya.
Strategi ini dapat dioptimalkan dalam beberapa hal:
Tambahkan /% ((Line - ShortMa) /ShortMa) / ((Line - LongMa) /LongMa) / sebagai kondisi filter kemiringan rata-rata.
Optimalkan parameter siklus rata-rata bergerak, uji kombinasi yang berbeda.
Menggabungkan beberapa indikator seperti MACD atau RSI untuk konfirmasi ganda.
Tetapkan kondisi stop loss untuk membatasi kerugian tunggal.
Perbedaan antara pasar tren dan pasar konsolidasi, untuk penggunaan kondisional.
Tes jangka waktu yang berbeda untuk mencari solusi yang optimal.
Strategi crossover bergerak adalah strategi pelacakan tren yang sederhana dan praktis. Kelebihannya adalah mudah diterapkan dan dapat secara efektif melacak tren; Kelemahannya adalah memiliki keterbelakangan dan dapat menghasilkan lebih banyak sinyal palsu. Strategi ini dapat ditingkatkan dengan cara pengoptimalan parameter, penyaringan indikator, dan lain-lain sehingga dapat memperoleh kinerja yang lebih baik di pasar yang jelas tren.
/*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)