Strategi ini menghasilkan isyarat perdagangan dengan mengira pelbagai jenis purata bergerak (Simple Moving Average SMA, Exponential Moving Average EMA, Hull Moving Average HMA dan Weighted Moving Average VWMA) dan mengesan titik persimpangan di antara mereka, untuk menentukan trend pasaran dan mengikutinya.
Idea teras strategi ini adalah untuk menilai trend pasaran dengan membandingkan dua purata bergerak. Khususnya, ia membolehkan mengkonfigurasi dua MA dengan jenis dan panjang yang berbeza melalui parameter input. MA pertama mempunyai tempoh yang lebih lama untuk mewakili trend utama, sementara MA kedua mempunyai tempoh yang lebih pendek untuk trend jangka pendek semasa.
Apabila MA jangka pendek melintasi MA jangka panjang dari bawah, ia menandakan bahawa trend jangka pendek semakin kuat dan pasaran memasuki trend menaik. Oleh itu, isyarat beli dihasilkan pada titik silang ini. Sebaliknya, apabila MA jangka pendek melintasi di bawah MA jangka panjang, ia menunjukkan trend jangka pendek melemah dan pasaran berbalik ke bawah. Oleh itu isyarat jual dihasilkan kemudian.
Dengan mengesan persilangan MA tersebut, strategi ini mengikuti trend pasaran untuk perdagangan.
Penyelesaian:
Strategi ini berdasarkan idea klasik menggunakan persilangan MA untuk pengesanan trend utama. Dengan kombinasi MA yang fleksibel, ia mudah dilaksanakan dan sesuai untuk automasi perdagangan algoritma. Secara keseluruhan ia agak praktikal tetapi meninggalkan ruang untuk penambahbaikan seperti penyesuaian parameter, penapis tambahan dan lain-lain untuk meningkatkan prestasi.
/*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)