
Strategi pengembalian rata-rata adalah strategi perdagangan kuantitatif yang mengikuti trend. Strategi ini menggunakan purata bergerak dan saluran standard deviasi untuk menilai pergerakan pasaran dan menghasilkan isyarat perdagangan apabila harga melanggar saluran standard deviasi.
Strategi ini mula-mula mengira purata bergerak sederhana SMA untuk N hari (default 50 hari) dan kemudian mengira perbezaan piawai StdDev berdasarkan SMA untuk harga kitaran tersebut. Dengan SMA sebagai sumbu tengah, masing-masing di atas dan di bawah menggunakan StdDev sebanyak 2 kali ganda sebagai saluran perbezaan piawai untuk membina corong ke atas dan ke bawah.
Selepas memasuki pasaran, strategi akan menetapkan stop loss. Secara khusus, selepas melakukan lebih banyak, garis stop loss adalah harga penutupan semasa masuk ke dalam pasaran ((100 - peratusan stop loss); selepas melakukan shorting, garis stop loss adalah harga penutupan semasa masuk ke dalam pasaran ((100 + peratusan stop loss)).
Strategi ini mempunyai kelebihan berikut:
Strategi ini mempunyai beberapa risiko:
Penyelesaian untuk menghadapi risiko adalah seperti berikut:
Strategi ini masih boleh dioptimumkan lagi:
Menggunakan garis rata-rata untuk beberapa tempoh masa untuk mengesahkan, mengelakkan kurva terlalu sensitif.
Menggabungkan dengan penunjuk lain seperti MACD untuk menilai trend dan perpindahan.
Memperkenalkan parameter pengoptimuman dinamik algoritma pembelajaran mesin.
Strategi pemecahan kemerosotan rata-rata adalah strategi perdagangan kuantitatif yang sangat praktikal secara keseluruhan. Ia mempunyai kelebihan untuk mengesan trend, mengawal pengunduran, mewujudkan keperluan yang mudah dan sesuai untuk perdagangan kuantitatif. Ia juga perlu memperhatikan beberapa pilihan parameter dan masalah tetapan stop loss, yang dikombinasikan dengan analisis multi-aksyen masa dan pengoptimuman parameter, untuk mendapatkan prestasi strategi yang lebih baik.
/*backtest
start: 2023-02-16 00:00:00
end: 2024-02-22 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Standard Deviation Bands with Buy/Sell Signals", overlay=true)
// Input for the number of standard deviations
deviationMultiplier = input.float(2.0, title="Standard Deviation Multiplier")
// Input for the length of the moving average
maLength = input.int(50, title="Moving Average Length")
// Input for the stop loss percentage
stopLossPercentage = input.float(12, title="Stop Loss Percentage")
// Calculate the moving average
sma = ta.sma(close, maLength)
// Calculate the standard deviation of the price
priceDeviation = ta.stdev(close, maLength)
// Calculate the upper and lower bands
upperBand = sma + (priceDeviation * deviationMultiplier)
lowerBand = sma - (priceDeviation * deviationMultiplier)
// Plot the bands
plot(upperBand, color=color.green, title="Upper Band")
plot(lowerBand, color=color.red, title="Lower Band")
// Plot the moving average
plot(sma, color=color.blue, title="SMA", linewidth=2)
// Buy Signal
buyCondition = ta.crossover(close, lowerBand)
sellCondition = ta.crossunder(close, upperBand)
// Calculate stop loss level
stopLossLevelBuy = close * (1 - stopLossPercentage / 100)
stopLossLevelSell = close * (1 + stopLossPercentage / 100)
// Create Buy and Sell Alerts
alertcondition(buyCondition, title="Buy Signal", message="Buy Signal - Price Crossed Below Lower Band")
alertcondition(sellCondition, title="Sell Signal", message="Sell Signal - Price Crossed Above Upper Band")
// Plot Buy and Sell Arrows on the chart
plotshape(buyCondition, style=shape.triangleup, location=location.belowbar, color=color.green, title="Buy Signal Arrow")
plotshape(sellCondition, style=shape.triangledown, location=location.abovebar, color=color.red, title="Sell Signal Arrow")
// Exit Long and Short Positions
var float stopLossBuy = na
var float stopLossSell = na
if ta.crossover(close, sma)
stopLossBuy := stopLossLevelBuy
if ta.crossunder(close, sma)
stopLossSell := stopLossLevelSell
strategy.entry("Buy", strategy.long, when = buyCondition)
strategy.exit("Stop Loss/Take Profit Buy", from_entry = "Buy", stop = stopLossBuy)
strategy.entry("Sell", strategy.short, when = sellCondition)
strategy.exit("Stop Loss/Take Profit Sell", from_entry = "Sell", stop = stopLossSell)