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

 
komposter: 有这样一个文件,如何计算序列的最后X个交易的标准?


我们有一个文件的片段在我们的内存中,通过它并形成一个必要长度的样本来计算标准,只选择属于同一序列的交易。然后我们在这个样本上计算出标准。顺便说一下,在选择时有可能使用递归,按照想法。

还是我没有理解这个问题?

P.S. 当然,在形成样本时,我们必须在文件上往后走。

 
Candid:

我们有一个文件的片段在我们的内存中,通过它并形成一个必要长度的样本来计算标准,只选择交易,属于同一序列。然后我们在这个样本上计算出标准。顺便说一下,在选择时有可能使用递归,按照想法。

还是我误解了这个问题?

P.S. 当然,在形成样本时,我们必须在文件上往后走。

插入新数据的问题 - 以某种方式解决它。

如果去把白袜子扔到一个篮子里,把黑袜子扔到另一个篮子里,然后问谁在那里,数量多少,那就更容易了,为什么要多次去挑选白袜子呢?

 
komposter:

读取一个大块。块的大小是由截至寻找日期的交易数量决定的,这些交易是在一个特定的序列中。

顺便说一下,如果每个序列的起点是已知的,可以通过二进制搜索 来寻找所需的日期,因为交易是按时间排序的。
 
ALXIMIKS:

插入新数据的问题 - 以某种方式解决它。

为什么要经过多次选择白袜子,因为把白袜子扔到一个篮子里,把黑袜子扔到另一个篮子里,然后问谁在那里,数量是多少,这更容易。

太多的数据也是不好的 :)

问题是,在这里被选中的不是白人和黑人,而是那些在当地比较白的人。因此,计算全球的黑度并不能挽救。顺便说一下,我在这个主题中开始只是建议连续计算标准。

P.S.顺便说一下,没有人阻止一起处理一些文件--只是每个人的缓存要少做。但它似乎对缓存大小有保留。

也就是说,新的数据可以简单地累积到另一个文件中。

P.P.S.顺便说一下,把文件切成几个小文件,可以缓解分类的问题。

 
komposter:

1.如果 "标准 "是静态的...如果它的参数发生变化怎么办?

2.是的,那么就会有一个交易。但重新计算只需要最近的数据,没有必要撼动整个历史。

3.这是一个工具...

4.没错。

1.从我上面说的"让标准是序列中最后20次交易的平均利润。"这应该被理解为一个标准,对利润的期望值的移动。还有哪些人?

在数据库中,生成一个带有序列标识符和相应移动平均线 的表格。不符合条件的序列应立即删除。这应该由DBMS级别的并发模式程序完成,根据机器人的要求,在机器人中显示进程状态。

让我们说,FilterAvgProfit(pProfitValue,pTrades,pDeviation)。

其中pProfitValue是目标利润,pTrades是移动平均利润的交易数,pDeviation是pProfitValue的允许偏差。

结果是--用序列ID和利润的平均值填充表格。

同样,你可以为每个标准编写存储程序。

2.如果部分数据被丢弃(使用 "新鲜数据",而不是100万),将带来性能上的提升。

3.从声明中并不十分清楚。现在好了。

4.我理解,如果我们看的是一个策略选择,这个操作不应该太频繁(比如说,在每个柱子上或紧接着开单前)。这种方法是合理的,如果目前的策略显示连续N次亏损的交易--那么我们可以选择另一个策略,它需要时间来 "做决定",没有什么可避免的。或者,每周进行一次这样的选择(在周末,当市场关闭时),并且,或确认当前选择的策略,或传递到另一个策略。在给定的条件下,有可能为交易者制定一份最佳推荐策略清单。然后,当市场开盘后,在头脑清醒的情况下(周一),交易员将确认选择(或更早,在开盘前......电子邮件提醒等)。

像这样的地方。

 

Память выделяется однократно для массива структур последовательностей.

序列的结构包括:编号,序列所有交易的结构阵列[X],标准值,文件指针位置。

下一步只是填充结构中的元素(包括交易的数组)。阵列中的交易是移位的,所以内存中每个序列总是只有X个交易。

你为一个结构数组分配内存并获得。

阵列没有。

一个由序列[X]的所有交易结构组成的数组。

一个标准值的数组。

一个文件指针位置的数组。

为什么需要标准值阵列和 文件索引位置阵列?(你有没有想过储存一个标准器和最后的贸易?)

得到了它的权利。

第一遍--在从0到SeekDate的区间内搜索

然后找到最佳标准,FindDate=交易收盘时间+1

现在搜索从"交易收盘时间 "到SeekingDate的时间间隔?

而你需要在这个区间内有X次交易来计算每个序列的标准?

 
komposter:

分享我的研究结果。

二进制缓存文件的读取量为7529MB。

  • 从硬盘:212.3秒(35.46MB/秒)。
  • 从RAM磁盘:88.1秒(85.46MB/秒)。
虽然我有最普通的硬盘(虽然,内存也不快),但很难称得上是宇宙的差异。

结论:从RAM磁盘上读取大文件的速度提高了约2.5倍。

奇怪的结果。

下面是我们的工作服务器系统在负载下的情况。

  • 带SSD:每秒200Mb,NTFS
  • 含RAM:2000-2500Mb/秒,FAT32,Softperfect RAM Disk 3.4.5

如果没有RAM磁盘,建立项目 的时间就会延长许多倍。

 
Renat:

奇怪的结果。

下面是我们的生产服务器系统在负载下的情况。

  • 带SSD:每秒200Mb,NTFS
  • 含RAM:2000-2500Mb/秒,FAT32,Softperfect RAM Disk 3.4.5

如果没有RAM磁盘,建立项目的时间就会延长许多倍。

这就是我所说的--你必须大块地读取大文件,否则小文件可能需要10倍的时间。
 
papaklass:

在我看来,问题的解决方案在于对原始数据进行编码。

如果你不能逃脱多次读取原始数据的命运,你需要将其转换为可接受的格式,以便多次读取。

一个可能的选择是将每条记录转换为16位数字。原始记录的每一个字段都应该被分配一个特定的数字位数。比如说。

数字的最有效数字。

- "0 "表示负的交易结果

- "1 "表示一个交易的积极结果。

数字的下位数。

- "0 "表示买入交易。

- "1 "意味着卖出交易。

等等。

因此,与其重复读取一个有许多字段的源文件,不如将工作减少到重复读取一个数字字段,这应该会带来显著的速度提升。

总的来说,源文件可以立即以编码格式生成,尽管其中的信息,将以非视觉形式出现。

但不是在 "16位",而是在64位,安德鲁有一个x64处理器,所以访问内存时的最小体积单位是64位。即使你从内存中读取一个字节,处理器仍然会读取8个字节(两个双字)。

 
komposter:

是的,在这种形式下,任务是并行的--每次SeekDate 改变时,你可以在序列集的不同部分上同时运行最佳标准的搜索例如,我们把它们分成20个部分,把任务交给20个专家顾问。而他们应该读取文件,找到交易,并只发回最佳序列(№№,标准和文件位置)。

非常感谢您!

你去那里,另一件事))。