
Chiến lược phá vỡ đường trung bình là một chiến lược giao dịch định lượng điển hình để theo dõi xu hướng. Chiến lược này sử dụng đường trung bình di chuyển và kênh chênh lệch tiêu chuẩn của nó để đánh giá xu hướng thị trường và tạo ra tín hiệu giao dịch khi giá phá vỡ kênh chênh lệch tiêu chuẩn.
Chiến lược này bắt đầu bằng cách tính toán SMA trung bình di chuyển đơn giản trong N ngày ([50 ngày mặc định]), sau đó tính toán chênh lệch chuẩn StdDev của giá trong chu kỳ đó dựa trên SMA. Với SMA là trục trung tâm, trên và dưới sử dụng gấp 2 lần StdDev để xây dựng đường dẫn chênh lệch chuẩn trên và dưới.
Sau khi vào thị trường, chiến lược sẽ thiết lập lệnh dừng lỗ. Cụ thể, sau khi làm nhiều, đường dừng là giá đóng cửa khi vào thị trường ((100 - phần trăm dừng lỗ); sau khi làm trống, đường dừng là giá đóng cửa khi vào thị trường ((100 + phần trăm dừng).
Chiến lược này có những ưu điểm sau:
Chiến lược này cũng có một số rủi ro:
Các giải pháp đối phó với rủi ro như sau:
Chiến lược này có thể được tối ưu hóa hơn nữa:
Sử dụng đường trung bình của nhiều chu kỳ thời gian để xác minh, tránh đường cong quá nhạy cảm.
Kết hợp với các chỉ số khác như MACD để đánh giá xu hướng và sự khác biệt.
Ghi nhận các tham số tối ưu hóa động của thuật toán học máy.
Phương pháp phá vỡ sự trở lại trung bình là một chiến lược giao dịch định lượng rất thực tế. Nó có lợi thế theo dõi xu hướng, kiểm soát sự rút lui, thực hiện đơn giản, phù hợp với nhu cầu giao dịch định lượng. Ngoài ra, cũng cần chú ý đến một số vấn đề về lựa chọn tham số và cài đặt dừng lỗ, kết hợp với phân tích đa thời gian và tối ưu hóa tham số, có thể đạt được hiệu suất chiến lược tốt hơn.
/*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)