GLOBALVARIABLE:kcss=0,kg=1;
if TISPRVREMAIN(1) then
BEGIN
TBUYSHORT(1,1,MKT,0,0,'',jq);
MSGOUT(1,'jq开空');
kcss=kcss+1;
MSGOUT(1,NUMTOSTR(kcss,0));
sleep(2080);
end
全局变量赋值后,怎么被恢复为初始值呢?
这个kcss变量,刚加上1后,kcss=1,再轮询又发现kcss=0
到底怎么处理才好呢?
不要用数据库全局变量来处理,否则多品种多周期组合时,数据库全局变量太多,不好管理。
如果你中间停止过后台程序化那么他会被重新赋值的,或者你中间就是有其他代码又重新赋值了,建议你用debugfile函数在kcss所有赋值的地方都加上跟踪一下
我在代码中用了msgout监控啊,看到就是刚赋值+1,kcss=1,下一轮询又发生kcss=0了
没有其它代码会对kcss赋值,只有在平仓代码里会-1,别的地方都没有对kcss操作,监控里也没看到平仓提示的:
if kg=1 then
BEGIN
TSELLSHORT(1,1,LMT,c,0,'',yq);
kg:=0;
MSGOUT(1,'yq平空');
end
if TISPRVREMAIN(4) then
BEGIN
TSELL(1,1,MKT,0,0,'',jq);
MSGOUT(1,'jq平多');
kcss:=kcss-1;
MSGOUT(1,NUMTOSTR(kcss,0));
sleep(2080);
end
没有发现你这种情况,你用这段代码测试看,如果每次轮询kcss都重置的话他会重复去开多的,但事实没有。你应该是-1的操作触发了吧
GLOBALVARIABLE:kcss=0,kg=1;
if kcss=0 then
BEGIN
tbuy(1,1,MKT,0,0,'',''),ALLOWREPEAT;
msgout(1,'jq开空');
kcss:=kcss+1;
msgout(1,NUMTOSTR(kcss,0));
end
if kg=1 then
BEGIN
TSELLSHORT(1,1,LMT,c,0,'',yq);
kg:=0;
MSGOUT(1,'yq平空');
end
if TISPRVREMAIN(4) then
BEGIN
TSELL(1,1,MKT,0,0,'',jq);
MSGOUT(1,'jq平多');
kcss:=kcss-1;
EXTGBDATASET('kcss',kcss1-1);
MSGOUT(1,NUMTOSTR(kcss,0));
sleep(2080);
end
只有这个地方会-1操作,但如果进入这里的话,那么会输出‘jg平多'的,但从监控来看从来没有没看到这个输出结果。
会不会跟下面代码最后一行有关?
input:ss(3,1,10,1);
VARIABLE:kcss=0,kg=1;
kcss1:=EXTGBDATA('kcss');
//后台模式
if not(islastbar) or workmode<>1 then exit;
你下面又用variable定义kcss??
variable定义的全局变量单根k中会重新初始化的,你用的GLOBALVARIABLE不会有这个情况。
WRITEINIFILE
GETINIFILE
早就支持写文件了
直接写文件吧 怎么也不会乱 管理也简单
[此贴子已经被作者于2014/8/20 17:14:12编辑过]
写文件会不会影响速度啊?
另外TISPRVREMAIN(4)是指本策略下的上笔交易,还是包含所有后台交易其它下的单子呢?