需要帮助!无法解决这个问题,我遇到了硬件限制 - 页 14

 
komposter:

...

有许多类似的交易序列,每个序列都是按时间排序的。

一个序列能不能装入内存?

你可以写一个专家顾问。开始时,专家顾问加载序列#(属性窗口中的参数)并在此序列上进行交易。优化№。

任务并不十分明确,而很多不同的事情都可以实施。

 
Integer:

一个序列能不能装入内存?

你可以写一个专家顾问。专家顾问在启动时加载序列号(属性窗口中的参数)并在此序列上进行交易。优化№。

任务并不十分明确,而很多不同的东西都可以被幻化。

如果我们有20Gb(21 474 836 480字节),有100万个序列,我们得到每个序列平均约21 475字节(~21Kb)。我认为它应该适合在内存中,甚至在手机中))。

О.顺便说一下,分布式计算怎么样? 我们也应该朝这个方向考虑...

 
我想他已经拿到了信号灯的历史文件)。
 

再次抱歉暂停,我一直在用RAM驱动器做实验(到目前为止不是很成功)。依次回复大家。

Candid:

但这些序列是相互独立的,对吗?那么,为什么我不能在一个单一加载的序列上一次性地循环查看日期呢?在这里,顺便说一下,只是可能有机会去找一些高效的递归算法,但这是运气好的时候。一百万上的大小将保持,文件将被读取一次。

当然,一个在下一次迭代中步骤数保持不变的问题(即搜索区域不会随着计算的进行而变窄)看起来并不十分稳健。但当然,这是很主观的。

独立的。那么如何在不把它们加载到内存中的情况下,一次进入所有序列的循环?

如果你想出如何从正确的地方(从当前分析的日期开始的最后X个交易)读取序列,那么步骤的数量可以减少。

Urain
整个基地是否适合10年线? 所有的文件都是累积的

每百万个序列有一个文件(为了方便,我把每个文件写成9行)。

嗯,或者一百万个文件,这并不重要。

ALXIMIKS

我对以下内容的理解是否正确。

1) 一个20gb的文件由大约一百万个按时间排序的序列组成

2) 每个序列的大小可能不同,取决于该序列包含的交易数量

3) 一个序列的平均大小为20/10^6=20Mb,那么我们能保证完全下载一个序列吗?

4) K系数只取决于给定序列中的交易。

5) 对于每一个序列,我们必须找到K(总共10^6块),并选择前10块

  1. 20K,我们可以保证
  2. 是的,一次运行使用一个固定设置的标准器。但在未来,我希望接下来的运行(改变了标准或其他设置)也能快速计算出来。
    在我有这样的体量之前,我只是把所有东西都下载到内存中,然后循环运行,计算我所需要的一切。
  3. 标准值是为序列中的每一笔交易计算的,从交易#X开始(这是计算需要的金额)。
    在历史的每一点上都应该选择最佳的序列(最佳的--在当前时刻具有最佳标准的序列,标准是用最后完成的交易计算的。

ALXIMIKS

如果我们创建另一个带有序列间距离值的文件,则A。

我不明白这个和下一个。

烛光
顺便说一下,是的,你可以一次加载成批的序列。

它不会保存,你需要所有的人。

沉默不语

我不明白它的地方。

这里是标准--所有--从Date1到Date2的区间中。

即,其内容如下。

为什么不把文件分成 Date1到Date2的许多区间?会有工作的序列可以被关闭,对吗?

区间 "Date1 - Date2 "目前涵盖所有序列的所有交易。

而把它分成几个小的想法是相当明智的。是的,那么你就必须在每次改变参数时从磁盘上读取信息......。但这是一件好事。

烛光
显然,单一日期通行证的结果之一是一个新的日期。

是的,但我认为你可以找到一个点,在这个点上,没有任何交易会有任何的序列,并做出一个突破。

然后会过渡到下一个区间。我会试一试的。

 
ALXIMIKS:

如果问题是这样。

给定一个行 1 2 3 4 5 6 7 8 9

宽度是给定的,例如4,你需要用这个宽度沿着整个行移动,找到宽度内的某个值(例如最小值)。

首先你必须找到1 2 3 4,然后2 3 4 5,然后3 4 5 6,然后4 5 6 7,然后....。等。

如果X(交易数量)是固定的(在你的例子中是4),并且没有其他参数--是的。因此--没有。

维宁
我将思考这项任务

条件已在上面 说明,欢迎加入我们的行列;)

营销人员
既然这个问题相当具有学术性(听起来像是一个雇用程序员的问题),而且很多人对它表现出兴趣,为什么不在输入数据描述格式方面更严格地制定它,每个人都能生成20G的测试数据并提交他们的实际解决方案?

没问题。

生成随机交易的序列(按时间顺序,甚至是1年),其所有属性:开盘日期和时间,开盘价,SL,TP,收盘日期和时间,收盘价。从1到100万的序列编号。

任务是在所有序列的所有交易中创建一个新的连续交易系列(时间上不重叠),并按一定的标准进行选择。

让标准是序列中最后20次交易的平均利润。

示例结果。

  1. 序列#250,交易#53,标准=51:2013.01.31 00:00 - 2013.02.12 12:30(标准是为交易#32-52计算的,即第53次没有被使用)。
  2. 序号1222,交易号28,标准=75:2013.02.13 10:00 - 2013.02.13 02:21
  3. 就这样一直到年底。

joo:
所以我认为我们在谈论的是一个自制的测试器/优化器?

是的,类似这样的事情。

sergeev:

不,那里有不同的东西。

我猜一些经纪人/供应商已经得到了交易数据库。:)

如果只是这样的话=)

sergeev:

我将用更简单的语言重复这项任务。

不,不是的。我举了一个具体的例子,它可以说是尽可能地接近真实的问题。

 
elugovoy:

数据库的典型。但如果不进行数据汇总,就没有办法做到这一点。你可以在一个单独的表格中写出一个序列的独特属性(c-date),利润K和方差D的平均值,然后寻找接近你所需要的标准的前10个序列。有了这些字段的索引,搜索不会花那么长时间(即使是一百万条记录)。然后,当你得到正确的10个序列时,你可以在原始数据中打探,但不会再有一百万次搜索,因为我们有一个日期限制。

如果 "标准 "是静态的...

如果它的参数发生变化怎么办?

elugovoy:

这仍然是一个谜--我们应该寻找什么? 所有操作的结果应该是什么?如果我们谈论的是在打开/关闭一个订单方面做出决定,任何处理这样的数量都需要相当大的时间。

是的,那么就会有一个交易。但重新计算只需要最新鲜的数据,我们不需要重新计算整个历史。

elugovoy:

还有一点。既然我们谈论的是交易,也许把每个符号的交易分开是有意义的?并编写为欧元兑美元、美元兑日元等设计的类似交易机器人。

它是一种乐器...

elugovoy:

在我看来,这样一来,你只能确定用于交易的某一序列的策略(或机器人的一组参数),并在某种市场情况下切换到它。

正是如此。

 
Integer:

一个序列能不能装入内存?

你可以写一个专家顾问。开始时,专家顾问加载序列号(属性窗口中的参数)并在此序列上交易。优化数量。

它将。

但我们不需要一个单一的(最终)结果,而是在每个时间点上。

基本上,我们可以通过给出序列号和日期作为参数来使用云计算,直到读取为止。但这几乎不比重新计算一个文件快)

elugovoy:

О.顺便说一下,分布式计算怎么样? 我们也应该朝这个方向考虑...

我们应该平行计算什么?标准对不同序列的价值?

但我们需要为此将它们加载到内存中。而且,如果它是从一个进程(专家顾问,终端)或从几个进程加载的,这并不重要。也许,我们可能会得到8(或12、16、20)而不是4Gb。但人们必须在事后将结果 "粘 "起来。

 
komposter:

我们应该把什么算作平行?不同序列的标准是什么意思?

这个想法是把所有的故事分成,比如说,100组,并为每组单独计算出最优集。

然后,对于每一组,我们将只留下那些在该组的最佳集合中的故事,并以较少的故事数量进入下一步。然后,从理论上讲,它平行于100次。

而且根据记忆,一切都很好,小组的大小可以调整。

 
TheXpert:

这个想法是把所有的故事分成,比如说,100组,并为每组单独计算出最优集。

然后,对于每一组,只留下最佳组别中的故事,并进入下一步,用更少的故事。然后,从理论上讲,它平行于100次。

而且根据记忆,一切都很好,小组的大小可以调整。

如果你平行加载100个零件,就没有足够的内存了=)

如果你按顺序加载(每次记忆一个最佳变体),那么并联在哪里呢?而且每次你到机器上时,该文件仍会被读取。

我认为有可能发明一个巧妙的部分装载机制,但必须要有发明。

例如,在第一次读取时,为每一个通道找到在开始日期之前关闭的最后一笔交易,回过头来读取之前的X笔交易,记住文件中该交易结束的点。

之后,在结果中找到第一笔交易,然后只用新鲜的数据工作:从所需的点到新的实际日期读取文件,每次在数组中转移交易(得到固定大小的数组--X元素)。

这将解决多读问题(根本不需要)和内存问题(只有当我们可以放置X百万个交易时)。

我将朝着这个方向前进。

 

顺便说一下,改成二进制文件后,在大小上几乎没有增加。

我优化的文本格式非常紧凑:日期被记忆了一次(第一笔交易的开盘),所有其他的(包括开盘和收盘)都被记忆为与前一个日期的偏移;SL、TP和PriceClose也被保存为与开盘价的偏移。

当我切换到二进制格式时,这种优化就没有意义了--以秒为单位的转移(uint)需要同样多的空间,就像完整的日期一样(我拒绝long-a,2030年对我来说足够了),但ushort是不够的(最大的转移只有18小时)。价格也是如此--我可以把偏移量移到ushort,但这样我就必须增加对溢出的检查(例如,如果SL=0),而且所有3个价格的收益只有6字节。决定不做了。

但我已经删除了一点不必要的信息,所以我已经得到了20%的信息。预计原始文件的大小(是20Gb)--7-8Gb,几个小时就能转换。

好吧,我也赢得了CPU时间,这是用在转换线路 上的。