%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% EMA
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function [result] = myema(data, period)
data(isnan(data))=[];count=size(data,1);
if(period <=0 || period > count)
error('Period <= 0 || period > element count.\n');
end;
result=nan(count,1);
sf=2/(period+1);
% calculate first element
init=mean(data(1:period));
result(period)=data(period)*sf + init*(1-sf);
for k=period+1:count
result(k)=data(k)*sf + result(k-1)*(1-sf);
end;
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% MACD
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function [mcd,sig] = mymacd(data)
ema26=myema(data(~isnan(data)),26);
ema12=myema(data(~isnan(data)),12);
mcd=ema12-ema26;
sig=myema(mcd(~isnan(mcd)),9);
end