以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  高级功能研发区  (http://weistock.com/bbs/list.asp?boardid=5)
----  vba中有个头疼的开盘时间问题  (http://weistock.com/bbs/dispbbs.asp?boardid=5&id=69034)

--  作者:dwjgwsm
--  发布时间:2014/8/21 9:32:14
--  vba中有个头疼的开盘时间问题
我希望开盘后程序才运行,因此用了一个

iopen=reportdata.open

iopen>0来判断,但是iopen在集合竞价的时候就大于0了,也就是提前了1分钟.这不是我想要的.如何写呢?要考虑夜盘的开盘时间不同

--  作者:dwjgwsm
--  发布时间:2014/8/21 9:35:37
--  
可能要用reportdata.IsVirtualData判断,明天再试试
--  作者:王锋
--  发布时间:2014/8/21 12:36:33
--  

IsVirtualData 属性的集合竞价数据不是你理解的哪种,期货的开盘前第一笔数据已经不是集合竞价数据了。

你可以使用 ReportData.date 属性,这个属性表示最新一笔报价的交易所时间,用这个来做判断


--  作者:dwjgwsm
--  发布时间:2014/8/22 9:26:06
--  
刚刚看到你的回复.我今天早上测试了一下,有这么个疑问:
jihe=reportdata.IsVirtualData
thisopen=reportdata.open
tLabel=GRID.StockLabel
if thisopen>0 and jihe=0 then
  application.msgout time & " tLabel:" & tLabel &" work! thisopen:" & thisopen & " jihe:" & jihe
end if

8:59:20 tLabel:M00 work! thisopen:3270 jihe:0
9:00:06 tLabel:SRX00 work! thisopen:4491 jihe:0
9:00:12 tLabel:TA00 work! thisopen:6912 jihe:0

我就纳闷了,为什么大商所在9点前运行了,而郑商所在9点后才运行?我核实了一下电脑时间和金字塔右下角的时间,对得上.


--  作者:王锋
--  发布时间:2014/8/22 9:29:23
--  

要看你的VBA代码怎么个触发运行模式了


--  作者:dwjgwsm
--  发布时间:2014/8/22 9:36:58
--  
触发模式都是一样的,
(1)一个框架分为几个窗格,每个窗格一个品种,加载相同的指标,所以你看到上面一共有3个品种运行了程序
(2)规定每个品种每天开盘后各运行一遍以刷新一个变量供该品种当天调用,对开盘时间的限制方式就是前面写的 thisopen>0 and jihe=0


--  作者:王锋
--  发布时间:2014/8/22 9:54:20
--  
你若看到郑州是开盘后才刷的,说明你的VBA触发这块儿代码有问题,仔细检查一下吧
--  作者:dwjgwsm
--  发布时间:2014/8/22 10:27:03
--  
触发代码都是一样的,说得更详细点,触发代码分为2部分,第一部分判断程序运行次数,第二部分判断开盘时间:
Function SWjg(Formula)
.....
hiscount=HistroyData.count
barrecord=Document.GetPrivateProfileFloat("Gen", tLabel & "Num", 0, "D:\\SystemSet.ini")

if (hiscount<>barrecord or barrecord=0) and right(tLabel,2)="00" and (thisopen>0 and jihe=0) then  \'加粗的条件就是用于限制开盘再运行  {这就是我的全部触发条件}
....
....
Document.WritePrivateProfileString "Gen",tLabel & "Num",hiscount,"D:\\SystemSet.ini"         \'这样的话就实现了当天只运行一遍的要求
end if
end Function 
所以我觉得这个触发条件前半部分不应该有什么问题

另外,你说的

"IsVirtualData 属性的集合竞价数据不是你理解的哪种,期货的开盘第一笔数据已经不是集合竞价数据了"
那我就纳闷了,开盘前的数据都不是集合竞价数据,那什么时候IsVirtualData=1?
[此贴子已经被作者于2014/8/22 10:28:39编辑过]

--  作者:王锋
--  发布时间:2014/8/22 10:42:35
--  

国内期货是没有集合竞价数据的,开盘的第一笔已经是开盘数据。

集合竞价数据是沪深股市才有的,你可以看到9点15-25这10分钟的报单变化


--  作者:dwjgwsm
--  发布时间:2014/8/22 11:18:02
--  
考虑到夜盘, ReportData.date方法不好,
刚才蹲坑儿的时候想到一个野路子.thisopen>0 and minute(time)<1
这个问题就解决了!