百度了一下,解釋是這樣的說的,加權(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)的,但不同的人,有不同的看法,解讀一下也不難的,順便寫出來了。