個人在平均值,尤其是均線上的計算使用,對 EMA(即 xAverage)的偏好大於 MA(即 Average)。在 MultiCharts 內建函數中對於一維陣列的平均計算有 Average_a 或是 AverageArray 可用,但找不到以 EMA 方式對一維陣列按序號遞增做 EMA 計算的函數...
於是,我嘗試的看著 xAverage 這個內建函數的 code,去做改寫,希望能把一維陣列的 EMA 給做出來,以下就是我的嘗試了,函數名稱 _xAverage_a:
inputs:xAvgArray[size](NumericArrayRef), ArraySize( numericsimple ) ;
variables:var0( 2 / ( ArraySize + 1 ) ) ;
var:flag(0),changes(0),temp(0);
flag= xAvgArray[1];
if flag<>flag[1] then
changes= changes+1;
if changes<>changes[1] then
begin
if changes=1 then
temp= xAvgArray[1]
else
temp= temp[1] + var0 * ( xAvgArray[1] - temp[1]);
end;
if changes>0 then
_xAverage_a= temp;
我利用當 陣列值[1] 有變化時,把 陣列值[1] 儲存在時序變數 temp 中,然後,以 temp 來當做計算 EMA 時用到的 "上一根K棒時的EMA值" ,從而得到以一維陣列為對象的 xAverage 計算值。
至於,是否正確?我不是那麼確定。下圖,看起來似乎還滿像一般我對 MA 與 EMA 放一起比較時的樣子。