以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://www.weistock.com/bbs/index.asp)
--  金字塔软件问题提交  (http://www.weistock.com/bbs/list.asp?boardid=2)
----  建议把1分线、5秒线等数据分日或分月保存  (http://www.weistock.com/bbs/dispbbs.asp?boardid=2&id=78215)

--  作者:yanxc
--  发布时间:2015/5/4 10:47:43
--  建议把1分线、5秒线等数据分日或分月保存
由于需要长期数据作研究,目前1分线、5秒线都达到近2G,调出非常慢。
建议学分笔数据,拆分到日,或者拆分到月也行。

这样,在调出历史数据段的时候,比如2010-2011,也就不需要再白白调出2011-2015的数据占用资源和时间了。

--  作者:pyd
--  发布时间:2015/5/4 11:06:31
--  
你是在图上调出2010-2011的数据?可以手工直接下载2010-2011的数据,k线图上直接锁定你要看的2010-2011,不用调出中间的数据
--  作者:FexTel
--  发布时间:2015/5/4 11:09:29
--  

1,改变存储方式后,历史数据格式全部都要进行调整!会影响大批量用户

2,目前方式只会影响盘后分析处理情况,暂不会进行处理


--  作者:yanxc
--  发布时间:2015/5/4 11:29:42
--  
以下是引用pyd在2015/5/4 11:06:31的发言:
你是在图上调出2010-2011的数据?可以手工直接下载2010-2011的数据,k线图上直接锁定你要看的2010-2011,不用调出中间的数据


我当然点了锁定。

但其实金字塔还是把所有数据全部调出,然后再只显示了2010-2011。所以资源和时间还是浪费了。

--  作者:yanxc
--  发布时间:2015/5/4 11:31:01
--  
以下是引用FexTel在2015/5/4 11:09:29的发言:

1,改变存储方式后,历史数据格式全部都要进行调整!会影响大批量用户

2,目前方式只会影响盘后分析处理情况,暂不会进行处理

即使不修改。 

如果我锁定2010-2011,金字塔是否会调出2012之后的扩展数据呢? 

建议至少扩展数据按锁定来调,而不是全调。
[此贴子已经被作者于2015/5/4 11:31:10编辑过]

--  作者:netfox
--  发布时间:2015/5/4 11:42:02
--  

楼主这是算法问题。

  限定数据然后读取,看似资源节省了但实际操作容易导致数据读取不足,也就是没冗余会崩的。

 

一般写法确实一口气全读取,然后只显示部分。 你看 readline 函数是每次读取一行,一行一行读取,全部读到内存。  f.open 函数根本就不管你多大直接全读取了,唯一就是你可以设定缓存是多少。

   读取一半后在读取一半,效率其实不咋样的。

 

如果只是限定读取部分,然后在读取。 就意味open要开2次, 并且有个问题,前一次到底关闭还是打开?  每次open必须带一个close, 不能open,open,close模式。

 你这样就相当于一个文件放到2个缓存。 实际占用内存是一样,但在程序内分2部分,导致对变量操作要跳来跳去。

 

O__O  当然我只写过300M数据运算, 2G的。。。我还真没写过。


--  作者:yanxc
--  发布时间:2015/5/4 13:32:59
--  
以下是引用netfox在2015/5/4 11:42:02的发言:

楼主这是算法问题。

  限定数据然后读取,看似资源节省了但实际操作容易导致数据读取不足,也就是没冗余会崩的。

 

一般写法确实一口气全读取,然后只显示部分。 你看 readline 函数是每次读取一行,一行一行读取,全部读到内存。  f.open 函数根本就不管你多大直接全读取了,唯一就是你可以设定缓存是多少。

   读取一半后在读取一半,效率其实不咋样的。

 

如果只是限定读取部分,然后在读取。 就意味open要开2次, 并且有个问题,前一次到底关闭还是打开?  每次open必须带一个close, 不能open,open,close模式。

 你这样就相当于一个文件放到2个缓存。 实际占用内存是一样,但在程序内分2部分,导致对变量操作要跳来跳去。

 

O__O  当然我只写过300M数据运算, 2G的。。。我还真没写过。


怎么可能效率不咋样。

我是复盘几年前的一天两天,结果金字塔把几年的数据都调出来。
显然占用不在一个档次上。

--  作者:netfox
--  发布时间:2015/5/4 14:19:09
--  
以下是引用yanxc在2015/5/4 13:32:59的发言:


怎么可能效率不咋样。

我是复盘几年前的一天两天,结果金字塔把几年的数据都调出来。
显然占用不在一个档次上。

 

呀怎么说呢二次开发与前置开发时候是不同的,以前只写VBA,现在写python后才体会的。

  调用数据其实不是“调用” 有个数据300M,你只要其中连续部分的150M (要是分块就麻烦)。

方法1, 一次读取内存后,在对读取变量分析挑出你要的

方法2,依据行读取文件,移动到指定也就是开始段A开始读入到内存存储。 但是前面你读取那些也是调入到内存无非就是后来数据把它废弃了。

 

   从效率来说只要内存足够大,方法1比方法2更好。 因为默认你可能要是整个数据,然后对整个数据排列,没说下次不用啊,下次要用只要没close到文件变量就在内存。

 

方法2的问题是你一旦超标了,就是说我要一部分新数据延续下去,则立即就又要重新打开文件在读取一次。 不是从上次哪里读取下去,是重新读取。

  虽然方法2可以利用指针记忆上次读取位置,但是下次数据申请未必就是这次数据刚好的后续,因此一般避免错误都是重新读取了。

 

当然我也希望只要给定数据段,毕竟我也要用金字塔定位时间段研究的。 但是就我目前编程知识我知道是一次读取后最有效率。

  内存操作比对磁盘I/O效率高不是一点。

[此贴子已经被作者于2015/5/4 14:20:10编辑过]