Chiến lược này được thiết kế dựa trên chỉ số Keltner Channel để tạo ra các tín hiệu giao dịch khi giá vượt qua các dải trên và dưới của kênh.
Chiến lược sử dụng SMA và ATR để xây dựng kênh Keltner.
Phạm vi trên = SMA + ATR * Multiplier Phạm vi dưới = SMA - ATR * Multiplier
Khi giá vượt qua dải trên, một tín hiệu mua được tạo ra. Khi giá vượt qua dải dưới, một tín hiệu bán được tạo ra.
Vì nó chỉ đi dài, nếu một tín hiệu bán xuất hiện, nó sẽ hủy các lệnh trước và làm phẳng vị trí.
Lý do là:
Những lợi thế của chiến lược này:
Ngoài ra còn có một số rủi ro:
Giải pháp:
Chiến lược có thể được tối ưu hóa trong các khía cạnh sau:
Chiến lược này có hiệu quả nắm bắt xu hướng thị trường với các quy tắc Keltner Channel đơn giản. Logic là rõ ràng và dễ hiểu. Mặc dù thiếu lối ra và mô-đun ngắn, nó có tiềm năng lớn cho các cải tiến như điều chỉnh tham số, thêm dừng, đi ngắn v.v.
/*backtest start: 2023-11-24 00:00:00 end: 2023-12-24 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 strategy("Keltner Channel Strategy", overlay=true) source = close useTrueRange = input(true) length = input(20, minval=1) mult = input(1.0) ma = sma(source, length) range = useTrueRange ? tr : high - low rangema = sma(range, length) upper = ma + rangema * mult lower = ma - rangema * mult crossUpper = crossover(source, upper) crossLower = crossunder(source, lower) bprice = 0.0 bprice := crossUpper ? high+syminfo.mintick : nz(bprice[1]) sprice = 0.0 sprice := crossLower ? low -syminfo.mintick : nz(sprice[1]) crossBcond = false crossBcond := crossUpper ? true : na(crossBcond[1]) ? false : crossBcond[1] crossScond = false crossScond := crossLower ? true : na(crossScond[1]) ? false : crossScond[1] cancelBcond = crossBcond and (source < ma or high >= bprice ) cancelScond = crossScond and (source > ma or low <= sprice ) if (cancelBcond) strategy.cancel("KltChLE") if (crossUpper) strategy.entry("KltChLE", strategy.long, stop=bprice, comment="KltChLE") if (cancelScond) strategy.cancel("KltChSE") if (crossLower) strategy.entry("KltChSE", strategy.short, stop=sprice, comment="KltChSE") //plot(strategy.equity, title="equity", color=red, linewidth=2, style=areabr)