Stkindi 调用的公式和图表是2个不同的模块,他们没有必然的联系.
如果你要与图表一致,那么你要观察图表上加载了多少根K线,然后Stkindi中指定调用相同数量的K线就可以了
我换一个问法:
我想用VBA获取IF07的1分钟的MA指标的实时数据,方法如下:
'---------------------------------------------
Sub Test()
dim cycle
cycle=0
dim formula
set formula=MarketData.STKINDI("IF07","ZJ","MA",0,cycle)
Application.MsgOut "DataSize=" & formula.DataSize
Application.MsgOut "MA1=" & formula.GetBufData("MA1",formula.DataSize-1)
set formula=Nothing
End Sub
'---------------------------------------------
对比输出和图表显示(DataSize的输出和图表上最后一根K线的正序比较),
当周期为30分钟和60分钟时,数据明显不正确,
而周期为1分钟,5分钟,15分钟,日线,周线时,数据则是正确的
好吧,用下面的方法发现,30分钟,60分钟,VBA的数据与图表数据是不一样的,但其它周期都一样
Sub Test()
dim hd,count,i,cycle
cycle=4
set hd=MarketData.GetHistoryData("IF07","ZJ",cycle)
count=hd.Count-1
for i=count to count-4 step -1
Application.MsgOut "收盘价=" & hd.Close(i)
next
set hd=Nothing
End Sub
GetHistoryData 对象
取指定证券历史数据HistoryData对象,该对象记录了该证券历史数据。
注意:该对象使用一个共有的缓冲区来保存用户打开的市场数据,这意味着用户所调用的数据内容再下次重新调用其他品种或者调用不同种类的数据后会自动失效,若要在不同的品种间做横向数据处理请注意备份之前打开的数据,用户可以使用Visual Basic内部提供的数组,另外还可以使用金字塔为您提供的功能强大的数组类Array.
GetHistoryData (Code, Market,CycType,[Count,Parameter])
Code 证券代码
Market 市场标识
Cyctype 周期类型,0 1分钟 1 5分钟 2 15分钟 3 30分钟 4 60分钟 5日线 6周线 7月线 8年线 9多日线 10分笔成交 11多小时线 12多秒线 13多分钟线 14季度线 15半年线 16节气线 17 3分钟 18 10分钟 19 多笔线
Count 可选参数,若填数字则表示指定的调用数量,为0或者不填表示读取该品种在本地硬盘保存的全部数据
Parameter 可选参数若,当Cyctype为自定义周期时指定自定义周期数字。不填则表示使用系统选项设置中的自定义周期数字。
返回值 返回证券市场HistoryData对象