基于卡马和均线的趋势跟踪策略

Author: ChaoZhang, Date: 2024-02-06 09:53:22
Tags:

基于卡马和均线的趋势跟踪策略

概述

本策略的核心思想是结合卡马均线指标和均线指标来识别市场趋势,实现趋势跟踪。当卡马均线和均线发生黄金交叉时,判断为进入上涨趋势,做多;当卡马均线和均线发生死亡交叉时,判断为进入下跌趋势,做空。

策略原理

  1. 计算卡马均线。卡马均线(Kama)是一种对市场噪音较为敏感的趋势跟踪指标,可以用来判断价格趋势。
  2. 计算均线。这里计算了2档均线,一是较快的双重指数移动平均线,另一个是普通的加权移动平均线。
  3. 当快线从下方向上突破慢线时,做多;当快线从上方向下跌破慢线时,做空。这样就完成了趋势判断和跟踪。
  4. 在入场后,当价格突破卡马均线时退出仓位,实现趋势跟踪退出。

策略优势

  1. 该策略结合卡马均线和均线指标,可以对市场趋势作出比较准确判断,实现趋势跟踪,回撤控制能力较强。
  2. 卡马均线对市场噪音比较敏感,可以提前发现趋势转折点。
  3. 均线组合判断清晰,操作规范,容易理解。
  4. 策略参数优化空间大,可以根据不同品种和交易品种进行参数调整优化。

风险分析

  1. 卡马均线和均线组合判断市场趋势时,也会出现误判的可能。需要结合其他指标来验证判断。
  2. 无止损设置,在异常行情下,可能带来较大亏损。
  3. 参数设置不恰当时,也会导致判断失误,需要根据不同品种调整参数。

优化建议

  1. 可以考虑加入ATR指标进行止损设置。
  2. 可以测试不同参数对策略收益率的影响,选择最优参数。
  3. 可以考虑加入其他指标的验证,如震荡指标,提高判断准确率。
  4. 可以建立参数自适应和动态优化的框架,使策略参数可以自动优化。

总结

本策略总体思路清晰,利用卡马均线和均线指标的黄金交叉与死亡交叉来判断和跟踪趋势,回撤控制能力较强,通过参数调整和优化,可以获得较好的效果。但也存在一定的改进空间,如果加入更多验证指标和止损模块,可以进一步增强策略的稳定性和收益能力。


/*backtest
start: 2024-01-29 00:00:00
end: 2024-02-05 00:00:00
period: 45m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
//synapticex.com
kamaPeriod = input(8, minval=1) 
ROCLength=input(4, minval=1) 

kama(length)=>
    volatility = sum(abs(close-close[1]), length)
    change = abs(close-close[length-1])
    er = iff(volatility != 0, change/volatility, 0)
    sc = pow((er*(0.666666-0.064516))+0.064516, 2)
    k = nz(k[1])+(sc*(hl2-nz(k[1])))
    

n=input(title="period",defval=7)

n2ma=2*wma(close,round(n/2))
nma=wma(close,n)
diff=n2ma-nma
sqn=round(sqrt(n))

n2ma1=2*wma(close[1],round(n/2))
nma1=wma(close[1],n)
diff1=n2ma1-nma1
sqn1=round(sqrt(n))

n1=wma(diff,sqn)
n2=wma(diff1,sqn)
c=n1>n2?lime:red
ma=plot(n1,color=c, linewidth = 3)
plot(cross(nma, nma1) ? nma : na, style = cross, color = c, linewidth = 5)
    
kamaEntry = request.security(syminfo.tickerid,timeframe.period,kama(kamaPeriod))

plot(kamaEntry, color=gray, title="Kama",transp=0, trackprice=false, style=line)


strategy("Kama VS HeikinAshi", overlay=true, pyramiding=0, calc_on_every_tick=true, calc_on_order_fills=true)

buyEntry =  n1 > n2
sellEntry = close < kamaEntry and n1 < n2 

buyExit = close < kamaEntry and n1 < n2
sellExit = n1 > n2 
if (buyEntry)
    strategy.entry("KAMAL", strategy.long, comment="KAMAL")
else
    strategy.close("KAMAL", when=buyExit)

if (sellEntry)
    strategy.entry("KAMAS", strategy.short, comment="KAMAS")
else
    strategy.close("KAMAS", when = sellExit)



更多内容