
Chiến lược này là một chiến lược giao dịch định lượng kết hợp sự hồi phục của giá trị trung bình và theo dõi xu hướng, chủ yếu bằng cách sử dụng kết hợp của ba chỉ số kỹ thuật MA, MACD và ATR để thực hiện việc tạo ra tín hiệu giao dịch và kiểm soát rủi ro. Ý tưởng cốt lõi của chiến lược là nắm bắt cơ hội đảo ngược thị trường khi giá lệch khỏi đường trung bình, kết hợp với tín hiệu chéo của chỉ số MACD, đồng thời sử dụng ATR để kiểm soát rủi ro.
Chiến lược này sử dụng hệ thống xác thực ba lần:
Chiến lược này thực hiện một hệ thống giao dịch tương đối ổn định bằng cách kết hợp hồi phục trung bình và theo dõi xu hướng. Cơ chế xác minh nhiều chỉ số làm tăng độ tin cậy của tín hiệu giao dịch, trong khi dừng động ATR kiểm soát rủi ro tốt. Mặc dù có một số không gian tối ưu hóa, nhưng nói chung là một khung chiến lược có logic rõ ràng và thực tế.
/*backtest
start: 2024-10-01 00:00:00
end: 2024-10-31 23:59:59
period: 3h
basePeriod: 3h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Mean Reversion Strategy with ATR, MACD and MA", overlay=true)
// === Настройки для индикаторов ===
// Параметры скользящей средней (MA)
maLength = input.int(30, title="Период скользящей средней (MA)")
maType = input.string("EMA", title="Тип скользящей средней", options=["SMA", "EMA"])
// Параметры ATR
atrLength = input.int(10, title="Период ATR")
atrMultiplier = input.float(10, title="ATR множитель для стоп-лосса")
// Параметры MACD
macdFastLength = input.int(8, title="Период быстрой EMA для MACD")
macdSlowLength = input.int(26, title="Период медленной EMA для MACD")
macdSignalLength = input.int(5, title="Период сигнальной линии MACD")
// === Рассчёт индикаторов ===
// Скользящая средняя
ma = if maType == "SMA"
ta.sma(close, maLength)
else
ta.ema(close, maLength)
// ATR (Средний истинный диапазон)
atr = ta.atr(atrLength)
// MACD
[macdLine, signalLine, _] = ta.macd(close, macdFastLength, macdSlowLength, macdSignalLength)
// Условия для входа на покупку и продажу
longCondition = ta.crossover(macdLine, signalLine) and close < ma
shortCondition = ta.crossunder(macdLine, signalLine) and close > ma
// === Управление позициями ===
if (longCondition)
strategy.entry("Buy", strategy.long)
// Стоп-лосс на основе ATR
stopLossLevel = close - atr * atrMultiplier
strategy.exit("Take Profit/Stop Loss", "Buy", stop=stopLossLevel)
if (shortCondition)
strategy.entry("Sell", strategy.short)
// Стоп-лосс на основе ATR
stopLossLevel = close + atr * atrMultiplier
strategy.exit("Take Profit/Stop Loss", "Sell", stop=stopLossLevel)
// Визуализация
plot(ma, title="MA", color=color.blue, linewidth=2)
plot(macdLine, title="MACD Line", color=color.green)
plot(signalLine, title="Signal Line", color=color.red)
hline(0, "Zero Line", color=color.gray)