
Chiến lược này là một chiến lược theo dõi dừng động dựa trên đường trung bình EMA kép. Nó sử dụng đường 9 ngày, đường 20 ngày để xác định hướng xu hướng thị trường, kết hợp với RSI để lọc các khe hở giả. Đồng thời sử dụng chỉ số ATR để tính toán điểm dừng động và điểm dừng.
Chiến lược này sử dụng EMA 9 ngày làm đường trung bình ngắn hạn và EMA 20 ngày làm đường trung bình trung hạn để xác định xu hướng của giá. Khi giá vượt qua đường trung bình ngắn hạn và giá đóng cửa cao hơn mức cao nhất của ngày trước và RSI cao hơn 30, hãy làm nhiều; Khi giá vượt qua đường trung bình ngắn hạn và giá đóng cửa thấp hơn mức thấp nhất của ngày trước và RSI thấp hơn 70, hãy làm trống.
Đặt mức dừng là giá đóng cửa trừ ATR 1,5 lần, đặt mức dừng là giá đóng cửa cộng với ATR nhân hệ số dừng. Đồng thời sử dụng ATR 2 lần để thiết lập lệnh dừng theo dõi xu hướng.
Chiến lược này nói chung là một chiến lược giữ vị trí trung bình và dài hơn. Nó kết hợp hai EMA để đánh giá xu hướng thị trường chính và tránh ảnh hưởng của tiếng ồn thị trường ngắn hạn. Việc thêm chỉ số RSI cũng lọc các phá vỡ giả một phần. Ngoài ra, cơ chế dừng lỗ động cũng cho phép chiến lược điều chỉnh mức dừng lỗ của mình theo mức độ biến động của thị trường.
/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy("CJTrade", overlay=true)
short = ema(close, 9)
medium = ema(close, 20)
long = ema(close, 50)
very_long = ema(close, 200)
plot(short, color=color.gray, linewidth=1)
plot(medium, color=color.red, linewidth=1)
plot(long, color=color.black, linewidth=1)
plot(very_long, color=color.blue, linewidth=1)
rsiValue = rsi(close, 14)
near20EMA = close > medium - atr(14)
longCond = crossover(close[1], short) and close >= high[1] and rsiValue < 70 and near20EMA
shortCond = crossunder(close[1], short) and close <= low[1] and rsiValue > 30 and near20EMA
strategy.entry("Long", strategy.long, when=longCond)
strategy.entry("Short", strategy.short, when=shortCond)
atrValue = atr(14)
stopLossLevel = close - atrValue * 1.5
// Dynamic take profit level based on ATR
takeProfitMultiplier = input(2, title="Take Profit Multiplier", minval=0.1, maxval=10, step=0.1)
takeProfitLevel = close + atrValue * takeProfitMultiplier
// Trailing stop loss for long positions
longTrailingStop = close - atrValue * 2
strategy.exit("LongTrailingStop", from_entry="Long", loss=longTrailingStop)
// Trailing stop loss for short positions
shortTrailingStop = close + atrValue * 2
strategy.exit("ShortTrailingStop", from_entry="Short", loss=shortTrailingStop)
strategy.exit("Take Profit/Stop Loss", from_entry="Long", loss=stopLossLevel, profit=takeProfitLevel)
strategy.exit("Take Profit/Stop Loss", from_entry="Short", loss=stopLossLevel, profit=takeProfitLevel)