Đây là một chiến lược dừng lại theo dõi năng động dựa trên đường EMA kép. Nó sử dụng EMA 9 ngày và 20 ngày để xác định hướng xu hướng thị trường, kết hợp với chỉ số RSI để lọc các đứt gãy sai. Nó cũng sử dụng chỉ số ATR để tính toán mức dừng lỗ năng động và lấy lợi nhuận. Chiến lược này phù hợp với cổ phần trung hạn đến dài hạn.
Chiến lược này sử dụng EMA 9 ngày như đường ngắn hạn và EMA 20 ngày như đường trung hạn để xác định xu hướng giá. Nó đi dài khi giá vượt qua đường ngắn hạn và giá đóng cửa cao hơn mức cao của ngày trước, với chỉ số RSI thấp hơn 70 và đóng cửa cao hơn EMA 20 ngày trừ 1 ATR. Nó đi ngắn khi giá vượt qua đường ngắn hạn và giá đóng cửa thấp hơn mức thấp của ngày trước, với chỉ số RSI cao hơn 30 và đóng cửa cao hơn EMA 20 ngày trừ 1 ATR.
Stop loss được thiết lập ở giá đóng trừ 1,5 lần ATR. Lợi nhuận được thiết lập ở giá đóng cộng với ATR nhân với hệ số lợi nhuận. Nó cũng sử dụng 2 lần ATR để thiết lập stop loss theo xu hướng.
Nói chung, đây là một chiến lược nắm giữ tương đối ổn định trong thời gian trung và dài. Nó sử dụng EMA kép để xác định xu hướng thị trường chính, tránh bị ảnh hưởng bởi tiếng ồn ngắn hạn. Việc thêm RSI cũng lọc các đứt gãy sai ở một mức độ nào đó. Hơn nữa, cơ chế dừng lỗ / lấy lợi nhuận năng động cho phép chiến lược điều chỉnh dựa trên sự biến động của thị trường. Tuy nhiên, vẫn có những rủi ro như tụt hậu của đường trung bình động và tiềm năng thâm nhập lỗ dừng. Chúng ta cần tìm ra cấu hình tối ưu thông qua điều chỉnh tham số và tối ưu hóa trong quá trình áp dụng thực tế.
/*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)