版主好,后台模式下,通过variable定义的数组值不像globalvariable的变量一样可以在每次轮询时不被重置为初始值,如果需要用到数组,又不想轮询时数组值被重置,有其他替代办法吗?
版主,请看一下代码。我的想法是账户权益比之前记录的高才更新数组,但实际不是的,得到的结果一直是账户最新权益,请帮看看是哪里有问题,谢谢!
INPUT:消息输出(0,0,1,1);
ZHS:=TACCOUNTCOUNT;
VARIABLE:账户权益[ZHS]=0;
VARIABLE:最高权益[ZHS]=0;
IF ZHS>0 AND ISLASTBAR THEN BEGIN
FOR A=1 TO ZHS DO
BEGIN
CACCT:=TACCOUNTINDEX(A);
账户权益[A]:=TACCOUNT2(6,CACCT);
IF 最高权益[A]=0 THEN 最高权益[A]:=账户权益[A];
IF 账户权益[A]>最高权益[A] THEN BEGIN
最高权益[A]:=账户权益[A];
END
MSGOUT(消息输出=1 AND 账户权益[A]>0,CACCT & '-' & NUMTOSTR(最高权益[A],2)),ALLOWREPEAT;
END
END
版主,代码的目的是通过FOR循环去取单个或多个账户的权益(后台模式,每5秒轮询一次),如账户1的权益先记录在 最高权益[1] ,然后当后面轮询得到的权益大于这个值时,就更新 最高权益[1] ,小于不更新;同理,还可以加最低权益等,这样就可以实时计算每个账户的权益回撤等信息。
如果只考虑一个账户,直接用 globalvariable定义多个全局变量就可以了;但在考虑多个账户的时候,定义多个变量就太麻烦了,所以想到了数组,每个账户有固定的几个需要记录的值,如账户1的就是:最高权益[1]、最低权益[1],账户2的就是:最高权益[2]、最低权益[2]。
不知这样描述是否清晰?
if taccount2(6,TACCOUNTINDEX(1))>extgbdata(TACCOUNTINDEX(1)+'最高权益') then extgbdataset(TACCOUNTINDEX(1)+'最高权益',taccount2(6,TACCOUNTINDEX(1)));
MSGOUT(1,TACCOUNTINDEX(1) & '-' & NUMTOSTR(extgbdata(TACCOUNTINDEX(1)+'最高权益'),2)),ALLOWREPEAT;
抱歉想了一下只有这样的枚举法来实现了,多账户的情况下多复制这样的代码几次,然后修改taccountindex(1)里面的数字1