2015年4月21日 星期二

函數(_xAverage_a): 一維陣列用的EMA

個人在平均值,尤其是均線上的計算使用,對 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 放一起比較時的樣子。