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


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件高级功能研发区 → MarketData.RegReportNotify相关功能能加入遍历机制,会更好。

   

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


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

主题:MarketData.RegReportNotify相关功能能加入遍历机制,会更好。

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


加好友 发短信
等级:蜘蛛侠 帖子:1366 积分:5210 威望:0 精华:7 注册:2010/12/11 18:00:33
MarketData.RegReportNotify相关功能能加入遍历机制,会更好。  发帖心情 Post By:2012/5/31 10:06:18 [只看该作者]

    使用MarketData.RegReportNotify来注册要监控的合约价格变化,然后使用MarketData_ReportNotify(reportdata)过程来获取价格信息很强大,我最近使用它来写了一个条件单下单程序,自动根据已经输入的期货品种进行监控,每一次价格跳动都要进行一次对条件单的判断,满足条件就开仓。

    我要取消监控时,需要知道我之前监控了哪些品种,可是我事前并不知道,如果有一个基于0索引的遍历机制,就可以很轻松地取消所有品种的监控了。

 

    还有就是这个监控不会随VBA的停止而自动停止,有点像定时器,你再次启动vba时,之前的监控依然有效。最好能随vba的停止自动取消所有监控。


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


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

VBA支持遍历功能,你做个定时器就行了



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

金字塔-技术部

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

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

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


加好友 发短信
等级:蜘蛛侠 帖子:1366 积分:5210 威望:0 精华:7 注册:2010/12/11 18:00:33
  发帖心情 Post By:2012/5/31 10:13:03 [只看该作者]

我是要取消所有品种的监控,可是我不知道具体的品种的,因为那是从数据库中读取的合约,而取消的时候,可能数据库中的记录从外部删除了。

[此贴子已经被作者于2012-5-31 10:15:51编辑过]

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


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

使用RegReportNotify也不能 保证几百个品种效率能高于你用定时器遍历所有品种的,其实是一样的



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

金字塔-技术部

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

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

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


加好友 发短信
等级:蜘蛛侠 帖子:1366 积分:5210 威望:0 精华:7 注册:2010/12/11 18:00:33
  发帖心情 Post By:2012/5/31 10:25:47 [只看该作者]

这个我知道,我权衡了这两种方法,最后还是觉得使用RegReportNotify好,因为我监控的品种不会超过10个,一般3-5个,用价格监测,每一笔价格跳动都会到达这个事件进行处理,而是用定时器则会漏掉一些价格,比如使用每1秒循环一次,像某些品种1秒有两次价格跳动,如果是橡胶之类的一跳就是5快钱了,那可能会错过一些开仓机会。

 


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


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

那就用RegReportNotify好了,可以注册多个品种的



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

金字塔-技术部

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

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

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


加好友 发短信
等级:蜘蛛侠 帖子:1366 积分:5210 威望:0 精华:7 注册:2010/12/11 18:00:33
  发帖心情 Post By:2012/5/31 12:11:49 [只看该作者]

我的问题就在于,停止vba之后,在外部修改了品种或者删除了部分品种,可是vba再次启动的时候,我从数据库中找到要监控的品种,进行监控,可是那些已经删除的品种,还是在监控,导致出错,如果能遍历,我可以在vbaend事件中逐一取消注册,就不会有问题了。

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


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

停止VBA时,注销注册监控的品种就好了


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

金字塔-技术部

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

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

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


加好友 发短信
等级:蜘蛛侠 帖子:1366 积分:5210 威望:0 精华:7 注册:2010/12/11 18:00:33
  发帖心情 Post By:2012/5/31 16:31:10 [只看该作者]

可是我并不知道之前注册了哪些品种啊,是通过读取数据库中的记录来设置的品种,那些品种可能在数据库中已经别修改或删除了。

只能退出金字塔软件,再次进入才可以。

[此贴子已经被作者于2012-5-31 16:32:00编辑过]

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


加好友 发短信
等级:蜘蛛侠 帖子:1366 积分:5210 威望:0 精华:7 注册:2010/12/11 18:00:33
  发帖心情 Post By:2012/5/31 17:16:28 [只看该作者]

我想出来一个方法了,这里写出来供大家共享

1、注册时将每一个从数据库中读出来的合约代码、市场代码、合约总数写入全局变量

2、vbaend事件中从全局变量中读取合约总数,做一个循环来逐个注销

 

代码如下:

Sub RegisteStock()   '监控价格变动
 on error resume next
 dim i
 rstCodes.MoveFirst
 if rstCodes.eof then
  exit sub
 end if 
 i=1
 do while not rstCodes.eof           '从数据库中读取设定的合约,循环体逐个进行合约注册
  sCode=rstCodes("Code")
  sMarket=rstCodes("Market")
  Call Document.SetExtString("Code-" & i,sCode)             '写入每一个合约的代码
  Call Document.SetExtString("Market-" & i,sMarket)         '写入对应的市场代码
  Call MarketData.RegReportNotify(sCode,sMarket)
  rstCodes.MoveNext
  i=i+1
 loop
 rstCodes.MoveFirst
 Call Document.SetExtData("CodesCount",i-1)       '写入监控的合约总数
End Sub

 

Sub Application_VBAEnd()

 iCodesCount=Document.GetExtData("CodesCount")         '读入监控的合约总数
 for i=1 to iCodesCount 
  sCode=Document.GetExtString("Code-" & i)
  sMarket=Document.GetExtString("Market-" & i)    '从全局变量中读出合约及市场代码
  Call MarketData.UnRegReportNotify(sCode,sMarket)         '注销
 next

End Sub

[此贴子已经被作者于2012-6-1 14:08:46编辑过]

 回到顶部
总数 18 1 2 下一页