期貨軟件TB系統(tǒng)源代碼解讀系列18-WMA

百度了一下,解釋是這樣的說的,加權(quán)移動平均線 (WMA) ,它比重以平均線的長度設(shè)定,愈近期的收市價,對市況影響愈重要。計(jì)算方式是基于加權(quán)移動平均線日數(shù),將每一個之前日 數(shù)比重提升。每一價格會乘以一個比重,最新的價格會有最大的比重,其之前的每一日的比重將會遞減。

移動平均線是我一直倚重的操作依據(jù),但需不需要做近期加權(quán)移動還真沒個普,我也基本很少給它加權(quán)。這原因吧,是期貨變動幅度比較大,做加權(quán),這均線波動很劇烈的,而且我習(xí)慣依據(jù)3分鐘操作,那更劇烈了,所以基本不做加權(quán)的。但這個加權(quán),在很多歐美操盤手里都是比較注重的,我看了一下TB系統(tǒng)里有,也順便解讀了。

我們照例先看它的算法,如下:

計(jì)算方法(以5日為例):

[(第1日收盤價+第2日收盤價)×1+(第2日收盤價+第3日收盤價)×2+(第3日收盤價+第4日收盤價)×3+(第4日收盤價+第5日收盤價)×4]/(2×1+2×2+2×3+2×4),即為第五日的階梯加權(quán)移動平均線。

看明白了算法,可直接用一個循環(huán)結(jié)構(gòu)寫下它的WAverage函數(shù)代碼,如下:

Params

NumericSeries Price(10);//聲明數(shù)值序列參數(shù)Price,初始值為10//

Numeric Length(10); //聲明數(shù)值參數(shù)Length,初始值為10.//

Vars

Numeric WtdSum(0);//聲明變量,WtdSum,初始值為0.//

Numeric CumWt; //聲明變量CumWt。//

Numeric i; //聲明變量i。//

Begin

for i = 0 to Length - 1 //循環(huán)結(jié)構(gòu),意思是變量 i 從0開始到9(10-1)依據(jù)下列代碼做循環(huán)計(jì)算.//

{

WtdSum = WtdSum + ( Length - i ) * Price[i] ;//依變量聲明可以知道,WtdSum初值為0 ,解讀第一個數(shù)值i=0,直接把數(shù)代進(jìn)公式了,變量WtdSum = 0 + (10 - 0)*Price[0],第二個數(shù)值i=1,也就是WtdSum = ( 0 + (10 - 0)*Price[0] )+ (10 - 1)*Price[1],第三個也是代數(shù)值進(jìn)去求值。很簡單吧,直到循環(huán)條件i=10,不滿足條件,跳出這個循環(huán)了,但我們也可以算出了10周期變量WtdSum總值了。//

}

CumWt = ( Length + 1 ) * Length * 1/2 ; //依參數(shù)初值代入進(jìn)公式了,變量CumWt = (10+1)* 10 * 1/2,其實(shí)這步就是算出一個依據(jù)不同周期變化的權(quán)重系數(shù)。//

Return WtdSum / CumWt;//用變量WtdSum總值 / 權(quán)重系數(shù)變量CumWt,計(jì)算得到的值返回給主函數(shù)。//

End

很簡單的一個計(jì)算方式吧,讓它在超級圖表顯示代碼如下:

Params

Numeric Length(9);//聲明數(shù)值參數(shù)Length,初值為9。//

Begin

PlotNumeric("WMA",WAverage(Close,Length));//畫線加權(quán)線WMA,把收盤價Close跟周期Length=9,返回到函數(shù)WAverage里求出值來,再把數(shù)值反饋回來就是加權(quán)線值了。//

End

喜歡用加權(quán)的朋友,其實(shí)也就跟做移動平均線一樣了,做成程序化也很簡單,代碼及測試結(jié)果如下:

Params

Numeric FastLength(5);

Numeric SlowLength(20);

Numeric DslowLength(200);

Vars

NumericSeries AvgValue1;

NumericSeries AvgValue2;

NumericSeries AvgValue3;

Begin

AvgValue1 = WAverage(Close,FastLength);

AvgValue2 = WAverage(Close,SlowLength);

AvgValue3 = WAverage(Close,DslowLength);

PlotNumeric("MA1",AvgValue1);

PlotNumeric("MA2",AvgValue2);

PlotNumeric("MA3",AvgValue3);

// 集合競價和小節(jié)休息過濾

If(!CallAuctionFilter()) Return;

If(MarketPosition <>1 && AvgValue1[1] > AvgValue2[1] && AvgValue1[1] > AvgValue3[1])

{

Buy(1,Open);

}

If(MarketPosition ==1 && AvgValue1[1] < AvgValue2[1])

{

Sell(1,Open);

}

If(MarketPosition <>-1 && AvgValue1[1] < AvgValue2[1] && AvgValue1[1] < AvgValue3[1])

{

SellShort(1,Open);

}

If(MarketPosition ==-1 && AvgValue1[1] > AvgValue2[1])

{

BuyToCover(1,open);

}

End


當(dāng)然,這是很隨意的寫成的代碼,買賣條件是可以依據(jù)個人習(xí)慣編寫的,我這里也只是做個簡單的而已,是不是跟第一篇移動平均線結(jié)果很像。其實(shí)我感覺基本一樣了,所以我一般不怎么做加權(quán)的,但不同的人,有不同的看法,解讀一下也不難的,順便寫出來了。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容