需要帮助!无法解决这个问题,我遇到了硬件限制 - 页 19 1...12131415161718192021 新评论 Nikolay Likhovid 2014.08.23 22:12 #181 komposter:因此,你将不得不通过其他序列的几百万笔交易!这正是我的意思。好吧,我说的是检查一个单一的数字(序列号),对于这样一个基本的操作,一百万并不算多。如果我们以递归的方式计算标准,那就只能是文件的一次通过,无论如何我们都要这样做。另外要考虑的是,递归数据图将包含同样的几百万个元素(乘以一个序列的参数数)。 另一个选择是在排序前 完全重新计算和存储标准。同样,使用递归的可能性也很关键。很明显,会有很多操作,但在原来的版本中会不会比较少? Eugeniy Lugovoy 2014.08.24 12:35 #182 ALXIMIKS:在C++中,如果没有解析器,你可以做到这一点。将这个想法推10次--用另一个文件中序列位置的起始值启动另一个文件,那么你甚至不需要在序列结构中存储交易数量。你将得到一个普通的索引,这在前面已经提到过了。 Andrey Khatimlianskii 2014.08.28 01:15 #183 我实现了我上面描述的算法。在X=20的情况下处理我的数据(对20个交易的标准计算)大约花了112分钟(没有准确地抓住它),大部分的份额被数组转移吃掉了(根据分析器,40%)。经过数组的循环和其他一些优化,处理速度变得更快。对于X=20:48分钟在X=50时:60分钟内存只够65个交易(乘以一百万个序列)。当然,这还不够--我还指望着至少有100个。下一步是摒弃所有不必要的交易信息。只留下开盘和收盘时间,以及以点为单位的利润,设法以X=185起飞。下一步--只是加快对文件的工作,FileReadXXX现在需要30%的时间(而且调度员说没有对磁盘进行工作,但CPU已经加载)。FileRead正好是FileSeek之后的第一个,也就是说,连续读取的效果很快。我将让你知道新的结果。kazakov.v: 在C++中,它是由fread在64K-128K的缓冲区中完成的,由你自己的分析器来解析它更好,因为scanf-es非常慢。我将尝试通过WinAPI来处理这些文件,这是服务台给我的建议。ALXIMIKS。我把这个想法推了10遍--用另一个文件中的序列的起始位置的值做一个文件,那么在序列的结构中甚至不需要存储交易的数量。我不明白该指数将做什么。写下交易的数量并没有什么区别,顺序读取工作很快,问题是在文件中移动后确切地读取块。请写一个建议的算法。C-4:这个问题非同小可,但目前还没有一行代码。安德烈,这里很多人都很感兴趣--提出问题并提供测试数据。让我们来组织一些体育节目。我们需要测试数据+伪代码,有数据工作的一般原则。任务从开始到结束都是制定的。而测试数据可以用一个稍加修改的脚本来生成,我在前面发布了这个脚本。我稍后会这样做。joo: 为什么要从基础上进行选择呢?根据标准在历史上产生交易会更好吗? 不是吗?这不是和要求一样吗?如果是为了测试,当然可以,但如果是为了解决问题,当然不行 )烛光。 好吧,我们正在谈论检查一个单一的数字(序列号),对于这样一个基本的操作来说,一百万并不是那么多。如果我们递归地考虑批判,这只是文件的一次传递,我们无论如何都要这样做。另外要考虑的是,递归数据图将包含同样的几百万个元素(乘以一个序列的参数数)。另一个选择是在排序前 完全重新计算和存储标准。同样,使用递归的可能性也很关键。很明显,在任何情况下都会有大量的操作,但在原始版本中是否较少?在最初的变体中,当从通过的历史记录中找到最后一笔交易时,你可以计算一次该标准。而你需要读取这样一个文件片段,它将包含所有 序列的X个交易。它将比X*序列数大得多,因为有不同数量的交易,它们可能不是均匀分布的。2所有。无论如何,感谢你的支持。如果你不介意的话,请运行测试脚本 并分享结果。 Andrey Khatimlianskii 2014.08.28 03:15 #184 komposter:而测试数据可以用我之前发布的稍加修改的脚本来生成。我附上更新后的脚本,现在它不只是记录相同的交易,而是按照指定的设置(寿命--从和到,利润--从和到)生成随机序列。要想得到一个与我相似的文件,请以默认设置运行该脚本。2014.08.28 04:12:36.044 sTest_ReadWriteBIN EURUSD,M15:140,000 secuences writown in57.1 sec 2014.08.28 04:13:20.688 sTest_ReadWriteBIN EURUSD,M15: 在44.0秒 内加载6632Mb(150.7 MB/sec)之后,你就可以在上面计算出算法。对于最懒的人来说,把文件存档在谷歌硬盘上。 附加的文件: sTest_ReadWriteBIN.mq4 5 kb Nikolay Likhovid 2014.08.28 09:27 #185 komposter:1.在原来的变体中,你可以在从通过的历史中找到最后一笔交易时计算一次标准。在你的变体中,你需要读取这样一个文件,它将包含所有 序列的 X个交易。它将远远大于X*序列的数量,因为交易的数量不同,它们可能不是均匀分布的。1 这一点不是很清楚,如果我们要寻找最大(最小)的标准,我们最后还是要计算所有候选人的标准。至于寻找的是局部还是全球的极端现象,这甚至并不重要。2.显然,更多的是在所需的内存方面,可接受的尺寸或不可接受的问题。此外,就磁盘读取速度而言,更大的块大小在理论上甚至更好。当然,对RAM来说还不是问题。最重要的是,阅读要按顺序进行,而且只读一次。 然而,在排序前计算标准的变体需要阅读两次。但它也有自己的优势,特别是考虑到将数据分割成几个小文件并随后联合处理的可能性。然而,如果没有实施,所有的论据都将是抽象的。因此,在讨论的这一点上,我将不得不离题 :) Mykola Demko 2014.08.28 11:36 #186 komposter:如何对文件进行拼接,并对哪个位是哪个文件的开始和结束进行索引。例如,将1000个文件做成1000个元文件,如果标准已知,则进行统计排序,将类似的文件装入一个元文件。最好用FileOpen 做个实验,在打开一个大文件或一个小文件时,它的工作速度是怎样的,是打开1000次大文件等于1000次小文件还是打开1000000次小文件?结果可能是,这些文件不应该被合并,而应该被分割。 Andrey Khatimlianskii 2014.08.28 23:04 #187 Urain:如何对文件进行拼接,并对哪个位是哪个文件的开始和结束进行索引。例如,将1000个文件做成1000个元文件,如果标准已知,就进行统计排序,将类似的文件装入一个元文件。最好用FileOpen做个实验,在打开一个大文件或一个小文件时,它的工作速度是怎样的,是打开1000次大文件等于1000次小文件还是打开1000000次小文件?结果可能是,文件不应该被合并,而应该被拆分。我目前正在用一个大文件工作,但想去做一百万个小文件。首先,它们可以被追加,其次,它们可以通过名称被访问(不需要存储 "每个序列的开始")。我在服务台询问了关于不同文件的一百万次打开的问题(我以这种方式实现了高速缓存)。答案是明确而直接的。我将对一个大文件和一百万个小文件测试api-function,我将公布结果。烛光。然而,如果没有实现,所有的论据都将是抽象的。因此,在讨论的这个阶段,我退出是合适的 :)我应该从它开始;)但无论如何,感谢你的参与,没有代码的想法也是有价值的。 Renat Fatkhullin 2014.08.28 23:53 #188 有了一百万个文件,你就会以这样的方式毁掉ntfs,你会从微软这个疯狂的创意中哭出来,它把每个人都永远锁在它疯狂的弱智的文件系统的实现中。ms在他们的文件系统中所做的一切,都是畸形的重量、弱智和愚蠢的行为。糟糕的是,这些白痴没有做出任何努力来优化和提高速度,而且api也只是原始的。在2014年,这一点可以毫不含糊地说明。好了,哭了。 Renat Fatkhullin 2014.08.28 23:58 #189 任何想提高在windows中处理一堆文件的效率的人,他们做的第一件事就是进入大块--在一个文件中进行分组和自己的数据结构。一旦你开始在windows中存储超过一千(更不用说几万或几十万)个不同的文件,你就完蛋了。 Renat Fatkhullin 2014.08.29 00:05 #190 MQL4/5中的文件操作通过我们非常有效的缓存机制,这使我们能够实现非常有效和高的读写速度。你可以一个字节一个字节地流传数据--所有的数据将被迅速收集到内部缓冲区,并只以大块的形式写入磁盘。WinAPI调用的数量是最少的,这给了人们高速的操作。读取是类似的--它主动地工作,大块地读取,很少调用WinAPI,并以最小的开销非常迅速地从其缓存中回馈数据。粗略地说,与Build 509相比,我们在MQL4/5中的文件操作速度提高了一个数量级(如果我们指的是基于块的常规操作,而不是 "按兆字节块写入以最大化速度测量")。 1...12131415161718192021 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
因此,你将不得不通过其他序列的几百万笔交易!这正是我的意思。
好吧,我说的是检查一个单一的数字(序列号),对于这样一个基本的操作,一百万并不算多。如果我们以递归的方式计算标准,那就只能是文件的一次通过,无论如何我们都要这样做。另外要考虑的是,递归数据图将包含同样的几百万个元素(乘以一个序列的参数数)。
另一个选择是在排序前 完全重新计算和存储标准。同样,使用递归的可能性也很关键。
很明显,会有很多操作,但在原来的版本中会不会比较少?
在C++中,如果没有解析器,你可以做到这一点。
将这个想法推10次--用另一个文件中序列位置的起始值启动另一个文件,那么你甚至不需要在序列结构中存储交易数量。
你将得到一个普通的索引,这在前面已经提到过了。
我实现了我上面描述的算法。
在X=20的情况下处理我的数据(对20个交易的标准计算)大约花了112分钟(没有准确地抓住它),大部分的份额被数组转移吃掉了(根据分析器,40%)。
经过数组的循环和其他一些优化,处理速度变得更快。
内存只够65个交易(乘以一百万个序列)。当然,这还不够--我还指望着至少有100个。
下一步是摒弃所有不必要的交易信息。只留下开盘和收盘时间,以及以点为单位的利润,设法以X=185起飞。
下一步--只是加快对文件的工作,FileReadXXX现在需要30%的时间(而且调度员说没有对磁盘进行工作,但CPU已经加载)。
FileRead正好是FileSeek之后的第一个,也就是说,连续读取的效果很快。
我将让你知道新的结果。
在C++中,它是由fread在64K-128K的缓冲区中完成的,由你自己的分析器来解析它更好,因为scanf-es非常慢。
我将尝试通过WinAPI来处理这些文件,这是服务台给我的建议。
我把这个想法推了10遍--用另一个文件中的序列的起始位置的值做一个文件,那么在序列的结构中甚至不需要存储交易的数量。
我不明白该指数将做什么。
写下交易的数量并没有什么区别,顺序读取工作很快,问题是在文件中移动后确切地读取块。
请写一个建议的算法。
这个问题非同小可,但目前还没有一行代码。安德烈,这里很多人都很感兴趣--提出问题并提供测试数据。让我们来组织一些体育节目。
我们需要测试数据+伪代码,有数据工作的一般原则。
任务从开始到结束都是制定的。
而测试数据可以用一个稍加修改的脚本来生成,我在前面发布了这个脚本。
我稍后会这样做。
为什么要从基础上进行选择呢?根据标准在历史上产生交易会更好吗? 不是吗?这不是和要求一样吗?
如果是为了测试,当然可以,但如果是为了解决问题,当然不行 )
烛光。
好吧,我们正在谈论检查一个单一的数字(序列号),对于这样一个基本的操作来说,一百万并不是那么多。如果我们递归地考虑批判,这只是文件的一次传递,我们无论如何都要这样做。另外要考虑的是,递归数据图将包含同样的几百万个元素(乘以一个序列的参数数)。
另一个选择是在排序前 完全重新计算和存储标准。同样,使用递归的可能性也很关键。
很明显,在任何情况下都会有大量的操作,但在原始版本中是否较少?
在最初的变体中,当从通过的历史记录中找到最后一笔交易时,你可以计算一次该标准。
而你需要读取这样一个文件片段,它将包含所有 序列的X个交易。它将比X*序列数大得多,因为有不同数量的交易,它们可能不是均匀分布的。
2所有。
无论如何,感谢你的支持。
如果你不介意的话,请运行测试脚本 并分享结果。
而测试数据可以用我之前发布的稍加修改的脚本来生成。
我附上更新后的脚本,现在它不只是记录相同的交易,而是按照指定的设置(寿命--从和到,利润--从和到)生成随机序列。
要想得到一个与我相似的文件,请以默认设置运行该脚本。
2014.08.28 04:12:36.044 sTest_ReadWriteBIN EURUSD,M15:140,000 secuences writown in57.1 sec
2014.08.28 04:13:20.688 sTest_ReadWriteBIN EURUSD,M15: 在44.0秒 内加载6632Mb(150.7 MB/sec)
之后,你就可以在上面计算出算法。
对于最懒的人来说,把文件存档在谷歌硬盘上。
komposter:
1.在原来的变体中,你可以在从通过的历史中找到最后一笔交易时计算一次标准。
在你的变体中,你需要读取这样一个文件,它将包含所有 序列的 X个交易。它将远远大于X*序列的数量,因为交易的数量不同,它们可能不是均匀分布的。
1 这一点不是很清楚,如果我们要寻找最大(最小)的标准,我们最后还是要计算所有候选人的标准。至于寻找的是局部还是全球的极端现象,这甚至并不重要。
2.显然,更多的是在所需的内存方面,可接受的尺寸或不可接受的问题。此外,就磁盘读取速度而言,更大的块大小在理论上甚至更好。当然,对RAM来说还不是问题。最重要的是,阅读要按顺序进行,而且只读一次。
然而,在排序前计算标准的变体需要阅读两次。但它也有自己的优势,特别是考虑到将数据分割成几个小文件并随后联合处理的可能性。
然而,如果没有实施,所有的论据都将是抽象的。因此,在讨论的这一点上,我将不得不离题 :)
如何对文件进行拼接,并对哪个位是哪个文件的开始和结束进行索引。
例如,将1000个文件做成1000个元文件,如果标准已知,则进行统计排序,将类似的文件装入一个元文件。
最好用FileOpen 做个实验,在打开一个大文件或一个小文件时,它的工作速度是怎样的,是打开1000次大文件等于1000次小文件还是打开1000000次小文件?
结果可能是,这些文件不应该被合并,而应该被分割。
如何对文件进行拼接,并对哪个位是哪个文件的开始和结束进行索引。
例如,将1000个文件做成1000个元文件,如果标准已知,就进行统计排序,将类似的文件装入一个元文件。
最好用FileOpen做个实验,在打开一个大文件或一个小文件时,它的工作速度是怎样的,是打开1000次大文件等于1000次小文件还是打开1000000次小文件?
结果可能是,文件不应该被合并,而应该被拆分。
我目前正在用一个大文件工作,但想去做一百万个小文件。
首先,它们可以被追加,其次,它们可以通过名称被访问(不需要存储 "每个序列的开始")。
我在服务台询问了关于不同文件的一百万次打开的问题(我以这种方式实现了高速缓存)。答案是明确而直接的。
我将对一个大文件和一百万个小文件测试api-function,我将公布结果。
然而,如果没有实现,所有的论据都将是抽象的。因此,在讨论的这个阶段,我退出是合适的 :)
我应该从它开始;)
但无论如何,感谢你的参与,没有代码的想法也是有价值的。
有了一百万个文件,你就会以这样的方式毁掉ntfs,你会从微软这个疯狂的创意中哭出来,它把每个人都永远锁在它疯狂的弱智的文件系统的实现中。
ms在他们的文件系统中所做的一切,都是畸形的重量、弱智和愚蠢的行为。糟糕的是,这些白痴没有做出任何努力来优化和提高速度,而且api也只是原始的。在2014年,这一点可以毫不含糊地说明。好了,哭了。
任何想提高在windows中处理一堆文件的效率的人,他们做的第一件事就是进入大块--在一个文件中进行分组和自己的数据结构。
一旦你开始在windows中存储超过一千(更不用说几万或几十万)个不同的文件,你就完蛋了。
MQL4/5中的文件操作通过我们非常有效的缓存机制,这使我们能够实现非常有效和高的读写速度。
你可以一个字节一个字节地流传数据--所有的数据将被迅速收集到内部缓冲区,并只以大块的形式写入磁盘。WinAPI调用的数量是最少的,这给了人们高速的操作。读取是类似的--它主动地工作,大块地读取,很少调用WinAPI,并以最小的开销非常迅速地从其缓存中回馈数据。
粗略地说,与Build 509相比,我们在MQL4/5中的文件操作速度提高了一个数量级(如果我们指的是基于块的常规操作,而不是 "按兆字节块写入以最大化速度测量")。