如题:
代码如下
variable:rb_label='',rb_vol_max:=0;
for i=1 to 12 do
begin
ii:=strright('0'+numtostr(i,0),2);
rb_ii:="rb"+ii;
rb_vol:=stkindi(rb_ii,'vol.volume',0,5,0);
if rb_vol>rb_vol_max then rb_label=rb_ii;
end;
合约:rb_label;
成交量:rb_vol_max;
标题rb_label一直为空,成交量为0哦,不解!
谢谢
程序修改了一下,还不行、、、
variable:rb_label='',rb_vol_max:=0;
for i=1 to 12 do
begin
ii:=strright('0'+numtostr(i,0),2);
rb_ii:="rb"+ii;
rb_vol:=stkindi(rb_ii,'vol.volume',0,5,0);
if rb_vol>rb_vol_max then
begin
rb_label=rb_ii;
rb_vol_max=rb_vol;
end;
end;
合约:rb_label;
成交量:rb_vol_max;
variable:rb_vol=0,rb_vol_max:=0;
for i=1 to 12 do
begin
ii:=strright('0'+numtostr(i,0),2);
rb_ii:'rb'+ii,linethick0;
rbvol:=stkindi(rb_ii,'vol.volume',0,6,0);
if rbvol>rb_vol_max then
begin
rb_vol_max:= rbvol;
rb_vol:= rbvol;
end
end
成交量:rb_vol_max;
金字塔的公式不支持字符串的变量输出,所以rb_label只能返回0
这样基本搞定,你上面的公式问题太多了。
仔细比对,您改了3个地方。
1:周期为日线,我需要用到60min,所以用参数5没错。
2:去掉rb_label定义。程序中我需要知道是哪各个合约,多处用到它,所以不能去掉。
3:增加rb_vol定义,设为初值0 ,按程序设计原理,我有傅值语句rb_vol:=stkindi(rb_ii,'vol.volume',0,5,0);
所以个人觉得没必要,当然这样更规整些。
最大的问题:程序计算结果不对,看下面截图。。。
经管理员帮助,搞清楚了问题所在。
在fxj,fh中variable 的定义是为了让程序在默认循环中保存数值,如果没有这个定义,那么下个bars 变量的初值将会是null.导致不可预计的后果。
而在金字塔中variable 的作用是定义全局变量,与周期有关。变量如果没有variabl定义,数值一样保存。。有区别的。。。。
最终代码可以如下:不用variable 定义
rb_label:=0;
rb_vol_max:= 0;
rb_vol:=0;
for i=1 to 12 do
begin
ii:=strright('0'+numtostr(i,0),2);
rb_ii:'rb'+ii,linethick0;
rb_vol:=stkindi(rb_ii,'vol.volume',0,6,0);
if rb_vol>rb_vol_max then
begin
rb_vol_max:= rb_vol;
rb_label:=i;
end
end
rb合约月份:rb_label;
成交量:rb_vol_max;
那是Varable变量声明作用域的问题。
用Varable声明的变量是跨所有周期的变量。
下面公式将解决你前面的问题
//variable:rb_vol=0,rb_vol_max:=0;
rb_vol:=0;
rb_vol_max:=0;
for i=1 to 12 do
begin
ii:=strright('0'+numtostr(i,0),2);
rb_ii:'rb'+ii,linethick0;
rbvol:=stkindi(rb_ii,'vol.volume',0,6,0);
if rbvol>rb_vol_max then
begin
rb_vol_max:= rbvol;
rb_vol:= rbvol;
end
end
成交量:rb_vol_max;
这样的公式,放在高速行情上面,机子能吃得消吗?
楼上说的有道理。
讨论才能提高自己(我自己),呵呵呵。楼上,如果此程序只是某个系统的控制部分,每天8:58定时运行一次,还会影响速度么?系统最终的目的是无人值守。这只是程序控制部分一段程序,最终目标是无人值守。。。