本策略基于动量通道指标设计交易信号,根据价格突破通道上下轨来产生买入和卖出信号。策略只做多头交易,如果出现卖出信号,则平仓至空仓状态。
本策略使用SMA平均线及ATR真实波动幅度构建动量通道。通道的上轨和下轨分别为:
上轨 = SMA + ATR * 系数 下轨 = SMA - ATR * 系数
当价格上穿上轨时,产生买入信号;当价格下穿下轨时,产生卖出信号。
由于只做多头,所以如果出现卖出信号,则取消之前的开仓订单,平仓至空仓状态。
具体来说,策略逻辑如下:
本策略具有以下优势:
本策略也存在一些风险:
对策:
本策略可以从以下几个方面进行优化:
本策略基于动量通道指标,简单有效地捕捉市场趋势。策略逻辑清晰易懂,通过价格突破通道上下轨来产生交易信号。虽然只做多头和没有退出机制等不足,但可通过参数优化、增加空头模块、加入止损等方式进行改进。总体而言,本策略具有非常大的改进空间,是值得深度研究和应用的量化策略。
/*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)