以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  高级功能研发区  (http://weistock.com/bbs/list.asp?boardid=5)
----  建议Document对象增加对全局变量的遍历机制  (http://weistock.com/bbs/dispbbs.asp?boardid=5&id=15360)

--  作者:guotx2010
--  发布时间:2012/8/21 14:34:08
--  建议Document对象增加对全局变量的遍历机制

我经常需要将程序运行过程中的临时变量写到全局变量中,如果每天都不清除这些全局变量,那么就会很混乱,有些变量是需要保留的,而有些是不需要的,这些变量在保存的时候会以当时的账户、合约代码和价格等信息组合而成的变量名称,要删除这些变量的话,最好的方法就是循环读取每一个变量,逐个删除,或者删除具有一定前缀的特定变量。

 

所以建议开发人员对document对象进行功能增强,提供:

1、基于0的索引遍历机制

2、删除某1个全局变量的功能

3、删除某些前缀的全局变量的功能。

4、批量修改某一特征的全局变量的值的功能。

 


--  作者:王锋
--  发布时间:2012/8/21 15:13:04
--  

采纳


--  作者:guotx2010
--  发布时间:2012/8/21 15:15:03
--  

王锋版主,今天你心情肯定很好吧,我以前都提过的问题,你都没有理我,今天全部采纳。

我也很开心,谢谢你了,我越来越喜欢金字塔了。做的项目一个比一个大了。


--  作者:guotx2010
--  发布时间:2012/8/30 23:17:23
--  为什么我的交易框里没有这个窗口

2.92果然增加了这些功能,我简单测试了一下,属性中的 ExtDataNumExtDataStringNum可以分别返回数值型和字符型变量的个数

但是不能遍历,每次返回的都是第一个变量。

 

以下是测试代码:

 

sub testglobal()
 dim KeyName
 
 iCount1=Document.ExtDataNum()
 application.MsgOut cdate(time)&",iCount1:"&iCount1
 for i=0 to iCount1-1
  Result = Document.GetExtDataByIndex(i,KeyName)
  KeyValue=document.GetExtData(KeyName)
  application.MsgOut "KeyName:"&KeyName &",KeyValue:"&KeyValue
 next
 
 iCount2=Document.ExtDataStringNum()
 application.MsgOut cdate(time)&",iCount2:"&iCount2
 for i=0 to iCount2-1
  Result = Document.GetExtStringByIndex(i,KeyName)
  KeyValue=document.GetExtString(KeyName)
  application.MsgOut "KeyName:"&KeyName &",KeyValue:"&KeyValue
 next
 
end sub

 

而删除指定索引位置的变量的方法RemoveExtData不能删除,RemoveExtString只能删除索引为0位置的变量,请开发人员测试。

 

[此贴子已经被作者于2012-8-30 23:24:30编辑过]

--  作者:王锋
--  发布时间:2012/8/31 11:57:10
--  
已经看到问题,下个升级版会进行修正
--  作者:guotx2010
--  发布时间:2012/8/31 12:09:51
--  
谢谢了。期待着
--  作者:guotx2010
--  发布时间:2012/9/1 19:17:28
--  

2.93版已经修改了,可以返回正确的数据了,但是还有一个小小问题,那就是删除的时候,得从最后一个开始删除,不然就会间隔一个删除,因为删除第一个以后,后面的提上来了,就不会在下次删除的时候删除。

比如:

a1

a2

a3

a4

a5

a6

这几个全局变量,如果从0 开始删除,删除前三个变量,最后就会剩下a2,a4,a6三个全局变量,不是a4,a5,a6,而从5开始删除,一直删除到3,就可以。

[此贴子已经被作者于2012-9-2 7:12:51编辑过]

--  作者:王锋
--  发布时间:2012/9/1 20:09:15
--  取昨天最高最低价k线到当前的距离
for循环的时候,每删除一个,控制循环变量应该进行自减一操作
--  作者:guotx2010
--  发布时间:2012/9/2 7:11:23
--  

是的,这样也可以。

还有,能不能增加一个按照键名部分代码过滤出一个子集来做循环,比如:我有5套策略,都需要用到全局变量,分别以不同的字母开头的,开头分别是TT,GG,FB,RG,HT,每一组下有多个变量,我想对TT进行循环读取、判断,而不需要全部读取(加入全部变量有几百个,循环一次是要耗费较多时间的),这样就可以大大减少循环的次数,提高效率,减少每次循环的时间。

 

 另外,按照键值批量删除的功能能不能增加,比如,批量删除键值为0的所有全局变量。

 

[此贴子已经被作者于2012-9-2 7:22:24编辑过]

--  作者:guotx2010
--  发布时间:2012/9/5 8:37:45
--  

这个问题在2.93版中已经处理的很好了,具体的说明和例子程序,大家可以看:http://www.weistock.com/bbs/dispbbs.asp?boardid=5&id=11642&authorid=0&page=1&star=8

74楼得专门讲解。