TRMA(X,N) | 求X在N周期内的三角移动平均。 |
runmode:1;
input:n(5,1,100,1);
variable:t1=0,t2=0;
var1:=close;
if mod(n,2)=1 then begin
p1:=(n+1)/2;
p2:=(n+1)/2;
end
if mod(n,2)=0 then begin
p1:=n/2;
p2:=n/2+1;
end
for i=1 to datacount do begin
t1:=t1+var1[i];
if i>=p1 then begin
if i>p1 then
t1:=t1-var1[i-p1];
ma1[i]:=t1/p1;
end
end
for i=1 to datacount do begin
t2:=t2+ma1[i];
if i>=p2 then begin
if i>p2 then
t2:=t2-ma1[i-p2];
ma2[i]:=t2/p2;
end
end
trma:ma2,colorred,linethick2;
逐周期版本:
runmode:0;
input:n(5,1,100,1);
bound:=datacount;
variable:t1=0,t2=0,ma1[bound]=0;
var1:=close;
if mod(n,2)=1 then begin
p1:=(n+1)/2;
p2:=(n+1)/2;
end
if mod(n,2)=0 then begin
p1:=n/2;
p2:=n/2+1;
end
if barpos=1 then begin
for i=1 to datacount do begin
t1:=t1+var1[i];
if i>=p1 then begin
if i>p1 then
t1:=t1-var1[i-p1];
ma1[i]:=t1/p1;
end
end
end
if barpos<=p2 then exit;
ma2:=ma1[barpos];
for i=1 to p2-1 do
ma2:=ma2+ma1[barpos-i];
ma2:=ma2/p2;
trma:ma2,colorred,linethick2;
n:=10;
if barpos < n then
N:=barpos;
d:=c*0;
r:=intpart((n+1)/2);
s:=(n*n+n*2+(mod(n,2)=1))/4;
for i=0 to n-1 do
d:=d+ref(c,i)*if(i<r,i+1,n-i);
j:d/s;
这是另一个实现版本,可以同时在序列和逐周期运行
n:=10;
if barpos < n then
N:=barpos;
d:=c*0;
r:=intpart((n+1)/2);
s:=(n*n+n*2+(mod(n,2)=1))/4;
for i=0 to n-1 do
d:=d+ref(c,i)*if(i<r,i+1,n-i);
j:d/s;
这是另一个实现版本,可以同时在序列和逐周期运行
不错,学习了。