欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件高级功能研发区 → 汇总持仓量到指定合约

   

欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。    


  共有4799人关注过本帖树形打印复制链接

主题:汇总持仓量到指定合约

帅哥哟,离线,有人找我吗?
明心
  1楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游民 帖子:274 积分:841 威望:0 精华:10 注册:2010/7/12 15:25:05
汇总持仓量到指定合约  发帖心情 Post By:2011/1/25 11:32:04 [只看该作者]

说明:代码需要机器较好者使用,不然死机。因为数据运算较多。
Set dominantContract=CreateObject("Scripting.Dictionary")

'枚举合约,将主力合约的代码和对应市场代码分别作为键和值存入字典容器,供后续操作调用
sub GetDominantContract()
 Dim marketName
 dominantContract.RemoveAll
 marketName=Array("SQ","DQ","ZQ","ZJ")
 prefixStockNameOld=""
 c"
 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

 


 

由于论坛的原因,部分VBS代码无法贴出,给出文本文件

http://www.weistock.com/download/ccl.txt 


[本帖被加为精华]
版主评定:好评,获得2个金币奖励好评,获得2个金币奖励
(理由:好文章)
 回到顶部
帅哥哟,离线,有人找我吗?
明心
  2楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游民 帖子:274 积分:841 威望:0 精华:10 注册:2010/7/12 15:25:05
  发帖心情 Post By:2011/1/25 11:32:55 [只看该作者]

要求加精给金币。嘿嘿

 回到顶部
帅哥哟,离线,有人找我吗?
明心
  3楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游民 帖子:274 积分:841 威望:0 精华:10 注册:2010/7/12 15:25:05
  发帖心情 Post By:2011/1/25 11:47:28 [只看该作者]

就2个金币啊。管理员太小气了。图片点击可在新窗口打开查看

 回到顶部