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


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件高级功能研发区 → 读取历史数据的速度问题

   

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


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

主题:读取历史数据的速度问题

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


加好友 发短信
等级:论坛游侠 帖子:196 积分:594 威望:0 精华:2 注册:2011/8/22 18:26:49
读取历史数据的速度问题  发帖心情 Post By:2013/3/11 17:34:42 [只看该作者]

请教版主,我想在VBA程序中,在上根K线(如1分钟周期)走完,跳到下根K线的瞬间,以最快速度读取上根K线的收盘价和开盘价,以便判断上根K线是阴线还是阳线,据此作为开平仓的依据,我采用了以下一种方法,我请教的问题是:1、三种方法的取得数据是否是使用的一套历史数据数组(或数据库),即金字塔随行情不断动态刷新的历史数据是否是一套?  2、采用哪种方法取得上K线的开盘价和收盘价的数据速度最快?谢谢!

方法1:Call Application.ActivateFrameWithCode("Technic",“IF01”,“ZJ”,0)

           Set Grid = Technic.GetGridByName("Main")
           Set History = Grid.GetHistoryData()

           LastOpen=History.Open(History.Count-2)
           LastClose=History.Close(History.Count-2)

 

方法2:Set History = marketdata.GetHistoryData(“IF01”,"ZJ",0)

           LastOpen=History.Open(History.Count-2)
           LastClose=History.Close(History.Count-2)

 

方法3:采用后台自动化预警,并设置分笔速率扫描,将监控品种设为“IF01”

          EXTGBDATASET('LastOpen',REF(OPEN,1);

          EXTGBDATASET('LastClose',REF(Close,1);

          然后在VBA中:

          LastOpen=Document.GetExtData('LastOpen')

          LastClose=Document.GetExtData('LastClose')

 


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


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

如果你在VBA执行监控计算时,需要同步打开图表监控,那么第一种是最好的方案.因为直接可以利用到图表的数据

如果你在后台执行的VBA, 应该尽可能少的调用历史数据.这样可以提高读取数据加载的速度

 

http://www.weistock.com/bbs/dispbbs.asp?boardid=5&Id=49537 参考这里.

比如Count参数设为5


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


加好友 发短信
等级:论坛游侠 帖子:196 积分:594 威望:0 精华:2 注册:2011/8/22 18:26:49
  发帖心情 Post By:2013/3/11 19:46:59 [只看该作者]

谢谢管理员。只不过还是没有完全明白,我个人觉得在VBA中使用Set History = marketdata.GetHistoryData(“IF01”,"ZJ",0)取得历史数据,可能比从图表监控取得的历史数据会快一些,我认为图表监控必须等到一根K线刷新后,才会成为历史数据,是不是这样?

另外请教管理员,如果在后台采用Set History = marketdata.GetHistoryData(“IF01”,"ZJ",0,5)调用历史数据,其中的5是不是表示动态缓存区中只保留最新5周期的历史数据,还是从硬盘读取最新5周期数据到缓存区?


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


加好友 发短信
等级:论坛游侠 帖子:196 积分:594 威望:0 精华:2 注册:2011/8/22 18:26:49
  发帖心情 Post By:2013/3/11 19:51:05 [只看该作者]

另外请问,后台采用Set History = marketdata.GetHistoryData(“IF01”,"ZJ",0,5)设置调用历史数据的多少,是不是和工具-选项-内存保留X周期数据设置的数量是一个概念?

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


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

是一个概念,数字是5则代表只取5个数据,这样可以减少从硬盘中加载数据的时间,提高效率

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


加好友 发短信
等级:论坛游侠 帖子:196 积分:594 威望:0 精华:2 注册:2011/8/22 18:26:49
  发帖心情 Post By:2013/3/12 10:37:11 [只看该作者]

管理员,我试验了一下,Set History = marketdata.GetHistoryData(“IF01”,"ZJ",0,5),取到的历史数据是静态数据,只有不断的执行Set History = marketdata.GetHistoryData(“IF01”,"ZJ",0,5)语句,即不断从硬盘装载历史数据,才能取到最新的历史数据。而通过Set History = Grid.GetHistoryData()取到的历史数据是因为图表K线不断刷新,所以取到的历史数据永远是最新的,是这样的吗?如是这样,那么应该用Set History = Grid.GetHistoryData()从图表取历史数据应该要快,且不耗费系统资源,是吗?


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


加好友 发短信
等级:管理员 帖子:1516 积分:229 威望:0 精华:0 注册:2012/3/30 12:40:56
  发帖心情 Post By:2013/3/12 11:06:18 [只看该作者]

可以这么理解的

 回到顶部