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


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件高级功能研发区 → 反馈一个奇怪的问题

   

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


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

主题:反馈一个奇怪的问题

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


加好友 发短信
等级:黑侠 帖子:864 积分:607 威望:0 精华:0 注册:2013/3/14 23:16:32
反馈一个奇怪的问题  发帖心情 Post By:2015/11/15 20:11:12 [只看该作者]


[此贴子已经被作者于2015/11/15 20:12:35编辑过]

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


加好友 发短信
等级:黑侠 帖子:864 积分:607 威望:0 精华:0 注册:2013/3/14 23:16:32
  发帖心情 Post By:2015/11/15 20:33:43 [只看该作者]

Sub findfirstsecondOPI(Precode,tMarket)
      on error resume next '有可能没有某些合约,如02合约通常没有
      for k=1 to 12  '3 遍历同一品种所有合约
        if k<10 then
          icode=Precode & "0" & cstr(k)
        else
          icode=Precode & cstr(k)
        end if
 
        set History2 = marketdata.GetHistoryData(iCode,tMarket,5)   '由于这一句可能会发生错误,导致cs中输出日期错误,怎么解释?
      next '3 
End Sub


Sub cs()
on error resume next
    T=25  
    Precode="CS"
    tMarket="DQ"
    
    set History1 = marketdata.GetHistoryData(Precode & "00",tMarket,5)
    M=History1.Count-1
    for j=0 to M  
      tdate=cdate(History1.Date(j))  
      findfirstsecondOPI Precode,tMarket
      application.msgout tdate 
    next  
End Sub

得到错误的日期输出:
2014-12-19
2014-12-23   ‘从这里开始就不对了
2014-12-24
2015-01-06
2015-01-08
2015-01-19
2015-01-20
2015-01-21
2015-01-22
2015-01-30
2015-02-05
2015-03-10
2015-03-12
2015-03-16
2015-03-20
2015-04-02
2015-04-15
2015-04-29
2015-05-06
2015-05-07
2015-05-11
2015-05-14
2015-05-26
2015-06-01
2015-06-25
2015-06-30
2015-09-22
2015-09-28
2015-10-15
2015-10-16
2015-10-27
2015-11-02
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00
0:00:00

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


加好友 发短信
等级:黑侠 帖子:864 积分:607 威望:0 精华:0 注册:2013/3/14 23:16:32
  发帖心情 Post By:2015/11/15 20:53:55 [只看该作者]

即便在
findfirstsecondOPI Precode,tMarket
后面再加一句err.number=0也不管用

但是,在后面加一句
set History1 = marketdata.GetHistoryData(Precode & "00",tMarket,5)
重新set一下倒是管用,不过其中的原因想不明白,为什么后面的错误在已经on error resume next 或者err.number=0后会导致早前声明的History1 对象毁了。是不是可以进一步推广,任何语句中的错误(无论之前之后发生的)都会导致所有与之相关的子程序中的对象被毁?!
[此贴子已经被作者于2015/11/15 20:55:25编辑过]

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


加好友 发短信
等级:超级版主 帖子:21598 积分:0 威望:0 精华:1 注册:2010/7/31 16:35:30
  发帖心情 Post By:2015/11/16 11:19:06 [只看该作者]

marketdata.HistoryDataMode=1'不同品种为独立的缓冲区
加一句这个,您看下GetHistoryData函数说明里的注意,默认对象共享同一个缓冲区。

 回到顶部