以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://www.weistock.com/bbs/index.asp)
--  金字塔软件问题提交  (http://www.weistock.com/bbs/list.asp?boardid=2)
----  超全局变量失效?  (http://www.weistock.com/bbs/dispbbs.asp?boardid=2&id=174197)

--  作者:百湛必胜客
--  发布时间:2020/2/8 15:19:33
--  超全局变量失效?
建立一个逐K模式的交易系统,代码如下:
以下内容为程序代码:

1 GLOBALVARIABLE:hpin=STKLABEL,zhouuq=datatype;
2 if hpin<>STKLABEL or zhouuq<>datatype then
3 begin
4 msgout(hpin<>STKLABEL,\'换品种!\');
5 msgout(zhouuq<>datatype,\'换周期!\');
6 hpin:=STKLABEL;
7 zhouuq:=datatype;
8 end;

加载到图表后,按照代码意思,每次切换品种或者切换周期,都应该有消息框文字提示,可是,就是没有,为何?
感觉金字塔升级到现在,很多问题丛生。

--  作者:无为剑
--  发布时间:2020/2/8 16:35:44
--  
这个并不是你认为的超全局变量就是在窗格上位置不动的,在窗格上每个品种,周期都会被认做不同的全局变量,因为你更换不同的周期以后,每次都会被相同的初始化导致的。
建议你这样改

1 GLOBALVARIABLE:hpin=\'\',zhouuq=-1;

另外,字符串不能用你这个方法,你要用字符串函数STRCMP判断

--  作者:百湛必胜客
--  发布时间:2020/2/8 18:53:15
--  
这个代码:
以下内容为程序代码:
GLOBALVARIABLE:hpin=\'\',zhouuq=-1;
//原周期:zhouuq,linethick0;
//现周期:datatype,linethick0;
//drawtextex(islastbar,1,500,50,\'原合约:\'&hpin&\'\\n现合约:\'&STKLABEL);
if islastbar and (hpin<>STKLABEL or zhouuq<>datatype) then 
begin
clmsg(),NODRAW;
msgout(yi\'j<>STKLABEL,\'换品种!\');
msgout(zhouuq<>datatype,\'换周期!\');
hpin:=STKLABEL;
zhouuq:=datatype;
end;
改成上面的代码
假如
一开始从5MIN调到15MIN,会提示换周期。但是,
再次从15MIN调到5MIN,就不再提示了换周期了!
第一次换周期(从5MIN到15MIN)全局变量zhouuq不是刷新成3了吗,这样,再换回5MIN应该也提示才对啊,因为这时zhouuq<>datatype是成立的啊
[此贴子已经被作者于2020/2/8 18:53:43编辑过]

--  作者:无为剑
--  发布时间:2020/2/8 20:17:35
--  
这个没办法了,建议你不要用超全局变量做周期保存,你可以考虑使用EXTGBDATA函数。
目前的问题是品种代码和周期是做为系统参数与超全局变量进行处理的,你这个周期变量被周期初始化一次后,就没法再按照周期的不同来处理了。
打个比方来说假设日期周期你的某个超全局变量的值被你设置为10,你切换到5分钟周期设置为20,那么你再切换回日线后,那么这个超全局变量是之前你日线设置过的10,而不是20

--  作者:百湛必胜客
--  发布时间:2020/2/8 21:38:17
--  
EXTGBDATA效率慢很多,毕竟不是内存级别的读写
数据库读写,要跟硬盘发生关系

--  作者:无为剑
--  发布时间:2020/2/8 21:49:06
--  
EXTGBDATA是内存读写的,效率高