利用考夫曼自适应均线构建过滤器

hwuaxj
hwuaxj 80后IT男

0 People liked this article · 2792 views

我们知道长周期的均线系统是可靠的,但是它有严重的滞后性;短周期的均线系统虽然能快速反映市场的走势,但是难以抵抗市场“噪音”的干扰。为了避免噪音产生的虚假信号,同时又想消除某些长线趋势中的滞后性,考夫曼提出了一种“自适应”的均线系统——考夫曼自适应移动均线系统(简称AMA)。


考夫曼均线本质上是根据一段时间内的价格波动率进行调整,计算出了合适的入场阈值提供了最佳的买卖点位。也就是说,它分为两部分主逻辑,第二部分逻辑在波动率层面做了又一次自适应。从而反应市场真实的趋势,便于快速抓住趋势性上涨和下跌的时机,同时规避市场来回震荡的影响。


考夫曼均线计算

有经验的交易者都习惯于在趋势展开的行情中使用快速均线,在震荡较多的行情中使用慢速均线。但如何把这个方法数量化,让程序来区分这两种行情?这里就需要引入“效率”的概念。

如果价格一致朝一个方向运行,每天收盘价的变化贡献于总的运行幅度,那么就被称为高效率;如果价格涨涨跌跌,很多次收盘价的变化相互抵消,那么就被称为低效率。这类似于物理学中的位移,如果价格在10天内上涨了100个点,我们可称为高效率,如果价格在10天内上涨了10个点,我们可以称为低效率。


第一步:计算价格效率

价格效率是建立在市场移动的速度和方向以及市场中噪声量的基础之上的,假设价格效率是在0~1之间,0表示市场没有移动,只有噪声;1表示市场只有移动,没有噪声。如果价格在10天内上涨了100个点,每天移动10个点,其价格效率就是:100 / (10 * 10) = 1;如果价格在10天内上涨了10个点,但每天震荡10个点,其价格效率就是:10 / (10 * 10) = 0.1

其计算公式是:首先计算价格变动值,即当根K线价格与前N根K线的价格差的绝对值;然后计算价格波动值,即N根K线内,所有价格变动绝对值的总和;最后计算效率系数,即价格变动值除以价格波动值。

  • 价格变动值 = abs(价格 - n 日前价格)
  • 价格波动值 = sum(abs(价格 - 上一个交易日价格),n)
  • 效率系数 = 价格变动值 / 价格波动值

由此可见,在价格变动值一定条件下,市场波动越大,效率系数越小,此时使用慢速移动平均线更能把握整体趋势走向,因为慢速平均线不易被市场短期波动改变方向;反之,价格变动值一定条件下,市场波动越小,效率系数越大,此时应该使用快速(短期)移动平均线。


第二步:计算平滑系数

考夫曼用一系列的移动平均速度来描述平滑系数,其计算方式与EMA类似,根据价格所占权重,重新定义快速和慢速趋势速度系数,比如可以将2天的平均称为快速,30天的平均称为慢速。其中快速趋势系数是:2 /(2 + 1)= 2 / 3 = 0.66667;慢速趋势系数是:2 /(30 + 1) = 2 / 31 = 0.06452。它们的差值是:0.60215。

  • 快速趋势系数 = 2 / (n1 + 1)
  • 慢速趋势系数 = 2 / (n2 + 1)

上面公式中的n1和n2是交易周期数,并且n1小于n2。默认n1为2,n2为30。最后利用效率比率计算平滑系数,也就是:效率系数 * 0.60215 + 0.06452。

  • 平滑系数 = 效率系数 * (快速 - 慢速) + 慢速

可见,当市场波动越大,趋势明显时,平滑系数更加趋向于选择快速趋势系数快速趋势系数,反之,在市场震荡盘整,趋势不明显时期,平滑系数更趋向于选择慢速趋势系数慢速趋势系数。


第三步:计算AMA值

因为在效率系数太低时,可能会取消交易,所以卡夫曼建议在计算AMA值之前,对最后的平滑系数再次乘方。

  • 系数 = 平滑系数 * 平滑系数
  • AMA = 上一个交易日的AMA + 系数 * (价格 - 上一个交易日的AMA)

假设昨天的AMA值是40,当前的价格是47,它们之间有7个点的差值。那么在一个高效市场,其AMA值提高将近3.1个点,这几乎是差值的一半。在一个低效市场,这个差值几乎不会对AMA值产生影响。

实现代码如下:

策略逻辑

根据考夫曼的观点,AMA相当于平滑指数,如果其方向改变就应该立刻交易。换句话说就是AMA上升时应该买进,AMA下降时应该卖出。不过如果贸然以此做交易信号,可能会造成大量的无效信号,因此就需要增加一个合适的滤网,即增加另一根AMA均线,以双均线交叉的形式发出买卖信号。

  • 多头开仓:AMA1和AMA2均为向上,并且AMA1大于AMA2。
  • 空头开仓:AMA1和AMA2均为向下,并且AMA1小于AMA2。
  • 多头平仓:AMA1和AMA2均为向下,或者AMA1小于AMA2。
  • 空头平仓:AMA1和AMA2均为向上,或者AMA1大于AMA2。

我们就可以设计真正的多周期共振,比如可以同时调取1小时,日线,周线的AMA,当三个周期的斜率共振为多头的时候,我们可以认定为多头趋势。

构建滤波器

接下来,我们就要重点讲述如何通过自适应均线构建盘整滤波器,当然我们平常算取的滤波器都是在当前周期使用,通过跨期,我们就可以用小级别调取大级别的滤波器,这样可以更有效的过滤盘整行情。

逻辑思想

  • 首先我们要调取跨期自适应均线的当前值AMA和前一个值AMA1,取当前值与前一个值的差dv
  • 算取20根K线的dv的标准差,在这个基础上我们乘以一个系数RF,RF的目的主要用于不同品种系数的调整

上面是提到了一个过滤市场的盘整方法,接下来介绍一种出场方法,平常我们用的都是通道止损,或者是百分比跟踪止损,这里我们采用ATR和通道止损结合。

假如当前为多头趋势,我们记录多头的峰值高点,然后算取一个ATR值,建议取大级别的ATR,通过峰值和ATR算取一个吊灯止损ST,然后我们再取一个N(=20)日通道低点值lower;假如当lower小于ST时,我们取ST,否则取lower。代码如下:


我用PTade进行回测,今年上半年药明康德的回测结果:

以下为深南电路的回测结果:


附件为PTrade源代码,可直接使用。

Published on 2024-07-15 10:00

Disclaimers:

This document is written by hwuaxj Original published on 百果量化交流平台 ,The copyright belongs to the author。

Log in,More exciting content waiting for you to find,Contribute wonderful answers,Participate in comment interaction

go Sign in! No accountgoregister

6677
2024-12-05 20:34
老师好!请问如何购买此策略的完整源码?
dew310
2024-07-28 16:54
这个策略在哪儿能看到源码
老陈不老
2024-07-17 10:30
不错的文章!