
Chiến lược này là một hệ thống giao dịch định lượng kết hợp nguyên tắc quay trở bình quân với các chỉ số kỹ thuật MACD và ATR. Chiến lược này xác định sự lệch giá thông qua các dải Bollinger Bands, sử dụng động lực xác nhận MACD và quản lý rủi ro động lực kết hợp với ATR. Ý tưởng cốt lõi của chiến lược là nắm bắt cơ hội quay trở giá khi có sự lệch giá đáng kể, bằng cách xác minh nhiều chỉ số kỹ thuật.
Chiến lược sử dụng ba phương pháp làm việc phối hợp với các chỉ số kỹ thuật: đầu tiên, đánh giá giá cả có sai lệch đáng kể hay không thông qua đường dây Brin trên và xuống; hai là sử dụng chỉ số MACD để xác minh động thái giá, đảm bảo hướng giao dịch phù hợp với xu hướng thị trường; cuối cùng, giới thiệu chỉ số ATR để thiết lập vị trí dừng lỗ và lợi nhuận động. Cụ thể, hệ thống tạo ra nhiều tín hiệu khi giá vượt qua đường dây Brin xuống và dòng MACD ở trên đường tín hiệu; hệ thống tạo ra tín hiệu trống khi giá vượt qua đường dây Brin trên và dòng MACD ở dưới đường tín hiệu. ATR được sử dụng để điều chỉnh mức dừng lỗ và lợi nhuận theo động thái biến động của thị trường.
Đây là một chiến lược kết hợp phân tích kỹ thuật cổ điển với phương pháp giao dịch định lượng hiện đại. Bằng cách sử dụng nhiều chỉ số song song, nó giữ lại những ưu điểm cốt lõi của chiến lược trung bình và vượt qua những hạn chế của chỉ số đơn. Chiến lược có khả năng mở rộng mạnh mẽ, có thể liên tục nâng cao hiệu suất của nó trong các môi trường thị trường khác nhau thông qua tối ưu hóa tham số và bổ sung các mô-đun chức năng.
/*backtest
start: 2024-11-12 00:00:00
end: 2024-12-11 08:00:00
period: 3h
basePeriod: 3h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Enhanced Mean Reversion with MACD and ATR", overlay=true)
// Nastavenia Bollinger Bands
bbLength = input(20, title="Bollinger Bands Length")
bbMult = input(2, title="Bollinger Bands Multiplier")
basis = ta.sma(close, bbLength)
dev = ta.stdev(close, bbLength)
upperBand = basis + bbMult * dev
lowerBand = basis - bbMult * dev
// MACD indikátor
macdShort = input(12, title="MACD Short Length")
macdLong = input(26, title="MACD Long Length")
macdSignal = input(9, title="MACD Signal Length")
[macdLine, signalLine, _] = ta.macd(close, macdShort, macdLong, macdSignal)
// ATR pre dynamický Stop Loss a Take Profit
atrLength = input(14, title="ATR Length")
atrMultiplier = input(1.5, title="ATR Multiplier")
atrValue = ta.atr(atrLength)
// Vstupné podmienky pre long pozície
longCondition = ta.crossover(close, lowerBand) and macdLine > signalLine
if (longCondition)
strategy.entry("Long", strategy.long)
// Vstupné podmienky pre short pozície
shortCondition = ta.crossunder(close, upperBand) and macdLine < signalLine
if (shortCondition)
strategy.entry("Short", strategy.short)
// Dynamický Stop Loss a Take Profit na základe ATR
longSL = strategy.position_avg_price - atrValue * atrMultiplier
longTP = strategy.position_avg_price + atrValue * atrMultiplier * 2
shortSL = strategy.position_avg_price + atrValue * atrMultiplier
shortTP = strategy.position_avg_price - atrValue * atrMultiplier * 2
// Pridanie stop loss a take profit
if (strategy.position_size > 0)
strategy.exit("Take Profit/Stop Loss", "Long", stop=longSL, limit=longTP)
if (strategy.position_size < 0)
strategy.exit("Take Profit/Stop Loss", "Short", stop=shortSL, limit=shortTP)
// Vizualizácia Bollinger Bands a MACD
plot(upperBand, color=color.red, title="Upper Bollinger Band")
plot(lowerBand, color=color.green, title="Lower Bollinger Band")
plot(basis, color=color.blue, title="Bollinger Basis")
hline(0, "MACD Zero Line", color=color.gray)
plot(macdLine - signalLine, color=color.blue, title="MACD Histogram")
plot(macdLine, color=color.red, title="MACD Line")
plot(signalLine, color=color.green, title="Signal Line")
// Generovanie alertov
alertcondition(longCondition, title="Long Alert", message="Long Entry Signal")
alertcondition(shortCondition, title="Short Alert", message="Short Entry Signal")