欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件高级功能研发区 → 变量命名的困扰

   

欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。    


  共有4021人关注过本帖树形打印复制链接

主题:变量命名的困扰

帅哥哟,离线,有人找我吗?
dwjgwsm
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:黑侠 帖子:864 积分:607 威望:0 精华:0 注册:2013/3/14 23:16:32
变量命名的困扰  发帖心情 Post By:2015/1/6 16:17:58 [只看该作者]

完全在vba中写策略,下单.如果是同时交易几个品种,代码里面肯定有很多变量,那么不同品种的分笔数据来了之后,变量赋值会乱套的,举个简单的例子,a=ReportData.BuyPrice1+a,上一秒钟a可能是A品种数据来了,由此计算的,下一秒钟可能是B品种数据来了,a又是根据B品种数据计算的.所以必须把变量针对不同品种做个区分,这样才能同时交易几个品种.Document对象的全局变量的命名,我都是直接加上合约代码戳的,比如Label & "a",这样就不会混淆了,但是普通的vba变量没找到办法,又不能所有变量都搞成全局变量,vbs也不能像c++那样左赋值.不知道版主有什么高招?
[此贴子已经被作者于2015/1/6 16:18:44编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
王锋
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:罗宾汉 帖子:11808 积分:20695 威望:0 精华:10 注册:2009/8/18 8:15:13
  发帖心情 Post By:2015/1/6 16:29:10 [只看该作者]

如果你的策略较为复杂, 你可以考虑使用类模块,将不同的品种按照类的概念封装.

比如一个品种的操作你规划一个类, 然后创建几个类变量, 通过代码进行绑定, 当来行情报价时你先看是那个品种的报价,然后取相应的类



金字塔—专业程序化软件提供商

金字塔-技术部

-----------------------------------------------------------------------------------------------------

工作时间:周一至周五 08:30 - 17:30   周末及法定节假日休息

Email:service@weistock.com
 回到顶部
帅哥哟,离线,有人找我吗?
pel46585
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:167 积分:661 威望:0 精华:1 注册:2009/12/25 23:43:24
  发帖心情 Post By:2015/1/9 14:51:03 [只看该作者]

用字典试下,哥儿们,有信息来了,记录下就行了

版主评定:好评,获得4个金币奖励好评,获得4个金币奖励
(理由:奖励)
 回到顶部
帅哥哟,离线,有人找我吗?
dwjgwsm
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:黑侠 帖子:864 积分:607 威望:0 精华:0 注册:2013/3/14 23:16:32
  发帖心情 Post By:2015/1/10 11:27:39 [只看该作者]

以下是引用pel46585在2015/1/9 14:51:03的发言:
用字典试下,哥儿们,有信息来了,记录下就行了
没看懂,麻烦讲讲数据来了之后的处理流程是怎样的?


 回到顶部
帅哥哟,离线,有人找我吗?
dwjgwsm
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:黑侠 帖子:864 积分:607 威望:0 精华:0 注册:2013/3/14 23:16:32
  发帖心情 Post By:2015/1/18 10:49:47 [只看该作者]

那么这个类模块应该怎么写呢?我写出来报错:

新建一个类模块,取名ClassSRY
DIM NewPrice
Property Let HyPrice(HyP)  
  NewPrice=HyP
End Property


然后在标准模块Macro中,
Sub test()
Dim xx as New ClassSRY   '就这一句声明就通不过,提示语句未结束
'xx.HyPrice=4000
end sub

 回到顶部
帅哥哟,离线,有人找我吗?
yukizzc
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:21598 积分:0 威望:0 精华:1 注册:2010/7/31 16:35:30
  发帖心情 Post By:2015/1/19 13:25:46 [只看该作者]

Sub test()
set xx = New ClassSRY       '申明对象用set吧

xx.HyPrice=4000
msgbox xx.NewPrice
end sub


 回到顶部
帅哥哟,离线,有人找我吗?
dwjgwsm
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:黑侠 帖子:864 积分:607 威望:0 精华:0 注册:2013/3/14 23:16:32
  发帖心情 Post By:2015/1/25 15:29:34 [只看该作者]

类模块有个麻烦,就是在运行完一遍程序后变量就被释放了,不能做成静态数据.我这里有几十个全局变量和几个全局数组,想了很久,只有一个办法:
1.所有全局变量改成Document.SetExtData设置的全局变量
2.所有数组元素传递到标准模块保存,如果一个品种有5个全局数组,假如我做4个品种那么就要在标准模块中设4*5=20个全局数组,这个也是件麻烦的事,郁闷....

 回到顶部
帅哥哟,离线,有人找我吗?
dwjgwsm
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:黑侠 帖子:864 积分:607 威望:0 精华:0 注册:2013/3/14 23:16:32
  发帖心情 Post By:2015/1/25 15:47:35 [只看该作者]

但是这样做的话,使用类模块已经没有意义了.因为所有需要区分品种、避免相互影响的变量都是需要持续存活的全局变量,而不需要区分品种的变量其实都是一次性的,不存在相互影响一说

所以,问题还是没有得到解决
[此贴子已经被作者于2015/1/25 15:48:26编辑过]

 回到顶部