以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  高级功能研发区  (http://weistock.com/bbs/list.asp?boardid=5)
----  读取历史数据的速度问题  (http://weistock.com/bbs/dispbbs.asp?boardid=5&id=49541)

--  作者:wsanle
--  发布时间: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
--  发布时间:2013/3/11 18:08:45
--  

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

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

 

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

比如Count参数设为5


--  作者:wsanle
--  发布时间: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
--  发布时间:2013/3/11 19:51:05
--  
另外请问,后台采用Set History = marketdata.GetHistoryData(“IF01”,"ZJ",0,5)设置调用历史数据的多少,是不是和工具-选项-内存保留X周期数据设置的数量是一个概念?
--  作者:admin
--  发布时间:2013/3/11 21:37:14
--  
是一个概念,数字是5则代表只取5个数据,这样可以减少从硬盘中加载数据的时间,提高效率
--  作者:wsanle
--  发布时间: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()从图表取历史数据应该要快,且不耗费系统资源,是吗?


--  作者:马良
--  发布时间:2013/3/12 11:06:18
--  
可以这么理解的