以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  高级功能研发区  (http://weistock.com/bbs/list.asp?boardid=5)
----  金字塔Stock.Array与自定义数组的应用  (http://weistock.com/bbs/dispbbs.asp?boardid=5&id=48885)

--  作者:duolaijin668
--  发布时间:2013/2/25 16:13:07
--  金字塔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
                                  

 

敬请老师指导。谢谢。


--  作者:guotx2010
--  发布时间:2013/2/25 17:24:50
--  

直接使用VB的数组就行了

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

 

使用的时候

aTest(i,0)="AAA"

aTest(i,1)=2500

...

 

 


--  作者:duolaijin668
--  发布时间:2013/2/25 23:37:52
--  数组测试

感谢版主指导。

经过测试,本例中使用二维数据测试结果,无论是定义成一行多列,还是定义成一列多行,显示结果都是一样,少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


--  作者:admin
--  发布时间:2013/2/25 23:40:42
--  
代码中多加几条 application.MsgOut  跑跑看看,看看程序中的运行逻辑
--  作者:duolaijin668
--  发布时间:2013/2/26 0:01:19
--  

问题解决:

原来问题是:

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条。