以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  公式模型编写问题提交  (http://weistock.com/bbs/list.asp?boardid=4)
----  [求助]请问有什么函数可以替代文华的TRMA三角移动平均?或者最接近的是哪个?  (http://weistock.com/bbs/dispbbs.asp?boardid=4&id=5128)

--  作者:douba22
--  发布时间:2011/2/11 9:12:00
--  [求助]请问有什么函数可以替代文华的TRMA三角移动平均?或者最接近的是哪个?
[求助]请问有什么函数可以替代文华的TRMA三角移动平均?或者最接近的是哪个?如果要自己编函数我就不会了。
[此贴子已经被作者于2011-2-11 9:12:32编辑过]

--  作者:阿火
--  发布时间:2011/2/11 9:50:06
--  
详细解释一下TRMA的意思。
--  作者:douba22
--  发布时间:2011/2/11 10:55:21
--  

TRMA(X,N) 求X在N周期内的三角移动平均。
三角移动平均计算方法:第1种可能先算(奇数+1)/2周期移动平均,得出值再算这个值的(奇数+1)/2周期的移动平均. 第2种可能先算偶数/2周期移动平均,得出值再算这个值的(偶数/2+1)周期的移动平均,也就是先判断一下N是奇数还是偶数,然后再选对应的计算式。


--  作者:z7c9
--  发布时间:2011/2/12 17:16:03
--  

图片点击可在新窗口打开查看

 

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;

[此贴子已经被作者于2011-2-12 18:56:51编辑过]

--  作者:douba22
--  发布时间:2011/2/13 10:03:21
--  
非常感谢!
--  作者:z7c9
--  发布时间:2011/2/13 12:50:38
--  

 

逐周期版本:

 

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; 


--  作者:admin
--  发布时间:2011/2/13 12:53:16
--  

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;

 

这是另一个实现版本,可以同时在序列和逐周期运行


--  作者:z7c9
--  发布时间:2011/2/13 13:05:38
--  
以下是引用admin在2011-2-13 12:53:16的发言:

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;

 

这是另一个实现版本,可以同时在序列和逐周期运行

不错,学习了。