Chiến lược này sử dụng Average True Range (ATR) để nắm bắt xu hướng giá và thiết lập điểm dừng dựa trên ATR để theo xu hướng.
Tính toán giá trị ATR.
Xác định mức dừng lỗ dựa trên ATR.
Nhập dài / ngắn khi giá phá vỡ mức dừng.
Chốt trong lợi nhuận bằng cách điều chỉnh dừng lại năng động.
Chiến lược này có hiệu quả nắm bắt xu hướng sử dụng ATR và khóa lợi nhuận với các điểm dừng động. Các thông số điều chỉnh tinh tế có thể cải thiện hiệu suất. Nhưng sự chậm trễ của ATR không thể được loại bỏ hoàn toàn. Nhìn chung một giải pháp sau xu hướng đơn giản và thực tế.
/*backtest start: 2022-09-14 00:00:00 end: 2023-09-20 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ strategy(title="ATR Strategy", overlay = true, commission_type=strategy.commission.percent,commission_value=0.075) //credits to HPotter for the orginal code nATRPeriod = input(5) nATRMultip = input(3.5) xATR = ta.atr(nATRPeriod) nLoss = nATRMultip * xATR xATRTrailingStop = iff(close > nz(xATRTrailingStop[1], 0) and close[1] > nz(xATRTrailingStop[1], 0), math.max(nz(xATRTrailingStop[1]), close - nLoss), iff(close < nz(xATRTrailingStop[1], 0) and close[1] < nz(xATRTrailingStop[1], 0), math.min(nz(xATRTrailingStop[1]), close + nLoss), iff(close > nz(xATRTrailingStop[1], 0), close - nLoss, close + nLoss))) pos = iff(close[1] < nz(xATRTrailingStop[1], 0) and close > nz(xATRTrailingStop[1], 0), 1, iff(close[1] > nz(xATRTrailingStop[1], 0) and close < nz(xATRTrailingStop[1], 0), -1, nz(pos[1], 0))) color = pos == -1 ? color.red: pos == 1 ? color.green : color.blue plot(xATRTrailingStop, color=color, title="ATR Trailing Stop") barbuy = close > xATRTrailingStop barsell = close < xATRTrailingStop strategy.entry("Long", strategy.long, when = barbuy) strategy.entry("Short", strategy.short, when = barsell) barcolor(barbuy? color.green:color.red)