以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  公式模型编写问题提交  (http://weistock.com/bbs/list.asp?boardid=4)
----  [原创]关于数组的问题  (http://weistock.com/bbs/dispbbs.asp?boardid=4&id=100994)

--  作者:mmqiang
--  发布时间:2016/7/13 10:16:19
--  [原创]关于数组的问题
版主好,后台模式下,通过variable定义的数组值不像globalvariable的变量一样可以在每次轮询时不被重置为初始值,如果需要用到数组,又不想轮询时数组值被重置,有其他替代办法吗?
--  作者:jinzhe
--  发布时间:2016/7/13 10:23:08
--  
用variable定义数组,
--  作者:mmqiang
--  发布时间:2016/7/13 10:32:13
--  
版主,请看一下代码。我的想法是账户权益比之前记录的高才更新数组,但实际不是的,得到的结果一直是账户最新权益,请帮看看是哪里有问题,谢谢!


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

--  作者:jinzhe
--  发布时间:2016/7/13 10:43:17
--  
能讲下这段代码的逻辑吗?
--  作者:mmqiang
--  发布时间:2016/7/13 11:01:10
--  
版主,代码的目的是通过FOR循环去取单个或多个账户的权益(后台模式,每5秒轮询一次),如账户1的权益先记录在 最高权益[1] ,然后当后面轮询得到的权益大于这个值时,就更新 最高权益[1] ,小于不更新;同理,还可以加最低权益等,这样就可以实时计算每个账户的权益回撤等信息。

如果只考虑一个账户,直接用 globalvariable定义多个全局变量就可以了;但在考虑多个账户的时候,定义多个变量就太麻烦了,所以想到了数组,每个账户有固定的几个需要记录的值,如账户1的就是:最高权益[1]、最低权益[1],账户2的就是:最高权益[2]、最低权益[2]

不知这样描述是否清晰?

--  作者:jinzhe
--  发布时间:2016/7/13 11:29:36
--  

处理中,请稍等


--  作者:mmqiang
--  发布时间:2016/7/13 12:10:22
--  
好的,麻烦版主了
--  作者:jinzhe
--  发布时间:2016/7/13 14:08:20
--  

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


--  作者:mmqiang
--  发布时间:2016/7/13 14:14:07
--  
好的,辛苦版主了。