猫头鹰散热器哪一款好:关于Perry J.Kaufman的自适应移动平均系统

来源:百度文库 编辑:偶看新闻 时间:2024/07/06 19:03:30

[转载]关于Perry J.Kaufman的自适应移动平均系统(AMA)ZT

(2011-10-17 10:27:37) 转载标签:

转载

分类: 编程相关 原文地址:J.Kaufman的自适应移动平均系统(AMA)ZT" href="http://blog.sina.com.cn/s/blog_55fe8db60100h2j8.html" target="_blank">关于Perry J.Kaufman的自适应移动平均系统(AMA)ZT作者:fractal

长期来说,价格会显示一种回归其本来价值的特性,在二维图形上显示一种收敛或者说回归均值的图形。 这似乎也反映了政府金融或利息政策改变所带来的影响。

一个超出市场平均波动周期的趋势则可能是一个好的趋势,一个波动周期如有特别变化的关键变量,则趋势有可能发生改变,在股市上通常表现为量能和价格区间的变化。

以下为Perry J.Kaufman的自适应移动平均系统,资料来源于其著作《Smarter Trading》。

关于移动平均

由一个时间周期的价格平均值构成,并以单位时间的价格周期不断计算,加入新的一个单位时间的价格时去掉第一个单位时间的价格,并计算平均值。一个过去几天的平均值,减少了人为的由消息引起的过激反应的影响。平均较长的数据周期,给出了较平滑的趋势,其结果经常是长期市场方向的一个很好的代表,也反映了市场运行状况和人们对于利率和政策的预期。

趋势系统

趋势计算把价格移动归纳为一个净方向,并假设价格将会继续沿着这个方向运动。趋势跟踪系统则是对趋势作出反应,而不是对它们进行预期。

噪音

一个持续横盘的期的波动水平,可以很方便的用来测量内在噪音。如果一个趋势是由一个不大于市场内在噪音水平移动所引起的,那么这个趋势就是不可靠的。

自适应

当市场沿着一个方向快速移动时,快得移动平均值是最好的。

当市场在横盘的市场中立拉锯时,慢的移动平均值是最好的。

三种价格波动性测量

a. 简单地计算价格的净变化,从开始点到结束点。这倾向于最保守的测量,因为它平滑了从开始到结尾之间发生的任何价格移动。

b. 高-低范围更好地描述了在周期内可能产生的任意极端值。

c. 所有变化总和,它是最概括的测量,因为能识别一个价格移动从高到低的次数。

自适应移动平均值

步骤1:价格方向

价格方向被表示为整个时间段中的净价格变化。比如,使用n天的间隔(或n小时):

步骤2:波动性

波动性是市场噪音的总数量,计算了时间段内价格变化的总和

volatility= @ sum( @ abs(price-price[1]),n)

步骤3:效率系数(ER)

方向移动对噪音之比,成为效率系数ER

Efficiency_Ratio = direction/volatility

步骤4:变换上述系数为趋势速度

为了应用于一个指数式移动平均值,比率将被变换为一个平滑系数c,依靠使用下面的公式,每天的均线速度可以简单地用改变平滑系数来改变,成为自适应性的。公式:

@exp_ma=@exp_ma[1]+c*(price- @ exp_ma[1])

公式表明,EMA以一个百分比c来接近于今日的收盘价。系数c与一个标准移动平均值中天数密切相关,这关系是2/(n-1),其中n是天数。

在横盘的市场中这个过程选择了非常慢的趋势,而在高度趋势化的周期中加速至非常快的趋势(但不是100%)。这个平滑系数是:

fastest =2/(N+1) =2/(2+1) =0.6667

slowest =2/(N+1) =2/(30+1) =0.0645

smooth =ER*(fastest-slowest)+slowest

c=smooth*smooth

平方平滑迫使c的数值趋向于0,这意味着较慢的移动平均值将比快速的移动平均值用得更多。这和在出现不确定状况时你就更加保守是一样的道理。

AMA = AMA[1] + c * (price - AMA[1])

根据卡夫曼自适应移动平均写的交易系统

根据卡夫曼自适应移动平均思想写的简单的交易系统,但是测试下来,比普通两根均线交叉的交易系统的效果还差了一点。
请TB老师帮忙看看,非常感谢!
//------------------------------------------------------------------------
// 简称: AdaptiveMovAvg
// 名称: 自适应移动平均
// 类别: 交易指令
// 类型: 其他
// 输出:
//------------------------------------------------------------------------
Params
        Numeric        FilterSet(0.1);//过滤器偏移量
        Numeric        lots(1);
        Numeric        terms(10);//自适应计算周期
        Numeric        AMAOffSetPercent(0.55);//前后两日均线差值触发值百分比
Vars
        NumericSeries        AMAValue;
        Numeric        ExtHigh;//前高
        Numeric        ExtLow;//前低
        Numeric        filter;
        Numeric        AMAOffSet;
        Bool        LongEntryCon(false);
        Bool        ShortEntryCon(false);
Begin
        AMAValue = AdaptiveMovAvg(close,terms,2,30);
        if(close == AMAValue)
                return;       //如果bar个数小于计算周期,直接返回
        AMAOffSet=AvgPrice()*AMAOffSetPercent/100;       //取当前均价的0.0055作为均线触发值
        filter = StandardDev(AMAValue,20,2)*FilterSet;        //计算过滤器的值
        if(AMAValue>AMAValue[1]and AMAValue[1]                ExtLow = AMAValue[1];        //计算前低
        if(AMAValueAMAValue[2])
                ExtHigh = AMAValue[1];       //计算前高
       

        if(AMAValue>AMAValue[1])   //如果今天的均线值大于昨天
        {
                if(ExtLow!=0)    //如果前低不为零
                {
                               if((AMAValue - ExtLow)>filter)     //将均线值减去最低值,看是否大于过滤器
                                LongEntryCon = true;
                }Else
                {
                        if((AMAValue-AMAValue[1])>AMAOffSet )   //如果前低为零,即没有产生前低,则直接比较两日的均线值是否大于触发值
                                        LongEntryCon = true;
                }
        }
               
        if(AMAValue        {
                if(ExtHigh!=0)
                {
                        if((AMAValue - ExtHigh)>filter)
                                ShortEntryCon = true;
                }Else
                {
                        f((AMAValue[1]-AMAValue)>AMAOffSet )
                                ShortEntryCon = true;
                }
        }
        Commentary("AMA:"+TEXT(AMAValue));
        Commentary("filter:"+TEXT(filter));
        Commentary("ExtLow:"+TEXT(ExtLow));
        Commentary("ExtHigh:"+TEXT(ExtHigh));
        Commentary("LongCon:"+IIFString(LongEntryCon,"true","false"));
        Commentary("ShortCon:"+IIFString(ShortEntryCon,"true","false"));
        Commentary("AMAOffSet:"+text(AMAOffSet));

        if(MarketPosition !=1 and LongEntryCon)
                buy(lots,NextOpen);
        if(MarketPosition !=-1 and ShortEntryCon)
                SellShort(lots,NextOpen);
end


//------------------------------------------------------------------------
// 编译版本        GS2004.06.12
// 用户版本        2008/12/06 15:39
// 版权所有        cf_38607
// 更改声明        TradeBlazer Software保留对TradeBlazer平台
//                        每一版本的TrabeBlazer公式修改和重写的权利
//------------------------------------------------------------------------公式没啥大问题,除了最后交易的函数,应该Delay。

至于效果方面,卡夫曼自适应移动平均也有一定的适应性。可能对某些品种就是不行。 buy(lots,NextOpen,True); 替换 buy(lots,NextOpen);  AMA考夫曼自适应移动平均线2009-07-31 09:24

交易者对移动均线是再熟悉不过了,它们被用来识别和跟踪趋势。我们常用的移动均线有简单移动均线、加权移动均线以及指数式移动均线等,不管你使用这些传统均线的那一种都避免不了其固有的弱点——慢趋势和滞后。我们知道长周期的均线系统是最可靠的,但是它却带有严重的滞后行;短周期的均线系统虽然能快速反映股票的走势,但是却又难以抵抗股票“噪音”的干扰,多数情况下短周期所给出的趋势信号都是不准确的!

为了避免噪音产生的虚假信号,同时又想消除某些长线趋势中的滞后特性,考夫曼提出了一种“自适应”的均线系统——考夫曼自适应移动均线系统(简称AMA)。AMA可以在市场沿一个方向快速移动时,使用快的移动平均值,而当价格在横盘的市场中拉锯时,使用慢速的移动平均值。

在考夫曼的书中对AMA的解释比较模糊,我琢磨半天才看明白,现根据我的理解与思路来为大家解释,希望对后来者有所帮助。下面给出AMA的计算公式:

AMA = AMA[1] + C * (price - AMA[1]) .............................................................................................(1)

可以看到,这个公式很像指数移动平均线的公式:

EMA = EMA[1] + percentage * (price - EMA[1]),   percentage = 2 / (N + 1).................................(2)

因此,AMA的关键就在系数C上,要完成抗干扰和滞后性的效果,只需在当价格快速单向移动时,将C的值赋值为短周期的指数移动均线的系数;当股票价格成横盘状态时,将C赋值为长周期的指数移动均线的系数即可。

那么如何来计算C呢?如何知道当前股票是横盘状态还是快速单向移动状态?基于此,我们引出三个概念,价格方向、股票波动性和效率系数。

价格方向:N个时间周期中价格的净变化。direction = price - price[n]...........................................(3)

波动性:即为市场噪音的数量。这里计算使用了将N个周期中所有单周期的价格变化的总和(每一个价格变化都使用正数)。volatility = sum(abs(price - price[1]), n)...........................................................(4)

效率系数:将价格方向除以波动性,以表达方向移动对噪音之比,称之为效率系数ER。ER的值在0到1之间变化。   Efficiency_Ratio = direction / volatility...........................................................................(5)

我们用一个公式去建立ER与EMA系数之间的关系,使得当效率系数趋近1时,根据公式得到的EMA的系数趋近于短周期均线的系数fastest(fastest = 2 / (2 + 1)),而当效率系数趋近0时,EMA的系数趋近于长周期均线的系数slowest(slowest = 2 / (30 + 1))。

percentage = ER * (fastest - slowest) + slowest ........................................................................(6)

平方percentage将使该值趋向于零。这意味着较慢的移动平均值将比快速移动平均值用得更多。这和在出现不确定状况时你就更加保守是一样的道理。 C = percentage * percentage ...............................(7)

将C带入公式2所计算出的EMA就是我们所要的AMA的值了!

 

Reference:"Smarter Trading", Perry J.Kaufman

一、考夫曼的做法:

自适应均线系统的交易法则,根据考夫曼《精明交易者》一书中的介绍,其基本交易法则为:

   1.当自适应移动平均值向上拐头时,买入;
   2.当自适应移动平均值向下拐头时,卖出。

二、我实际的操作方法:

本人在使用自适应均线的中,并没有采用考夫曼的方式。

当自适应均线拐头向上时,必须使用连续两天的日K线确认趋势,当连续两根日K线均处于自适应均线上方时,方可确认上升趋势。

   1.第一根日K线应该从自适应均线的下方向上穿越自适应均线;
   2.第二根日K线,不论是阴线还是阳线,均不应跌破自适应均线,这时,可确认股价进入上升趋势。
   3.以第一根穿越自适应均线的最高点【或者K线实体的高点】为标准,在后面的3天之内,股价高于这个标准的时候,为买入点。
   4.卖出点也是以连续2日的K线低于自适应均线为卖出信号,如果连续两条价格不能收在自适应均线的上方,则必须卖出。

通过在MACD股票论坛中的交流,对自适应均线的使用做了一些改动。根据网友baifq的建议,采用两条自适应均线,分别适用短周期和长周期。并且对长周期均线做了三色处理。

交易法则:

   1、长周期均线为绿色时,不可操作;
   2、长周期为蓝色,股价穿越短周期均线时,可建50%的仓位;
   3、股价穿越长期均线时,可再建50%仓位;
   4、股价跌破短周期均线时,减掉50%仓位;
   5、股价跌破长周期均线时,卖出全部股票;
   6、长周期均线为红色时,代表持股。短过长,蜡烛线中阳或调空,可买;或短在长上,连续2-3日小阳,成交量短在长上,可买.

以下是修改后的代码:【通达信】
   DIR1:=ABS(CLOSE-REF(CLOSE,5));
   VIR1:=SUM(ABS(CLOSE-REF(CLOSE,1)),5);
   ER1:=DIR1/VIR1;
   CS1:=ER1*(0.8-2/8)+2/8;
   CQ1:=CS1*CS1;
   AMA1:EMA(DMA(CLOSE,CQ1),2) ,COLORWHITE;

   DIR2:=ABS(CLOSE-REF(CLOSE,10));
   VIR2:=SUM(ABS(CLOSE-REF(CLOSE,1)),10);
   ER2:=DIR2/VIR2;
   CS2:=ER2*(0.8-2/24)+2/24;
   CQ2:=CS2*CS2;
   AMA2:EMA(DMA(CLOSE,CQ2),2),COLORGREEN,LINETHICK2;
   AMA3:IF(AMA2/REF(AMA2,1)>0.997,AMA2,DRAWNULL),COLORBLUE,LINETHICK2;
   AMA4:IF(AMA2/REF(AMA2,1)>1.001,AMA2,DRAWNULL),COLORRED,LINETHICK2;

经过上述修改后,短期均线更适合短线操作,并能为长期趋势提供比较准确的买卖点。

当价格横向移动时,上述的交易方式将频繁产生进出交易的假信号。为了避免假信号的干扰,应该向AMA交易系统中添加一个过滤器。这个过滤器是根据自适应均线变化的标准差的百分比来确定。

根据这个原理,自适应均线的公式可做如下的完善:
   DIR:=ABS(CLOSE-REF(CLOSE,10));
   VIR:=SUM(ABS(CLOSE-REF(CLOSE,1)),10);
   ER:=DIR/VIR;
   CS:=ER*(2/3-2/14)+2/14;
   CQ:=CS*CS;
   AMA:EMA(DMA(CLOSE,CQ),2),COLORGREEN;
   FIL:=STD(AMA-REF(AMA,1),20);
   DRAWICON(FILTER(AMA-LLV(AMA,3)>FIL*0.1,10),AMA,1);

这是个自适应均线的公式
   DIR:=ABS(CLOSE-REF(CLOSE,n));
   VIR:=SUM(ABS(CLOSE-REF(CLOSE,1)),n);
   ER:=DIR/VIR;
   CS:=ER*(2/3-2/31)+2/31;
   CQ:=CS*CS;
   AMA:DMA(CLOSE,CQ),COLORGREEN;
   AMA1:IF(AMA>REF(AMA,1),AMA,DRAWNULL),COLORRED;

我想问的 abs(close-ref(close,n));这句话表示当前周期的收盘减去前N个周期的收盘取绝对值,怎么理解为i:整个周期价格的总体变动:
CS:=ER*(2/3-2/31)+2/31;
CQ:=CS*CS;

变动速率为何要乘以(2/3-2/31)+2/31然后再平方?代表的含义是什么?为何如何解释?

哪位能帮助一下?2/3是1/(2+1), 2/31是2/(30+1)。也就是说2/(N+1),N取2-30周期,即短周期数为2,长周期数为31。利用ER求出“自适应”周期数。如果趋势是单边向上或向下,毫无回调,则实际上这个自适应均线相当于两日均线,如果一直是盘整,毫无净移动,则相当于30日均线。我觉得用2/22似乎更好。21日均线足够长了。

求平方是为了更平滑,以达到盘整时几乎自适应均线不移动,但有趋势时又能跟上的效果。(我也不太理解这点,求平方确实能达到这个效果,但为什么就是求平方而不是其它算法)。详请参见《精明交易者》,网上有PDF下载的。