我希望开盘后程序才运行,因此用了一个
iopen=reportdata.open
iopen>0来判断,但是iopen在集合竞价的时候就大于0了,也就是提前了1分钟.这不是我想要的.如何写呢?要考虑夜盘的开盘时间不同
可能要用reportdata.IsVirtualData判断,明天再试试
IsVirtualData 属性的集合竞价数据不是你理解的哪种,期货的开盘前第一笔数据已经不是集合竞价数据了。
你可以使用 ReportData.date 属性,这个属性表示最新一笔报价的交易所时间,用这个来做判断
刚刚看到你的回复.我今天早上测试了一下,有这么个疑问: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点后才运行?我核实了一下电脑时间和金字塔右下角的时间,对得上.
触发模式都是一样的,
(1)一个框架分为几个窗格,每个窗格一个品种,加载相同的指标,所以你看到上面一共有3个品种运行了程序
(2)规定每个品种每天开盘后各运行一遍以刷新一个变量供该品种当天调用,对开盘时间的限制方式就是前面写的 thisopen>0 and jihe=0
你若看到郑州是开盘后才刷的,说明你的VBA触发这块儿代码有问题,仔细检查一下吧
触发代码都是一样的,说得更详细点,触发代码分为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编辑过]
国内期货是没有集合竞价数据的,开盘的第一笔已经是开盘数据。
集合竞价数据是沪深股市才有的,你可以看到9点15-25这10分钟的报单变化
考虑到夜盘, ReportData.date方法不好,刚才蹲坑儿的时候想到一个野路子.thisopen>0 and minute(time)<1
这个问题就解决了!