
Chiến lược này là một hệ thống giao dịch định lượng kết hợp đường trung bình động hàm mũ kép (EMA) và bộ dao động ngẫu nhiên. Sử dụng EMA 20 kỳ và 50 kỳ để xác định xu hướng thị trường và sử dụng bộ dao động ngẫu nhiên để tìm cơ hội giao dịch trong vùng quá mua và quá bán, đạt được sự kết hợp hoàn hảo giữa xu hướng và động lượng. Chiến lược này sử dụng các biện pháp quản lý rủi ro chặt chẽ, bao gồm thiết lập mức dừng lỗ và mục tiêu lợi nhuận cố định.
Logic cốt lõi của chiến lược này được chia thành ba phần: phán đoán xu hướng, thời điểm vào lệnh và kiểm soát rủi ro. Đánh giá xu hướng chủ yếu dựa vào vị trí tương đối của EMA nhanh (20 chu kỳ) và EMA chậm (50 chu kỳ). Khi đường nhanh nằm trên đường chậm, nó được đánh giá là xu hướng tăng, nếu không thì nó là xu hướng giảm . Tín hiệu vào lệnh được xác nhận bởi sự giao nhau của bộ dao động ngẫu nhiên, tìm kiếm cơ hội giao dịch có xác suất cao ở vùng quá mua và quá bán. Kiểm soát rủi ro sử dụng mức dừng lỗ cố định và tỷ lệ chốt lời gấp 2 lần để đảm bảo mỗi giao dịch có tỷ lệ rủi ro-lợi nhuận rõ ràng.
Chiến lược này kết hợp các chỉ báo xu hướng và động lượng để tạo nên một hệ thống giao dịch hoàn chỉnh. Ưu điểm cốt lõi của chiến lược này nằm ở khuôn khổ logic rõ ràng và kiểm soát rủi ro chặt chẽ, nhưng trong ứng dụng thực tế, việc tối ưu hóa tham số vẫn cần thiết dựa trên các điều kiện thị trường cụ thể. Thông qua cải tiến và tối ưu hóa liên tục, chiến lược này dự kiến sẽ duy trì hiệu suất ổn định trong nhiều môi trường thị trường khác nhau.
/*backtest
start: 2024-12-06 00:00:00
end: 2025-01-04 08:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=6
strategy("EMA + Stochastic Strategy", overlay=true)
// Inputs for EMA
emaShortLength = input.int(20, title="Short EMA Length")
emaLongLength = input.int(50, title="Long EMA Length")
// Inputs for Stochastic
stochK = input.int(14, title="Stochastic %K Length")
stochD = input.int(3, title="Stochastic %D Smoothing")
stochOverbought = input.int(85, title="Stochastic Overbought Level")
stochOversold = input.int(15, title="Stochastic Oversold Level")
// Inputs for Risk Management
riskRewardRatio = input.float(2.0, title="Risk-Reward Ratio")
stopLossPercent = input.float(1.0, title="Stop Loss (%)")
// EMA Calculation
emaShort = ta.ema(close, emaShortLength)
emaLong = ta.ema(close, emaLongLength)
// Stochastic Calculation
k = ta.stoch(high, low, close, stochK)
d = ta.sma(k, stochD)
// Trend Condition
isUptrend = emaShort > emaLong
isDowntrend = emaShort < emaLong
// Stochastic Signals
stochBuyCrossover = ta.crossover(k, d)
stochBuySignal = k < stochOversold and stochBuyCrossover
stochSellCrossunder = ta.crossunder(k, d)
stochSellSignal = k > stochOverbought and stochSellCrossunder
// Entry Signals
buySignal = isUptrend and stochBuySignal
sellSignal = isDowntrend and stochSellSignal
// Strategy Execution
if buySignal
strategy.entry("Buy", strategy.long)
stopLoss = close * (1 - stopLossPercent / 100)
takeProfit = close * (1 + stopLossPercent * riskRewardRatio / 100)
strategy.exit("Take Profit/Stop Loss", from_entry="Buy", stop=stopLoss, limit=takeProfit)
if sellSignal
strategy.entry("Sell", strategy.short)
stopLoss = close * (1 + stopLossPercent / 100)
takeProfit = close * (1 - stopLossPercent * riskRewardRatio / 100)
strategy.exit("Take Profit/Stop Loss", from_entry="Sell", stop=stopLoss, limit=takeProfit)
// Plotting
plot(emaShort, color=color.blue, title="Short EMA")
plot(emaLong, color=color.red, title="Long EMA")