
Chiến lược này là một chiến lược giao dịch định lượng dựa trên đường trung bình di chuyển và ATR dừng lỗ động. Chiến lược này sử dụng đường trung bình di chuyển đơn giản ((SMA) trong hai chu kỳ khác nhau để tạo ra tín hiệu giao dịch, đồng thời sử dụng độ dao động thực tế trung bình ((ATR) để thiết lập các điểm dừng và dừng lỗ động để kiểm soát rủi ro tốt hơn. Ngoài ra, chiến lược này cũng lọc các tín hiệu giao dịch theo các giai đoạn giao dịch khác nhau để tăng cường sự ổn định của chiến lược.
Nguyên tắc cốt lõi của chiến lược này là sử dụng sự giao thoa của đường trung bình di chuyển để nắm bắt sự thay đổi trong xu hướng giá. Khi đường trung bình di chuyển nhanh từ dưới lên vượt qua đường trung bình di chuyển chậm, tạo ra tín hiệu mua; Khi đường trung bình di chuyển nhanh từ trên xuống vượt qua đường trung bình di chuyển chậm, tạo ra tín hiệu bán. Đồng thời, chiến lược sử dụng ATR để thiết lập các điểm dừng và dừng lỗ động, thiết lập điểm dừng để tăng ATR 3 lần so với giá nhập cảnh, thiết lập điểm dừng để giảm ATR 1.5 lần so với giá nhập cảnh. Ngoài ra, chiến lược này chỉ tạo ra tín hiệu giao dịch trong thời gian giao dịch châu Âu để tránh giao dịch trong thời gian có tính thanh khoản kém.
Chiến lược này là một chiến lược theo dõi xu hướng đơn giản và dễ hiểu, nắm bắt xu hướng giá bằng cách chéo trung bình di chuyển, đồng thời sử dụng ATR để kiểm soát rủi ro. Mặc dù chiến lược này có một số rủi ro, nhưng có thể cải thiện hơn nữa sự ổn định và lợi nhuận của chiến lược bằng cách tối ưu hóa các tham số, lọc tín hiệu, quản lý rủi ro.
/*backtest
start: 2024-04-01 00:00:00
end: 2024-04-30 23:59:59
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Enhanced Moving Average Crossover Strategy", overlay=true)
// Input parameters
fastLength = input(10, title="Fast MA Length")
slowLength = input(50, title="Slow MA Length")
atrLength = input(14, title="ATR Length")
riskPerTrade = input(1, title="Risk Per Trade (%)") / 100
// Time-based conditions
isLondonSession = hour >= 8 and hour <= 15
isAsianSession = hour >= 0 and hour <= 7
isEuropeanSession = hour >= 7 and hour <= 14
// Moving Averages
fastMA = ta.sma(close, fastLength)
slowMA = ta.sma(close, slowLength)
// Average True Range (ATR) for dynamic stop loss and take profit
atr = ta.atr(atrLength)
// Buy and Sell Conditions
buySignal = ta.crossover(fastMA, slowMA)
sellSignal = ta.crossunder(fastMA, slowMA)
// Dynamic stop loss and take profit
stopLoss = close - atr * 1.5
takeProfit = close + atr * 3
// Strategy Logic
if (buySignal and isEuropeanSession)
strategy.entry("Buy", strategy.long)
strategy.exit("Take Profit/Stop Loss", "Buy", limit=takeProfit, stop=stopLoss)
if (sellSignal and isEuropeanSession)
strategy.entry("Sell", strategy.short)
strategy.exit("Take Profit/Stop Loss", "Sell", limit=takeProfit, stop=stopLoss)
// Plotting
plot(fastMA, color=color.blue, title="Fast MA")
plot(slowMA, color=color.red, title="Slow MA")
plotshape(series=buySignal, location=location.belowbar, color=color.green, style=shape.labelup, text="BUY")
plotshape(series=sellSignal, location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL")