以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  金字塔软件问题提交  (http://weistock.com/bbs/list.asp?boardid=2)
----  数组的ma  (http://weistock.com/bbs/dispbbs.asp?boardid=2&id=30488)

--  作者:天三
--  发布时间:2012/11/8 12:07:54
--  数组的ma
基于1分钟
variable:a[5]=0;ra[5]=0,i=1,j=1;

if i>5 then i:=1;
if j>5 then j:=1;
cond==(minute:=00min,10min,20min,30min,40min,50min)取1次收盘价;只存最近的5个收盘价;


if cond then begin
a[i]:=c;
i:=i+1;
if i=1 then begin
ra1:=a[4];
a1:=a[5];
end
else begin 
ra1:=a[i-1];
a1:=a[i];
end
ra[j]:=ra1;
j:=j+1;

ma1:ma(ra1,5);
ma2:ma(ra,5);
ma3:ma(a1,5);
ma4:ref(ma2,1);
这样算出来的ma4,ma1,ma2的值用debugfile输出,看了一天的记录,都是相等的
所以2.932的MA,SUM等统计函数支持对VARIABLE支持的数组的运算
VARIABLE X[5]=0;
X[1]:=1;
X[2]:=2;
X[3]:=3;
X[4]:=4;
X[5]:=5;
S:MA(X,5);
实际是等同于
s:ma(x[i],5);
的?
是这样吗?还是不同?
ref也是对数组的前一个值得获取,而不是上一根当前周期K线上的值获取?
例如:最新值A是20分钟的时候取得的,那么前一个值B应该是10分取得的,那么现在是23分,ref取的是10分的时候得值B,而不是22分时候得值A?
整个10-19分钟都是10分的值B,20-29分钟都是20的值A,取值只在整10分钟取。
呃,有点绕,我这个表达清楚了么?我运行输出的结果是这样,是不是对的?

[此贴子已经被作者于2012-11-8 12:09:54编辑过]

--  作者:王锋
--  发布时间:2012/11/8 13:04:45
--  
VARIABLE X[5]=0;
X[1]:=1;
X[2]:=2;
X[3]:=3;
X[4]:=4;
X[5]:=5;
S:MA(X,5);
实际是等同于
s:ma(x[i],5);
的?
 
两个概念,S:MA(X,5); 是把X数组5个值进行平均计算
s:ma(x[i],5);
只是将X数组的第5个值反复的进行加权平均计算,是个常数了

--  作者:天三
--  发布时间:2012/11/8 14:15:07
--  

VARIABLE X[5]=0;
X[1]:=1;
X[2]:=2;
X[3]:=3;
X[4]:=4;
X[5]:=5;
S:MA(X,3);

这个取值是前3个还是后3个呢?还是最新插入的数值?

--  作者:jinzhe
--  发布时间:2012/11/8 14:29:26
--  

X数组后3个元素的平均


--  作者:天三
--  发布时间:2012/11/8 17:01:06
--  
ma不能在if cond then begin 里用

variable a1[10]=10,a2[10]=0,i=1;

//注1
if cond = i then begin
...
...
a1[i]:=c;
i:=i+1;
end
ma1:=ma(a1,10);
if cond = i then begin
...
...
a2[i]:=ma1;
i:=i+1;
end
改为
//注2
ma1:=ma(a1,10); 
if cond = i then begin
...
...
a1[i]:=c;
a2[i]:=ma1;
i:=i+1;
end

想要a1[i]和a2[i]的值对应起来,这样的注2可行吗?还是把注1的第2个if的改为cond = i-1?
if cond = i-1 then begin
...
...
a2[i]:=ma1;
i:=i+1;
end

或者应该怎么写比较好呢

--  作者:王锋
--  发布时间:2012/11/8 17:18:15
--  

没完全看懂你的描述,建议使用金字塔的调试功能,使用单步跟踪来自行调试.

参考 http://www.weistock.com/bbs/dispbbs.asp?boardid=4&Id=332 问题4


--  作者:天三
--  发布时间:2012/11/8 18:09:26
--  
就是我2个数组a1[]和a2[]
先把一些固定时间的价格放到a1[],
再对a1[]做一次ma的计算
然后把计算出来的值放到a2[],
最后调用a2[]里的数值.
但是a1[]和a2[]的执行都是基于相同的一个时间序列,存放数据的序列也相同,这样顺序执行下去,
如果我把ma1:=ma(a,10);放到if cond=t[j]的前面来,把2个if 中的内容放到一个if里面去,都赋完值,再自加i和j.这样可以么,数据会有什么变化吗?

variable:a[10]=0;ra[10]=0,t[6]=0,i=1,j=1;
if i>5 then i:=1;
if j>6 then j:=1;
cond==(minute:=00min,10min,20min,30min,40min,50min)取1次收盘价;
if cond = t[j] then begin
...
...
a[i]:=c;
i:=i+1;
j:=j+1;
end
ma1:=ma(a,10);
if cond = t[j-1] then begin
...
...
i:=i-1;
ra[i]:=ma1;
i:=i+1;
j:=j+1;
end

--  作者:天三
--  发布时间:2012/11/8 18:11:15
--  
或者我的第一条if的时间变量j不用自加?
--  作者:王锋
--  发布时间:2012/11/8 20:22:04
--  

建议参考

参考 http://www.weistock.com/bbs/dispbbs.asp?boardid=4&Id=332 问题4 好吗