说明:代码需要机器较好者使用,不然死机。因为数据运算较多。 Set dominantContract=CreateObject("Scripting.Dictionary") '枚举合约,将主力合约的代码和对应市场代码分别作为键和值存入字典容器,供后续操作调用 sub GetDominantContract() Dim marketName dominantContract.RemoveAll marketName=Array("SQ","DQ","ZQ","ZJ") prefixStockNameOld="" contractLabel="" contractMarket="" contractVol=0 For j=0 To UBound(marketName) n=marketData.GetReportCount(marketName(j)) For i=0 To n-1 Set reportData=marketdata.GetReportDataByIndex(marketName(j),i) prefixStockNameCur=left(reportData.StockName,2) suffixStockNameCur=right(reportData.StockName,2) If suffixStockNameCur="连续" And reportData.Volume>0 Then '这里指定的是连续合约,可以根据需要修改 If contractLabel<>"" Then dominantContract.Add contractLabel,contractMarket End If prefixStockNameOld=prefixStockNameCur contractLabel=reportData.Label contractMarket=marketName(j) End If Next Next dominantContract.Add contractLabel,contractMarket end sub Sub chuli() labels=dominantContract.Keys markets=dominantContract.Items '创建主力合约输出暂存对象 'Set b = CreateObject("Stock.Block") 'output="" zhouqi=Array(0,1,5) For i = 0 To dominantContract.Count-1 Set reportData=marketdata.GetReportData(labels(i),markets(i)) longstr = len(reportData.StockName) name = left(reportData.StockName,longstr-4) For j=0 To UBound(zhouqi) Set History = marketdata.GetHistoryData(labels(i),markets(i),zhouqi(j)) for k = 0 to History.Count-1 date2 = History.date(k) Count = MarketData.GetReportCount(markets(i)) for w =0 to Count-1 Set ReportData1 = MarketData.GetReportDataByIndex(markets(i),w) longstr1 = len(reportData1.StockName) name1 = left(reportData1.StockName,longstr1-4) '只处理该品种合约 if name1 = name Then '只处理有效合约 if Right(ReportData1.Label,2) >= "01" And Right(ReportData1.Label,2) <= "12" Then Openint = History1.Openint(k) date1 = History1.date(k) if date1 = date2 then ccl = Openint+ccl end if End if end if Next History.Openint(k) = ccl call History.SaveData(labels(i),markets(i),zhouqi(j)) Next Next Next application.MsgOut "连续合约持仓数据更新完毕!" End Sub Sub lianxuchicang() call GetDominantContract() call chuli() End Sub