四川耀业建设有限公司:考夫曼自適應均線

来源:百度文库 编辑:偶看新闻 时间:2024/05/02 08:23:33

[Z]《考夫曼自適應均線系統》(源碼)



我們跟蹤股票的走勢,必然離不開均線作為參考。均線系統是我們觀察股票走勢的基礎。

短期均線不能很好地遮罩市場的雜訊,往往產生虛假的進場信號;長期均線在判斷趨勢上一般比較準確,但是長期均線有著嚴重滯後的問題。一個股票的10日內的突發性的上漲,如果用200日均線去觀察,幾乎看不出變化。

均線系統存在的問題,讓我們每一個股市的參與者感到左右為難。尋找最佳的移動平均值就成了大家樂此不疲的一種日常活動。由於每次市場的波動,趨勢的速度都是不同的,所以在每一波的波動中,採用多少週期的移動平均值才能最好地反映趨勢的方向呢?

有一個流行的解決方法,就是針對某一隻股票測試其歷史資料的最佳移動平均值。並且根據最近的、最符合其趨勢的移動平均值去進行操作。但是歷史資料只代表已經走過的趨勢,我們不可能回到過去進行交易。

通過分析我們使用的移動平均線,可以得出如下的結論:
1。當價格沿一個方向快速移動時,短期的移動平均線是最好的。
2。當價格在橫盤的過程中,長期移動平均線是最好的。

我們理想中的移動平均線是什麼樣子的呢?
1。當價格無目標地移動時,它的反映會比較慢,像長期移動平均線;
2。當價格有了快速變化的時候,它又能很快地跟上價格的走勢,像短期移動平均線。
這樣的移動平均線存在嗎?

當然存在!
很多國外的股票技術分析書籍中都提到過這樣的均線,把這種自適應的均線系統作為電腦自動交易系統中趨勢判斷最主要的手段。最近在和訊的“黃金股道”的軟體中,也見到過類似的均線,但是做了公式的加密。
其實這樣的自適應均線每一個股票的軟體都可以做到,並且非常簡單。
==========================================================
技術分析僅僅是一種工具,錯把工具當真理,這顯現出的是一種哲學上的無知和靈性上的幼稚。

{考夫曼自適應均線}
input: n(9,1,60), p(2,1,60), Q(30,1,60);
Direction:=CLOSE - REF( CLOSE , N ) ;
XX:=ABS( CLOSE - REF( CLOSE , 1 ) ) ;
Volatility:=SUM( XX , N ) ;
ER:=ABS( Direction / Volatility ) ;
FastC:= 2 / ( p + 1 ) ;
SlowC:= 2 / ( q + 1 ) ;
SSC:=ER * ( FastC - SlowC ) + SlowC ;
Constant :SSC * SSC , Linethick0 ;
YY:=REF( Close , 1 ) + Constant * ( CLOSE - REF( Close , 1 ) ) ;
AA:=IF( SUM( 1 , 0 )= N + 1 , YY , 0 ) ;
BB:=BarsLast( AA>0 ) ;
DD:=REF( C , BB ) ;
CC:CLOSE , Linethick0 ;
for m=N + 2 to DATACOUNT DO
DD[m]:=DD[m - 1] + Constant[m] * ( CC[m] - DD[m - 1] );
AMA:DD;
T1:=DD>REF(DD,1);
T3:=NOT(T1) AND abs(DD-ref(DD,1))/DD*10000T2:=NOT(T1 OR T3);
PARTLINE(T1,DD),COLORRED,LINETHICK2;
PARTLINE(T2,DD),COLORGREEN,LINETHICK2;
PARTLINE(T3,DD),COLORBLUE,LINETHICK2;
DRAWTEXT(ISLASTBAR AND T1,DD,'持\n股'),COLORRED,SHIFT1;
DRAWTEXT(ISLASTBAR AND T2,DD,'持\n幣'),COLORGREEN,SHIFT1;
DRAWTEXT(ISLASTBAR AND T3,DD,'觀\n望'),COLORBLUE,SHIFT1;


根据考夫曼的自适应均线原理,利用文华财经编了一下,还是不错的,现把源代码公布出来给大家参考。

交易指标即自适应均线的源代码,我根据指标改良了一下交易系统,考夫曼原来是采用均线值的变化率发出买卖信号,我觉得不是很好,就用最高最低价构建了一个智能均线带,采用最低最高价突破来发出信号,大家一起探讨阿。

交易指标:DIRECTION:=CLOSE-REF(CLOSE,N);
VOLATILITY:=SUM(ABS((CLOSE-REF(CLOSE,1))),N);
ER:=ABS(DIRECTION/VOLATILITY);
FASTSC:=2/(2 + 1);
SLOWSC:=2/(30 + 1);
SSC:=ER*(FASTSC-SLOWSC)+SLOWSC;
CONSTANT:=SSC*SSC;
AMAHIGH:REF(EMA(HIGH,N),1)+CONSTANT*(HIGH- REF(EMA(HIGH,N),1));
AMALOW:REF(EMA(LOW,N),1)+CONSTANT*(LOW- REF(EMA(LOW,N),1));交易模型:DIRECTION:=CLOSE-REF(CLOSE,N);
VOLATILITY:=SUM(ABS((CLOSE-REF(CLOSE,1))),N);
ER:=ABS(DIRECTION/VOLATILITY);
FASTSC:=2/(2 + 1);
SLOWSC:=2/(30 + 1);
SSC:=ER*(FASTSC-SLOWSC)+SLOWSC;
CONSTANT:=SSC*SSC;
AMAHIGH:=REF(EMA(HIGH,N),1)+CONSTANT*(HIGH- REF(EMA(HIGH,N),1));
AMACLOSE:=REF(EMA(CLOSE,N),1)+CONSTANT*(CLOSE- REF(EMA(CLOSE,N),1));
AMALOW:=REF(EMA(LOW,N),1)+CONSTANT*(LOW- REF(EMA(LOW,N),1));
LOW>AMAHIGH,BK;
CLOSEHIGHCLOSE>AMACLOSE,BP; 

AMACLOSE:=REF(EMA(CLOSE,N),1)+CONSTANT*(CLOSE- REF(EMA(CLOSE,N),1));

这还不是原书中定义的自适应均线。按原书中定义,应该是:

AMA:=CONST*CLOSE+(1-CONST)*REF(AMA,1);

显然原书中的定义排除了人为的N,因此更加自然。可惜对AMA的定义需要向前引用ref(AMA,1),在文化中无法得到支持,这是文化平台需要改进的一个重大缺陷。目前还想不出如何在文化中完整实现原书中的定义。

尝试用 AMA:=DMA(CLOSE, CONST); 得到的结果竟成了一直线

自适应均线系统-最好的均线系统
 {n=10}
   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;
如果自适应均线系统的周期n=10,那么:
    1。自适应均线系统横向移动时,系统告诉你:最近的10个周期中,价格上涨的幅度和下跌的幅度基本相当,(是幅度,而不是周期数);
    2。自适应均线系统向上翘起时,系统告诉你:最近10个周期中,价格上涨的幅度要大于下跌的幅度,价格逐渐进入强势的状态。
    3。自适应均线系统向下垂时,系统告诉你的情形和2的情形正好相反。

《Smarter Trading》中Kaufman的AMA系统

       最新的成果便是阅读了《Smarter Trading》,根据里面的AMA构建方法自己编制了一套系统。通达信源码如下,貌似也可以运行在大智慧上,不过得改一下色彩函数。



{N:5    30    20}


DIRECTION:=CLOSE-REF(CLOSE,N);

VOLATILITY:=SUM(ABS(CLOSE-REF(CLOSE,1)),N);

ER:=ABS(DIRECTION/VOLATILITY); {EFFICIENCY RATIO是AMA系统中最重要的指标,比值越大,趋势越明显}

FSC:=2/(2+1);        {快速平滑常数}

SSC:=2/(30+1);        {慢速平滑常数}

SC:=ER*(FSC-SSC)+SSC; {等价于SC=ER*FSC+(1-ER)*SSC,指数平滑序列}

SCSQ:=SC*SC;          {不知道KAUFMAN为什么要平方??}

AMA:DMA(CLOSE,SCSQ),COLORBLACK,LINETHICK1;    {DMA指标,AMAt=SCSQt-1*CLOSEt-1+(1-SCSQt-1)*AMAt-1}

THRESHOLD:=STD(AMA-REF(AMA,1),20)*0.75;  {信号触发阈值,用0.75倍20天的AMA的标准差}

BUY:=AMA-LLV(AMA,5)>=THRESHOLD;

SELL:=HHV(AMA,5)-AMA>=THRESHOLD;

全仓:IF(BUY=1 AND SELL=0,AMA,DRAWNULL),COLORRED,LINETHICK4;

减仓:IF(BUY=0 AND SELL=0,AMA,DRAWNULL),COLORMAGENTA,LINETHICK5; {在买入后发出BUY=0的信号,则建议减仓至一半}

加仓:IF(BUY=1 AND SELL=1,AMA,DRAWNULL),COLORCYAN,LINETHICK5;                {在卖出后发出BUY=1的信号,则建议加仓至一半}

空仓:IF(BUY=0 AND SELL=1,AMA,DRAWNULL),COLORGREEN,LINETHICK4;



       经过我测试,发现这个系统的成功率并不高,测试数据为沪深A股,2000~2004、2003~2005、2004~2008、2006~2009年的日线数据,成功率38.97%~53.21%,属于中等水平,个人并不建议用于个股的操作,因为所有的Trends Following系统的共同的缺点就是,当价格波动恰好在系统信号发出的阈值空间内时,噪音信号剧增,失败率极高,对于那种波动剧烈的个股,趋势系统始终会发出很多假信号,不过AMA本身已经过滤了大部分虚假信号,这也就是为什么称之为Adaptive Moving Average,自适应均线系统。对于这套系统,还可以加入filter过滤假信号,不过没试过,个人觉得本身就已经有一个filter了,再加会适得其反。

       最后的建议:AMA系统用于“慢牛”型股票和指数基金是最合适的,这些目标波动小,趋势性明显,尤其推荐ETF场内交易指数基金,连巴菲特都说:没有几个基金经理能战胜指数基金的。