您现在的位置:程序化交易>> 期货公式>> 金字塔等>> 金字塔知识>>正文内容

vba字典在金字塔中如何表示 [金字塔]

  • 咨询内容:

    问题:

         在郑州期货市场,将商品名称左边两位存入数组MC(),
            通过输出,验证MC()确实有数据 

               希望:把数组MC()里记录装入字典,过滤掉重复的记录。

                  但 加入数据时提示错误。

     

         期望得到帮助和指导,谢谢。

     

    ,,,,

    Set d=CreateObject("Scripting.Dictionary")     '将数组MC()装入字典,滤掉重复记录
    for qq=0 to ubound(mc)
    d.Add mc(qq)                                               '加入数据时出现错误
    next
    application.MsgOut d.count                   
    End Sub

     

     

    下边为测试时源代码:

     

    Sub t_lx()  '在郑州期货市场,将商品名称左边两位存入数组MC()
    dim mc()
    dim d
    Count = MarketData.GetReportCount("zq")
    redim mc (Count-1)
    For i = 0 To Count-1 
    set Report3 = MarketData.GetReportDataByIndex("zq",i)                                         
    mc(i)=Left(Report3.stockname,2)
    Next
    for nn= 0 To i-1
    application.MsgOut mc(nn)    '通过输出,验证MC()确实有数据 
    Next

    Set d=CreateObject("Scripting.Dictionary") '将数组MC()装入字典,滤掉重复记录
    for qq=0 to ubound(mc)
    d.Add mc(qq)                       '加入数据时出现错误
    next
    application.MsgOut d.count                   
    End Sub

     

  • 金字塔客服: 字典是有键值对的,就是说有两列数据,你存入的时候,只有一个值,当然出错了。

     

  • 用户回复: 以下是引用guotx2010在2013-2-28 16:30:05的发言:
    字典是有键值对的,就是说有两列数据,你存入的时候,只有一个值,当然出错了。

    redim mc(Count-1) '名称
    redim dm(Count-1) ’代码

    mc(i)=Left(Report3.stockname,4)
    dm(i)=Right(Report3.Label,2)

     

    d.Add mc(qq),dm(qq)    还是提示错误:

     

    编辑器错误“457”,由于控件无法看到、尚未启用,或其他类型不接受焦点,因此无法将焦点移至该控件。

     

    请老师再赐教。

     

       另外,测试了论坛中“找主力合约”的例子,在本机上运行正常,里边也应用到“字典”,因个人水平较低,看不出例子为啥就能运行。

     

     

     

     

     

     

     

  • 网友回复: ''''''这是我用着的代码
    Set dominantContract=CreateObject("Scripting.Dictionary")
    '枚举合约,将连续合约的代码和对应市场代码分别作为键和值存入字典容器,供后续操作调用
    Sub GetLxCode()
     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>="00" And suffixStockNameCur<"99" And reportData.Volume>0 Then
          'If suffixStockNameCur="00" And reportData.Volume>0 Then
           If prefixStockNameCur<>prefixStockNameOld Then
             If contractLabel<>"" Then
               dominantContract.Add contractLabel,contractMarket
             End If
             prefixStockNameOld=prefixStockNameCur
             contractLabel=reportData.Label
             contractMarket=marketName(j)
             contractVol=reportData.Volume
           ElseIf reportData.Volume>contractVol then
             contractLabel=reportData.Label
             contractVol=reportData.Volume
           End If
         End If
        Next 
      Next
      dominantContract.Add contractLabel,contractMarket
     End sub

     

  • 网友回复:

     prefixStockNameOld=""
     c"
    感觉这两句很神秘,在程序中是啥意思?尤其是Old。

    希望老师能把每一条代码给给注释,便于学习。

    另外:dominantContract.Add contractLabel,contractMarket

    如果想把字典中已经装入的记录逐条显示出来,应该怎么写。

    总感觉金字塔里字典的用法与VBA 不太一样,恳请指点。

    谢谢。

 

有思路,想编写各种指标公式,程序化交易模型,选股公式,预警公式的朋友

可联系技术人员 QQ: 262069696  点击在线交流进行 有偿 编写!不贵!点击查看价格!


【字体: 】【打印文章】【查看评论

相关文章

    没有相关内容