以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://www.weistock.com/bbs/index.asp)
--  高级功能研发区  (http://www.weistock.com/bbs/list.asp?boardid=5)
----  [求助]vba编程为什么多小时线和节气线没数据?  (http://www.weistock.com/bbs/dispbbs.asp?boardid=5&id=149738)

--  作者:NaturalLaw
--  发布时间:2017/3/27 19:18:30
--  [求助]vba编程为什么多小时线和节气线没数据?

\'多小时线和节气线的数据都下载到了本地了,多小时是系统默认的2小时线

Sub SHSL()
 Dim Grid                        \'窗格引用对象变量
 Dim iStockName                  \'与窗格关联的证券名称
 Dim iStockLabel                 \'与窗格关联的证券代码
 Dim iMarket                     \'与窗格关联的市场代码
 \'参数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 多笔线 
 \'不同周期数据的对象引用变量
 Dim DataMinute1,DataMinute5,DataMinute15,DataMinute30,DataHour,DataDay,DataWeek,DataMonth,DataYear,DataDays
 Dim DataBill,DataHours,DataSeconds,DataMinutes,DataQuarter,DataHalfYear,DataSolarTerms,DataMinute3,DataMinute10,DataBills
 \'用于数组的循环变量
 Dim iMinute1,iMinute5,iMinute15,iMinute30,iHour,iDay,iWeek,iMonth,iYear,iDays
 Dim iBill,iHours,iSeconds,iMinutes,iQuarter,iHalfYear,iSolarTerms,iMinute3,iMinute10,iBills
 Dim i       
 \'以下动态数组里的每列数据从左到右依次是:序号、时间、0、H、L、C、成交量、成交额、持仓量等八种数据
 Dim arrMinute1(),arrMinute5(),arrMinute15(),arrMinute30(),arrHour(),arrDay(),arrWeek(),arrMonth(),arrYear(),arrDays()
 Dim arrBill(),arrHours(),arrSeconds(),arrMinutes(),arrQuarter(),arrHalfYear(),arrSolarTerms(),arrMinute3(),arrMinute10(),arrBills()                 
 
 MarketData.HistoryDataMode = 1  \'不同周期品种为独立的缓冲区
   
 Set Grid = Technic.GetGridByName("Main") \'从图表上得到框架名称为"Technic"、窗格名称为"Main"的窗格对象——K线分析图
 iStockName = Grid.StockName   \'与窗格关联的证券名称
 iStockLabel = Grid.StockLabel \'与窗格关联的证券代码
 iMarket = Grid.Market         \'与窗格关联的市场代码
 
 \'以下得到图表关联品种的各周期类型数据
 
 \'读取多小时线数据
 Set DataHours = MarketData.GetHistoryData(iStockLabel,iMarket,11) \'设置引用对象
 iHours = DataHours.Count - 1             \'因为下标从0开始所以引用对象数据量减1
 ReDim Preserve arrHours(iHours,8)             \'重置动态二维数组维度
 For i = 0 To iHours                      \'给动态数组写入以下值
  arrHours(iHours,0) = i+1                  \'序号
  arrHours(iHours,1) = DataHours.Date(i)    \'时间
  arrHours(iHours,2) = DataHours.Open(i)    \'开盘
  arrHours(iHours,3) = DataHours.High(i)    \'最高
  arrHours(iHours,4) = DataHours.Low(i)     \'最低
  arrHours(iHours,5) = DataHours.Close(i)   \'收盘
  arrHours(iHours,6) = DataHours.Volume(i)  \'成交量
  arrHours(iHours,7) = DataHours.Amount(i)  \'成交额
  arrHours(iHours,8) = DataHours.Openint(i) \'持仓量
 Next
 MsgBox "参数Cyctype为11即多小时"& arrHours(iHours - 3,5) \'显示数据用于检查 
 

 \'读取节气线数据
 Set DataSolarTerms = MarketData.GetHistoryData(iStockLabel,iMarket,16) \'设置引用对象
 iSolarTerms = DataSolarTerms.Count - 1             \'因为下标从0开始所以引用对象数据量减1
 ReDim Preserve arrSolarTerms(iSolarTerms,8)                  \'重置动态二维数组维度
 For i = 0 To iSolarTerms                           \'给动态数组写入以下值
  arrSolarTerms(iSolarTerms,0) = i+1                       \'序号
  arrSolarTerms(iSolarTerms,1) = DataSolarTerms.Date(i)    \'时间
  arrSolarTerms(iSolarTerms,2) = DataSolarTerms.Open(i)    \'开盘
  arrSolarTerms(iSolarTerms,3) = DataSolarTerms.High(i)    \'最高
  arrSolarTerms(iSolarTerms,4) = DataSolarTerms.Low(i)     \'最低
  arrSolarTerms(iSolarTerms,5) = DataSolarTerms.Close(i)   \'收盘
  arrSolarTerms(iSolarTerms,6) = DataSolarTerms.Volume(i)  \'成交量
  arrSolarTerms(iSolarTerms,7) = DataSolarTerms.Amount(i)  \'成交额
  arrSolarTerms(iSolarTerms,8) = DataSolarTerms.Openint(i) \'持仓量
 Next
 MsgBox "参数Cyctype为16即节气线"& arrSolarTerms(iSolarTerms - 3,5) \'显示数据用于检查 
  
 
 MarketData.DestroyHistoryData \'数据处理完毕后,清理缓冲区
End Sub


--  作者:NaturalLaw
--  发布时间:2017/3/27 19:21:53
--  
消息输出框里有文字串但收盘价的值?
--  作者:NaturalLaw
--  发布时间:2017/3/28 8:51:23
--  
请大师们帮助
--  作者:NaturalLaw
--  发布时间:2017/3/28 11:41:43
--  
请大师们帮助啊
--  作者:yukizzc
--  发布时间:2017/3/28 12:49:19
--  

Set Grid = Technic.GetGridByName("Main") \'从图表上得到框架名称为"Technic"、窗格名称为"Main"的窗格对象——K线分析图
 iStockName = Grid.StockName   \'与窗格关联的证券名称
 iStockLabel = Grid.StockLabel \'与窗格关联的证券代码
 iMarket = Grid.Market         \'与窗格关联的市场代码

 

Set DataHours = MarketData.GetHistoryData(iStockLabel,iMarket,11) \'设置引用对象
application.msgout DataHours .close(DataHours.Count - 1   )

 

 

用这段代码测试正常,请您先简化分析,不要一次性堆积大量代码让工作人员去检查。。。