需要帮助!无法解决这个问题,我遇到了硬件限制 - 页 11 1...456789101112131415161718...21 新评论 Yuriy Zaytsev 2014.08.18 14:29 #101 elugovoy:Yurichik,我的意思是不对文件处理、压缩等进行任何摆弄。纯粹用SQL和机器人/指示器逻辑工作。我与许多数据库合作,唯一的问题是使MQL和SQL一起工作))。 我创建了一个漂亮 的解决方案,没有数组和结构。一般来说,我不喜欢重新发明轮子,而是用最好的手段解决问题。Zhenya 是的,我得到了你...这正是我所喜欢的...特别是在有专业工具的情况下...最好能很好地 整合... Andrey Khatimlianskii 2014.08.19 05:41 #102 多么好的讨论啊!感谢大家的参与!我将一并回复大家,尽量不遗漏任何东西(和任何人)。1. Перейти на x64我花了一段时间才意识到,我没有指定终端的版本。我正在使用4,我还不打算把这个EA迁移到5。不幸的是,MT4只有32位。取消32位Windows 8 / 8.1的4GB内存限制 不会有帮助,我的系统是x64的。2.切割成片/分片阅读/装载小块。这对任务的条件来说是行不通的。我试着在下面给出更多的细节,也许这能让人更好地理解这个问题。3.购买更多的内存/租用强大的服务器或云端/将所有的东西转移到SSD上我当然会在可用的插槽中再放16GB的内存,但这并不是答案。这个量不是极限,扩大容量只能解决问题的一个特殊情况。我认为只有在确定是100%的算法挤压的情况下才应该采用这种方法。4.压缩数据这就是我现在正在做的事情。文本缓存(20GB)被压缩了2倍,而且可能还会再被压缩一些。 它没有解决内存大小的问题,但它更接近于其他一些解决方案(RAM磁盘)。我也会把它转换为二进制,这样可以加快阅读速度,减少音量。目前还不清楚http://www.nanex.net/historical.html的向导是如何 压缩数据的。他们的数据结构是相当多余的。5.在使用前对数据进行压缩/编码,并对所需的块进行解压/解密作为一个选项被接受。但直觉告诉我,这也需要很长的时间(这里我们会被处理器拖累)。6.将计算转移到一个外部程序(Matlab/R/等)。我不想这样做,有很多原因。除非是在与MT环境良好整合的情况下。但这仍然需要时间来学习软件/环境和/或向第三方开发商订购解决方案。在发展阶段(我就是这样),这很不方便,而且成本很高。无论如何,现在试图留在沙盒里,它的所有优点和缺点。7.创建索引文件并与索引一起工作我不明白这能有什么帮助。仍然要反复从主文件中检索数据(不断重读)。8.使用一个数据库一个非常诱人的选择,鉴于此。可扩展性和可移植性(你可以租一台服务器或只是连接一台邻近的PC)。自动化和良好的工作流程,否则,许多过程必须在皱褶上手动完成。和其他好处。但也有一些弊端。对我来说,这是一个相对较新的环境(还没有严格的工作,只有基本的查询)。在单一客户机上安装的复杂性(独立版本)。可能是别的东西。 总之,如果其他选择不奏效,我可能会回到这个地方。9.理解并测试新的和晦涩的术语这只是对自己未来的说明和/或对作者更多信息的要求;)未公开的:文件映射,基于哈希的解决方案,B树。10.将带有所有缓存的终端移到虚拟RAM盘上到目前为止,这是最有希望的(就成本/效益比而言)选择。安装了SoftPerfect的RAM Disk,我将完成缓存压缩,将计算器改写为永久文件读取,并检查性能。11.把握好任务 =)非常好的建议,特别是考虑到输入信息的匮乏。按照承诺,我将努力提供更多细节。有许多类似的交易序列,每个序列都是按时间排序的。不同序列中的交易是不同的,并且在时间上分布不均(在每个序列中的方式也不同)。交易的数量是不同的。但所有这些都是在从Date1到Date2的区间内。任务是以M分钟的步幅从D1移动到D2(或者更好--完全按所有序列的交易点数),找到一个按标准K比其他序列更好的序列(一个单独的任务--不仅要找到最好的序列,而且要按标准对整个集合进行排序并输出前10名--但这是一个可选项,还不是必须的)。标准K的计算是基于相应序列的X个先前交易,几乎所有关于X个交易的信息都被用于计算(例如,仅有利润是不够的)。标准(K)、交易数量(X)和其他影响结果的参数由用户改变。也就是说,它们不能被 "写入 "算法中。类似这样的事情。在理念上,我们可以对文件进行重组,使其对所有序列的所有交易都是线性的。但是,如果不把所有的信息放入记忆中,怎么能做到这一点?然后,如果一个序列的交易将被 "涂抹 "到整个文件中,我怎么能重新计算标准?现在,希望任务是明确的。再次,非常感谢你们的参与、讨论、问题、链接和具体答复。TheXpert,Urain,sergeev,elugovoy,anonymous,meat,ALXIMIKS,IvanIvanov,Integer,C-4,marketeer,barabashkakvn,Silent,GT788,papaklass,grizzly_v,artemiusgreat,YuraZ,Candid,Contender andserver谢谢你! Need help! Can't solve Yuriy Zaytsev 2014.08.19 06:10 #103 komposter:多么好的讨论啊!感谢大家的参与!....考虑到这是一个非常诱人的选择。可扩展性和可移植性(你可以租一台服务器,或只是连接一个邻近的PC)。许多过程的自动化和良好的工作流程,否则这些过程必须在膝盖处手动完成。和其他好处。但也有一些弊端。对我来说,这是一个相对较新的环境(还没有严格的工作,只有基本的查询)。在单一客户机上安装的复杂性(独立版本)。可能是别的东西。 一般来说,如果其他选项不成功,我可能会回到这个选项。如果我们往SQL的方向走对我来说是一个相对陌生的环境(没有仔细工作过,只有基本的查询)。这可能是学习曲线上的一个相当大的阻力。如果你选择这种变体,最好用存储程序来构建所有的业务逻辑专家顾问只留下两个功能--向服务器发送请求,并获得一个完全完成的结果服务器上的所有计算结果在单一客户机上安装的复杂性(独立版本)。事实上,网络上可以找到很多关于如何将SQL服务器( ORACL, SYBASE + CENTOS为例) ORACL, SYBASE, MS SQL+WINDOWS独立机器ORACL有点难学--专家少,文献少。MS SQL - 也许是网络上最大的信息量和更多的文献。不会有任何困难--网上有许多描述,商店里有更多的书。MSSQL 2012的参数与ORACL非常接近--在2014年已经如此。SQL + LINUX通常被选择用于生产环境中的操作 - 如果你对LINUX一无所知,最好使用WINDOWS。 Nikolay Likhovid 2014.08.19 08:47 #104 komposter:有许多类似的交易序列,每个序列都是按时间排序的。不同序列中的交易是不同的,在时间上分布不均(在每个序列中以不同的方式)。交易的数量是不同的。但所有这些都是在从Date1到Date2的区间内。任务是以M分钟的步幅从D1移动到D2(或者更好--完全按所有序列的交易点数),找到一个按标准K比其他序列更好的序列(一个单独的任务--不仅要找到最好的序列,而且要按标准对整个集合进行排序并输出前10名--但这是一个可选项,还不是必须的)。标准K的计算是基于相应序列的X个先前交易,几乎所有关于X个交易的信息都被用于计算(例如,仅有利润是不够的)。标准(K)、交易数量(X)和其他影响结果的参数由用户改变。也就是说,它们不能被 "写入 "算法中。类似这样的事情。在理念上,我们可以对文件进行重组,使其对所有序列的所有交易都是线性的。但是,如果不把所有的信息放入记忆中,怎么能做到这一点?然后,如果一个序列的交易将被 "涂抹 "到整个文件中,我怎么能重新计算标准?现在,我希望,任务是明确的。传统上,我在早上会放慢速度 :)。 一个序列能不能在内存中装下,还是已经出现了问题? 如果是前者,什么时候会发生从磁盘的多次读取,当用户改变标准和参数时? 如果是的话,是通过某种算法还是根据某种主观理由手动改变的? Andrey Khatimlianskii 2014.08.19 10:21 #105 Candid:传统上,我在早上会放慢速度 :)。 一个序列能不能在内存中装下,还是已经出现了问题? 如果是前者,什么时候会发生从磁盘的多次读取,当用户改变标准和参数时? 如果是的话,是通过某种算法还是根据某种主观理由手动改变的?一百万个序列。然后在每一个人中找到一个有正确日期的点,并对以前的历史进行分析。并选择最好的序列。然后转到 "故事 "的下一个点。 Stanislav Korotky 2014.08.19 10:21 #106 我认为,如果你不想麻烦终端用户安装DBMS,那么可以选择综合几个(十几个)典型的K标准(例如,称其为保守交易、激进交易等),并实际将其放入算法中,对所有序列计算一次所选指标在时间上的变化,然后用一维向量工作。 Andrey Khatimlianskii 2014.08.19 10:41 #107 marketeer: 我认为,如果你不想麻烦终端用户安装DBMS,你可以综合几个(十几个)典型的K标准(例如,称它们为保守交易、激进交易等),并实际将它们保存在算法中,对所有序列计算一次所选指标在时间上的变化,然后用一维向量工作。比方说,只有2个标准。但有几个参数设置了标准,而且每个参数都可以取不同的值。即使我们非常粗略地对每个参数取几个值,我们也不会得到一个一维的向量,而是一个3或4维的数组。那么内存肯定是不够的=) Nikolay Likhovid 2014.08.19 11:20 #108 komposter:一百万个序列。然后在每一个人中找到一个有正确日期的点,并对以前的历史进行分析。并选择最好的序列。然后转到 "故事 "的下一个点。整个序列被加载到内存中。然后它 "找到具有所需日期的点并分析以前的历史"。标准值与取得的最佳效果进行比较。如果更好的话,就会记住最佳序列的标准和要知道的内容。然后,下一个序列被加载,以取代已处理的序列。如此反复无数次。文件是按顺序读取的,而且只读一次。 有什么问题吗? Andrey Khatimlianskii 2014.08.19 11:25 #109 Candid:整个序列被加载到内存中。然后,它 "找到具有正确日期的点并分析以前的历史"。标准值与取得的最佳效果进行比较。如果更好的话,要记住的标准和要知道的最好的序列是什么。然后,下一个序列被加载,以取代已处理的序列。如此反复无数次。文件是按顺序读取的,而且只读一次。 怎么了?这就对了。然后,"正确的日期 "被所选序列的交易结束点所转移,并且该算法会重复进行。以此类推,再来一百万次 =) Nikolay Likhovid 2014.08.19 11:50 #110 komposter:它是这样的。然后,"正确的日期 "被选定的序列中的交易收盘点移位,并重复该算法。以此类推,再来一百万次 =)但这些序列是相互独立的,对吗?那么,为什么我们不能在一个加载的序列上一次做一个日期的循环?在这里,顺便说一下,只是可能有机会去找一些高效的递归算法,但这是运气好的时候。一百万上的大小将保持,文件将被读取一次。当然,一个在下一次迭代中步骤数保持不变的问题(即搜索区域不会随着计算的进行而变窄)看起来并不十分稳健。但这是主观的,当然。 1...456789101112131415161718...21 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
Yurichik,我的意思是不对文件处理、压缩等进行任何摆弄。纯粹用SQL和机器人/指示器逻辑工作。我与许多数据库合作,唯一的问题是使MQL和SQL一起工作))。 我创建了一个漂亮 的解决方案,没有数组和结构。
一般来说,我不喜欢重新发明轮子,而是用最好的手段解决问题。
Zhenya 是的,我得到了你...
这正是我所喜欢的
...特别是在有专业工具的情况下...最好能很好地 整合...
多么好的讨论啊!感谢大家的参与!
我将一并回复大家,尽量不遗漏任何东西(和任何人)。
1. Перейти на x64
我花了一段时间才意识到,我没有指定终端的版本。我正在使用4,我还不打算把这个EA迁移到5。不幸的是,MT4只有32位。
取消32位Windows 8 / 8.1的4GB内存限制 不会有帮助,我的系统是x64的。
2.切割成片/分片阅读/装载小块。
这对任务的条件来说是行不通的。
我试着在下面给出更多的细节,也许这能让人更好地理解这个问题。
3.购买更多的内存/租用强大的服务器或云端/将所有的东西转移到SSD上
我当然会在可用的插槽中再放16GB的内存,但这并不是答案。
这个量不是极限,扩大容量只能解决问题的一个特殊情况。
我认为只有在确定是100%的算法挤压的情况下才应该采用这种方法。
4.压缩数据
这就是我现在正在做的事情。
文本缓存(20GB)被压缩了2倍,而且可能还会再被压缩一些。
它没有解决内存大小的问题,但它更接近于其他一些解决方案(RAM磁盘)。
我也会把它转换为二进制,这样可以加快阅读速度,减少音量。
目前还不清楚http://www.nanex.net/historical.html的向导是如何 压缩数据的。他们的数据结构是相当多余的。
5.在使用前对数据进行压缩/编码,并对所需的块进行解压/解密
作为一个选项被接受。
但直觉告诉我,这也需要很长的时间(这里我们会被处理器拖累)。
6.将计算转移到一个外部程序(Matlab/R/等)。
我不想这样做,有很多原因。
除非是在与MT环境良好整合的情况下。但这仍然需要时间来学习软件/环境和/或向第三方开发商订购解决方案。在发展阶段(我就是这样),这很不方便,而且成本很高。
无论如何,现在试图留在沙盒里,它的所有优点和缺点。
我不明白这能有什么帮助。
仍然要反复从主文件中检索数据(不断重读)。
8.使用一个数据库
一个非常诱人的选择,鉴于此。
但也有一些弊端。
- 对我来说,这是一个相对较新的环境(还没有严格的工作,只有基本的查询)。
- 在单一客户机上安装的复杂性(独立版本)。
- 可能是别的东西。
总之,如果其他选择不奏效,我可能会回到这个地方。9.理解并测试新的和晦涩的术语
这只是对自己未来的说明和/或对作者更多信息的要求;)
未公开的:文件映射,基于哈希的解决方案,B树。
10.将带有所有缓存的终端移到虚拟RAM盘上
到目前为止,这是最有希望的(就成本/效益比而言)选择。
安装了SoftPerfect的RAM Disk,我将完成缓存压缩,将计算器改写为永久文件读取,并检查性能。
11.把握好任务 =)
非常好的建议,特别是考虑到输入信息的匮乏。
按照承诺,我将努力提供更多细节。
有许多类似的交易序列,每个序列都是按时间排序的。
不同序列中的交易是不同的,并且在时间上分布不均(在每个序列中的方式也不同)。交易的数量是不同的。但所有这些都是在从Date1到Date2的区间内。
任务是以M分钟的步幅从D1移动到D2(或者更好--完全按所有序列的交易点数),找到一个按标准K比其他序列更好的序列(一个单独的任务--不仅要找到最好的序列,而且要按标准对整个集合进行排序并输出前10名--但这是一个可选项,还不是必须的)。
标准K的计算是基于相应序列的X个先前交易,几乎所有关于X个交易的信息都被用于计算(例如,仅有利润是不够的)。
标准(K)、交易数量(X)和其他影响结果的参数由用户改变。也就是说,它们不能被 "写入 "算法中。
类似这样的事情。
在理念上,我们可以对文件进行重组,使其对所有序列的所有交易都是线性的。
但是,如果不把所有的信息放入记忆中,怎么能做到这一点?然后,如果一个序列的交易将被 "涂抹 "到整个文件中,我怎么能重新计算标准?
现在,希望任务是明确的。
再次,非常感谢你们的参与、讨论、问题、链接和具体答复。
TheXpert,Urain,sergeev,elugovoy,anonymous,meat,ALXIMIKS,IvanIvanov,Integer,C-4,marketeer,barabashkakvn,Silent,GT788,papaklass,grizzly_v,artemiusgreat,YuraZ,Candid,Contender andserver
谢谢你!
多么好的讨论啊!感谢大家的参与!
....考虑到这是一个非常诱人的选择。
但也有一些弊端。
- 对我来说,这是一个相对较新的环境(还没有严格的工作,只有基本的查询)。
- 在单一客户机上安装的复杂性(独立版本)。
- 可能是别的东西。
一般来说,如果其他选项不成功,我可能会回到这个选项。如果我们往SQL的方向走
这可能是学习曲线上的一个相当大的阻力。
如果你选择这种变体,最好用存储程序来构建所有的业务逻辑
专家顾问只留下两个功能--向服务器发送请求,并获得一个完全完成的结果
服务器上的所有计算结果
事实上,网络上可以找到很多关于如何将SQL服务器
( ORACL, SYBASE + CENTOS为例) ORACL, SYBASE, MS SQL+WINDOWS独立机器
ORACL有点难学--专家少,文献少。
MS SQL - 也许是网络上最大的信息量和更多的文献。
不会有任何困难--网上有许多描述,商店里有更多的书。
MSSQL 2012的参数与ORACL非常接近--在2014年已经如此。
SQL + LINUX通常被选择用于生产环境中的操作 - 如果你对LINUX一无所知,最好使用WINDOWS。
komposter:
有许多类似的交易序列,每个序列都是按时间排序的。
不同序列中的交易是不同的,在时间上分布不均(在每个序列中以不同的方式)。交易的数量是不同的。但所有这些都是在从Date1到Date2的区间内。
任务是以M分钟的步幅从D1移动到D2(或者更好--完全按所有序列的交易点数),找到一个按标准K比其他序列更好的序列(一个单独的任务--不仅要找到最好的序列,而且要按标准对整个集合进行排序并输出前10名--但这是一个可选项,还不是必须的)。
标准K的计算是基于相应序列的X个先前交易,几乎所有关于X个交易的信息都被用于计算(例如,仅有利润是不够的)。
标准(K)、交易数量(X)和其他影响结果的参数由用户改变。也就是说,它们不能被 "写入 "算法中。
类似这样的事情。
在理念上,我们可以对文件进行重组,使其对所有序列的所有交易都是线性的。
但是,如果不把所有的信息放入记忆中,怎么能做到这一点?然后,如果一个序列的交易将被 "涂抹 "到整个文件中,我怎么能重新计算标准?
现在,我希望,任务是明确的。
传统上,我在早上会放慢速度 :)。
一个序列能不能在内存中装下,还是已经出现了问题?
如果是前者,什么时候会发生从磁盘的多次读取,当用户改变标准和参数时?
如果是的话,是通过某种算法还是根据某种主观理由手动改变的?
传统上,我在早上会放慢速度 :)。
一个序列能不能在内存中装下,还是已经出现了问题?
如果是前者,什么时候会发生从磁盘的多次读取,当用户改变标准和参数时?
如果是的话,是通过某种算法还是根据某种主观理由手动改变的?
一百万个序列。
然后在每一个人中找到一个有正确日期的点,并对以前的历史进行分析。
并选择最好的序列。
然后转到 "故事 "的下一个点。
我认为,如果你不想麻烦终端用户安装DBMS,你可以综合几个(十几个)典型的K标准(例如,称它们为保守交易、激进交易等),并实际将它们保存在算法中,对所有序列计算一次所选指标在时间上的变化,然后用一维向量工作。
比方说,只有2个标准。
但有几个参数设置了标准,而且每个参数都可以取不同的值。
即使我们非常粗略地对每个参数取几个值,我们也不会得到一个一维的向量,而是一个3或4维的数组。
那么内存肯定是不够的=)
一百万个序列。
然后在每一个人中找到一个有正确日期的点,并对以前的历史进行分析。
并选择最好的序列。
然后转到 "故事 "的下一个点。
整个序列被加载到内存中。然后它 "找到具有所需日期的点并分析以前的历史"。标准值与取得的最佳效果进行比较。如果更好的话,就会记住最佳序列的标准和要知道的内容。然后,下一个序列被加载,以取代已处理的序列。如此反复无数次。
文件是按顺序读取的,而且只读一次。
有什么问题吗?
整个序列被加载到内存中。然后,它 "找到具有正确日期的点并分析以前的历史"。标准值与取得的最佳效果进行比较。如果更好的话,要记住的标准和要知道的最好的序列是什么。然后,下一个序列被加载,以取代已处理的序列。如此反复无数次。
文件是按顺序读取的,而且只读一次。
怎么了?
这就对了。
然后,"正确的日期 "被所选序列的交易结束点所转移,并且该算法会重复进行。
以此类推,再来一百万次 =)
它是这样的。
然后,"正确的日期 "被选定的序列中的交易收盘点移位,并重复该算法。
以此类推,再来一百万次 =)
但这些序列是相互独立的,对吗?那么,为什么我们不能在一个加载的序列上一次做一个日期的循环?在这里,顺便说一下,只是可能有机会去找一些高效的递归算法,但这是运气好的时候。一百万上的大小将保持,文件将被读取一次。
当然,一个在下一次迭代中步骤数保持不变的问题(即搜索区域不会随着计算的进行而变窄)看起来并不十分稳健。但这是主观的,当然。