以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (http://www.weistock.com/bbs/index.asp) -- 高级功能研发区 (http://www.weistock.com/bbs/list.asp?boardid=5) ---- MarketData.RegReportNotify相关功能能加入遍历机制,会更好。 (http://www.weistock.com/bbs/dispbbs.asp?boardid=5&id=12044) |
-- 作者:guotx2010 -- 发布时间:2012/5/31 10:06:18 -- MarketData.RegReportNotify相关功能能加入遍历机制,会更好。 使用MarketData.RegReportNotify来注册要监控的合约价格变化,然后使用MarketData_ReportNotify(reportdata)过程来获取价格信息很强大,我最近使用它来写了一个条件单下单程序,自动根据已经输入的期货品种进行监控,每一次价格跳动都要进行一次对条件单的判断,满足条件就开仓。 我要取消监控时,需要知道我之前监控了哪些品种,可是我事前并不知道,如果有一个基于0索引的遍历机制,就可以很轻松地取消所有品种的监控了。
还有就是这个监控不会随VBA的停止而自动停止,有点像定时器,你再次启动vba时,之前的监控依然有效。最好能随vba的停止自动取消所有监控。 |
-- 作者:王锋 -- 发布时间:2012/5/31 10:07:48 -- VBA支持遍历功能,你做个定时器就行了 |
-- 作者:guotx2010 -- 发布时间:2012/5/31 10:13:03 -- 我是要取消所有品种的监控,可是我不知道具体的品种的,因为那是从数据库中读取的合约,而取消的时候,可能数据库中的记录从外部删除了。 [此贴子已经被作者于2012-5-31 10:15:51编辑过]
|
-- 作者:王锋 -- 发布时间:2012/5/31 10:16:47 -- 使用RegReportNotify也不能 保证几百个品种效率能高于你用定时器遍历所有品种的,其实是一样的 |
-- 作者:guotx2010 -- 发布时间:2012/5/31 10:25:47 -- 这个我知道,我权衡了这两种方法,最后还是觉得使用RegReportNotify好,因为我监控的品种不会超过10个,一般3-5个,用价格监测,每一笔价格跳动都会到达这个事件进行处理,而是用定时器则会漏掉一些价格,比如使用每1秒循环一次,像某些品种1秒有两次价格跳动,如果是橡胶之类的一跳就是5快钱了,那可能会错过一些开仓机会。
|
-- 作者:王锋 -- 发布时间:2012/5/31 10:49:51 -- 那就用RegReportNotify好了,可以注册多个品种的 |
-- 作者:guotx2010 -- 发布时间:2012/5/31 12:11:49 -- 我的问题就在于,停止vba之后,在外部修改了品种或者删除了部分品种,可是vba再次启动的时候,我从数据库中找到要监控的品种,进行监控,可是那些已经删除的品种,还是在监控,导致出错,如果能遍历,我可以在vbaend事件中逐一取消注册,就不会有问题了。 |
-- 作者:王锋 -- 发布时间:2012/5/31 13:35:25 -- 停止VBA时,注销注册监控的品种就好了 |
-- 作者:guotx2010 -- 发布时间:2012/5/31 16:31:10 -- 可是我并不知道之前注册了哪些品种啊,是通过读取数据库中的记录来设置的品种,那些品种可能在数据库中已经别修改或删除了。 只能退出金字塔软件,再次进入才可以。 [此贴子已经被作者于2012-5-31 16:32:00编辑过]
|
-- 作者:guotx2010 -- 发布时间:2012/5/31 17:16:28 -- 我想出来一个方法了,这里写出来供大家共享 1、注册时将每一个从数据库中读出来的合约代码、市场代码、合约总数写入全局变量 2、vbaend事件中从全局变量中读取合约总数,做一个循环来逐个注销
代码如下: Sub RegisteStock() \'监控价格变动
Sub Application_VBAEnd() iCodesCount=Document.GetExtData("CodesCount") \'读入监控的合约总数 End Sub [此贴子已经被作者于2012-6-1 14:08:46编辑过]
|