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

金字塔Stock.Array与自定义数组的应用 [金字塔]

  • 咨询内容:

    一、测试金字塔Stock.Array时,发现里边只能装数字字段,不能装文字字段。

         为了能取出“动态显示牌”中符合条件记录的“代码、名称,价格”,在

         测试“帮助中范例”的时候,加入了自定义数组。

    二、测试结果:  Stock.Array 装入、取出数据正确。而自定义数组装入取出数据时出现差错。

         错误表现:以2013年2月25日中金期货为例:查出符合条件的记录是6条, Stock.Array

         装入、取出正确,自定义数组只装入了3条记录,少了3条。

    三、附脚本及测试结果如下:

    Sub LX_JC()
    dim d,k
     dim mc()
     Set d = CreateObject("Stock.Array")       '测试:金字塔数组,只能装入数据型字段
     Count = MarketData.GetReportCount("zj")
     application.MsgOut "Count:"&Count
     redim mc( Count)                           '根据市场记录总数定义数组,准备装符合条件字段
     For i = 0 To Count-1
     Set Report3 = MarketData.GetReportDataByIndex("zj",i)
     if Report3.open >0 Then                    '条件:取当日正常交易的全部记录。
     mc(i)= "名称:"&Report3.stockname&":代码:"& Report3.Label &":价格:"&Report3.NewPrice
     k=k+1                                       '对装入自定义数组的记录进行计数,判定装入几条记录                  
     d.AddBack(Report3.NewPrice)                 '金字塔数组,正在装入数据型记录
     End if
     Next
     application.MsgOut "d.count:"&d.count&":计数器k=:"&k
     application.MsgOut mc(0)                     '输出:装入金字塔记录数和自定义数组中记录条数,结果相等。
     application.MsgOut mc(1)                     
     application.MsgOut mc(2)
     application.MsgOut mc(3)                     '取出自定义数组所有记录验证:发现问题:数组中实际只装3条
     application.MsgOut mc(4)
     application.MsgOut mc(5)                      '记录,与装入记录计数器K值比较少了3条。
     
     For n =0 To d.count-1 
     application.MsgOut "数组中的值:"&n+1&":"&d.GetAt(n) 
     application.MsgOut mc(n)
     Next                                          '循环方式输出金字塔数组装入记录和自定义数组装入的记录,
     End Sub                       '发现:金字塔数组中6条记录,自定义数组中只有三条。请问:错在哪儿?              
    四、附运行输出结果:

    Count:17
    d.count:6:计数器k=:6
    名称:股指连续:代码:IF00:价格:2605
    名称:股指1303:代码:IF03:价格:2605
    名称:股指1304:代码:IF04:价格:2618.2
    数组中的值:1:2605
    名称:股指连续:代码:IF00:价格:2605
    数组中的值:2:2605
    数组中的值:3:2618.2
    数组中的值:4:2632.6
    名称:股指1303:代码:IF03:价格:2605
    数组中的值:5:2657.8
    名称:股指1304:代码:IF04:价格:2618.2
    数组中的值:6:2612.264
                                      

     

    敬请老师指导。谢谢。

     

  • 金字塔客服:

    直接使用VB的数组就行了

    dim aTest(n,k)   '定义n行,k列的数组

     

    使用的时候

    aTest(i,0)="AAA"

    aTest(i,1)=2500

    ...

     

     

     

  • 用户回复:

    感谢版主指导。

    经过测试,本例中使用二维数据测试结果,无论是定义成一行多列,还是定义成一列多行,显示结果都是一样,少3条记录。 邀请版主能亲自测试一下。

     

    附:用一列多行进行测试(摘要),(因为这里不能用转置)请看定义或输出句子是否有问题:

         redim mc (Count-1,1)

     application.MsgOut mc(0,1)                     

     application.MsgOut mc(1,1)                     
     application.MsgOut mc(2,1)
     application.MsgOut mc(3,1)                     '取出自定义数组所有记录验证:发现问题:数组中实际只装3条
     application.MsgOut mc(4,1)
     application.MsgOut mc(5,1)

     

    输出结果:少3条记录。

     

    d.count:6:计数器k=:6
    名称:股指连续:代码:IF00:价格:2605
    名称:股指1303:代码:IF03:价格:2605
    名称:股指1304:代码:IF04:价格:2618.2
    数组中的值:1:2605
    名称:股指连续:代码:IF00:价格:2605
    数组中的值:2:2605
    数组中的值:3:2618.2
    数组中的值:4:2632.6
    名称:股指1303:代码:IF03:价格:2605
    数组中的值:5:2657.8
    名称:股指1304:代码:IF04:价格:2618.2
    数组中的值:6:2612.264

     

  • 网友回复: 代码中多加几条 application.MsgOut  跑跑看看,看看程序中的运行逻辑

     

  • 网友回复:

    问题解决:

    原来问题是:

    For i = 0 To Count-1   结果是17

    k=k+1   结果是6

    也就是说,通过17次循环,把符合条件的6条记录装入数组的同时,把不符合条件的11条记录,以空记录的方式也装入了数组。

    测试要求输出为:

    application.MsgOut mc(0)                     

     application.MsgOut mc(1)                     
     application.MsgOut mc(2)
     application.MsgOut mc(3)                     

     application.MsgOut mc(4)
     application.MsgOut mc(5)                       
    实际上只输出了前6条记录中,包含有空记录。如果把17条全部输出,符合条件的记录正好是6条。

     

     


     

 

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

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


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

相关文章

    没有相关内容