
Chiến lược này là một hệ thống giao dịch theo dõi xu hướng kết hợp các cơ chế dừng lỗ dựa trên chỉ số trung bình di chuyển ((EMA) và độ dao động thực tế ((ATR)). Chiến lược sử dụng EMA 9 chu kỳ và 21 chu kỳ để xác định xu hướng thị trường, đồng thời sử dụng ATR để điều chỉnh các vị trí dừng lỗ động, thực hiện sự kết hợp hữu cơ của theo dõi xu hướng và kiểm soát rủi ro.
Lịch lý cốt lõi của chiến lược bao gồm hai phần chính: phán đoán xu hướng và kiểm soát rủi ro. Về phán đoán xu hướng, xác định xu hướng thị trường bằng cách giám sát giao thoa giữa EMA nhanh (thời kỳ 9) và EMA chậm (thời kỳ 21). Khi vượt qua đường chậm trên đường nhanh, kích hoạt nhiều tín hiệu; khi vượt qua đường chậm dưới đường nhanh, kích hoạt tín hiệu trống. Về mặt kiểm soát rủi ro, chiến lược sử dụng chỉ số ATR để tính toán vị trí dừng lỗ động.
Chiến lược này được xây dựng bởi một hệ thống giao dịch theo dõi xu hướng hoàn chỉnh bằng cách kết hợp xu hướng phán đoán chéo đường thẳng và ATR động. Ưu điểm của chiến lược là đánh giá tiêu chuẩn khách quan, kiểm soát rủi ro linh hoạt, nhưng cũng cần chú ý đối phó với rủi ro thị trường xung đột và các vấn đề về chậm trễ tín hiệu.
/*backtest
start: 2024-02-20 00:00:00
end: 2024-05-31 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Binance","currency":"TRB_USDT"}]
*/
//@version=5
strategy("EMA 9/21 + ATR SL Strategy", shorttitle="EMA+ATR", overlay=true)
// ===== Input Parameters ===== //
emaFastLen = input.int(9, "Fast EMA")
emaSlowLen = input.int(21, "Slow EMA")
atrLen = input.int(14, "ATR Length")
atrMult = input.float(1.5, "ATR Multiplier")
// ===== EMA Calculation ===== //
emaFast = ta.ema(close, emaFastLen)
emaSlow = ta.ema(close, emaSlowLen)
// ===== ATR Calculation ===== //
atrValue = ta.atr(atrLen)
// ===== Conditions for Entry ===== //
longCondition = ta.crossover(emaFast, emaSlow) // Long when 9 EMA crosses above 21 EMA
shortCondition = ta.crossunder(emaFast, emaSlow) // Short when 9 EMA crosses below 21 EMA
// ===== Entry Commands ===== //
if longCondition
strategy.entry("Long", strategy.long)
if shortCondition
strategy.entry("Short", strategy.short)
// ===== Set Stop-Loss Using ATR ===== //
//
// For LONG: stop-loss = entry price - (atrMult * ATR)
// For SHORT: stop-loss = entry price + (atrMult * ATR)
//
// Note: You can adjust the atrMult values based on market volatility
//
if strategy.position_size > 0
// If holding LONG, define stop-loss below the entry price
strategy.exit("Exit Long", "Long", stop = strategy.position_avg_price - atrMult * atrValue)
if strategy.position_size < 0
// If holding SHORT, define stop-loss above the entry price
strategy.exit("Exit Short", "Short", stop = strategy.position_avg_price + atrMult * atrValue)