Strategi ini menghasilkan sinyal perdagangan dengan menghitung berbagai jenis moving average (Simple Moving Average SMA, Exponential Moving Average EMA, Hull Moving Average HMA dan Weighted Moving Average VWMA) dan mendeteksi titik persimpangan di antara mereka, untuk menentukan tren pasar dan mengikutinya.
Ide inti dari strategi ini adalah untuk menilai tren pasar dengan membandingkan dua rata-rata bergerak. Secara khusus, memungkinkan untuk mengkonfigurasi dua MA dengan jenis dan panjang yang berbeda melalui parameter input. MA pertama memiliki periode yang lebih lama untuk mewakili tren utama, sementara MA kedua memiliki periode yang lebih pendek untuk tren jangka pendek saat ini.
Ketika MA jangka pendek melintasi MA jangka panjang dari bawah, itu menandakan bahwa tren jangka pendek menguat dan pasar memasuki tren naik. Dengan demikian sinyal beli dihasilkan pada titik persimpangan ini. Sebaliknya, ketika MA jangka pendek melintasi di bawah MA jangka panjang, itu menunjukkan tren jangka pendek melemah dan pasar berbalik ke bawah. Dengan demikian sinyal jual dihasilkan kemudian.
Dengan mendeteksi persilangan MA tersebut, strategi ini mengikuti tren pasar untuk perdagangan.
Solusi:
Strategi ini didasarkan pada ide klasik menggunakan MA crossover untuk deteksi tren utama. Dengan kombinasi MA yang fleksibel, itu sederhana untuk diimplementasikan dan cocok untuk otomatisasi perdagangan algoritmik. Secara keseluruhan itu cukup praktis tetapi meninggalkan ruang untuk peningkatan seperti penyesuaian parameter, filter tambahan dll untuk meningkatkan kinerja.
/*backtest start: 2023-12-31 00:00:00 end: 2024-01-30 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 //study(title="MA Crossover Strategy", overlay = true) strategy("MA Crossover Strategy", overlay=true) src = input(close, title="Source") price = request.security(syminfo.tickerid, timeframe.period, src) ma1 = input(25, title="1st MA Length") type1 = input("HMA", "1st MA Type", options=["SMA", "EMA", "HMA", "VWMA"]) ma2 = input(7, title="2nd MA Length") type2 = input("HMA", "2nd MA Type", options=["SMA", "EMA", "HMA", "VWMA"]) f_hma(_src, _length)=> _return = wma((2*wma(_src, _length/2))-wma(_src, _length), round(sqrt(_length))) price1 = if (type1 == "SMA") sma(price, ma1) else if (type1 == "EMA") ema(price, ma1) else if (type1 == "VWMA") vwma(price, ma1) else f_hma(price, ma1) price2 = if (type2 == "SMA") sma(price, ma2) else if (type2 == "EMA") ema(price, ma2) else if (type2 == "VWMA") vwma(price, ma2) else f_hma(price, ma2) //plot(series=price, style=line, title="Price", color=black, linewidth=1, transp=0) plot(series=price1, style=line, title="1st MA", color=blue, linewidth=2, transp=0) plot(series=price2, style=line, title="2nd MA", color=green, linewidth=2, transp=0) longCondition = crossover(price1, price2) if (longCondition) strategy.entry("Long", strategy.long) shortCondition = crossunder(price1, price2) if (shortCondition) strategy.entry("Short", strategy.short)