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


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件高级功能研发区 → 金字塔Stock.Array与自定义数组的应用

   

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


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

主题:金字塔Stock.Array与自定义数组的应用

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


加好友 发短信
等级:新手上路 帖子:28 积分:200 威望:0 精华:0 注册:2013/2/5 22:55:28
金字塔Stock.Array与自定义数组的应用  发帖心情 Post By:2013/2/25 16:13:07 [只看该作者]

一、测试金字塔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
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:蜘蛛侠 帖子:1366 积分:5210 威望:0 精华:7 注册:2010/12/11 18:00:33
  发帖心情 Post By:2013/2/25 17:24:50 [只看该作者]

直接使用VB的数组就行了

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

 

使用的时候

aTest(i,0)="AAA"

aTest(i,1)=2500

...

 

 


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


加好友 发短信
等级:新手上路 帖子:28 积分:200 威望:0 精华:0 注册:2013/2/5 22:55:28
数组测试  发帖心情 Post By: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
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:7302 积分:32559 威望:1000 精华:45 注册:2003/12/30 16:34:32
  发帖心情 Post By:2013/2/25 23:40:42 [只看该作者]

代码中多加几条 application.MsgOut  跑跑看看,看看程序中的运行逻辑

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


加好友 发短信
等级:新手上路 帖子:28 积分:200 威望:0 精华:0 注册:2013/2/5 22:55:28
  发帖心情 Post By: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条。

 

 


 


 回到顶部