MT5 RAM内存贪婪,读/写大文件的问题 - 页 4

 
Maxim Dmitrievsky:

试着像这样读取你的文件

https://www.mql5.com/ru/docs/files/filereadarray

我现在没有时间打开终端,也许明天吧)。

所以它读取的是"来自二进制文件",我在哪里可以得到一个?

我将等待 "明天" :)
 
Aleksey Vyazmikin:

所以它读作"来自二进制文件",我在哪里可以得到一个?

我将等待 "明天" :)

你从哪里得到它?

 
Maxim Dmitrievsky:

你从哪里得到它?

在这种特殊情况下,该文件是由Excel中的其他CSV文件粘连而成的。这些文件最初是由MT5生成的,在这种特殊情况下。

 
Aleksey Vyazmikin:

在这种特殊情况下,该文件是由Excel中的其他CSV文件粘连而成的。它最初是由MT5生成的,在这个特定的情况下。

因此,从mt5写进二进制。它是一个数组吗?只需一次将数组写入文件中,然后再加载它

 

关于交易、自动交易系统和交易策略测试的论坛

mql5语言的特点、微妙之处以及技巧

fxsaber, 2018.04.06 17:08

可能没有多少人这样做,所以这里
// Заполнение массива строками из файла - классика
int FileToStrings( const string FileName, string &Str[] )
{
  ArrayResize(Str, 0);

  const int handle = FileOpen(FileName, FILE_READ | FILE_ANSI );
  
  if (handle != INVALID_HANDLE)
  {
    while (!FileIsEnding(handle))
      Str[ArrayResize(Str, ArraySize(Str) + 1) - 1] = FileReadString(handle);
    
    FileClose(handle);
  }
  
  return(ArraySize(Str));
}

// Заполнение массива строками из файла - альтернатива
int FileToStrings2( const string FileName, string &Str[] )
{
  uchar Bytes[];
  
  return(FileLoad(FileName, Bytes) ? StringSplit(CharArrayToString(Bytes), '\n', Str) : 0);
}

void OnStart()
{
  const string FileName = "Test.txt";
  
  string Str[];  
  FileToStrings(FileName, Str);

  string Str2[];  
  FileToStrings2(FileName, Str2);
  
  ArrayPrint(Str);
  ArrayPrint(Str2);
}
我自己在需要研磨东西的时候使用第二种方法。可能也能更快地工作,没有测试过。

作为一个基准,可能的指标是

关于交易、自动交易系统和交易策略测试的论坛

脚本:ThirdPartyTicks

fxsaber, 2018.04.18 23:10

以每秒300万次的速度解析(ZIP+CSV)。这一定是很快的。

超过3GB的ZIP(>>10GB的CSV)我处理起来没有问题,所以它肯定可以很好地工作。

 

CSV解析本身应该包括大约10行。在这种情况下,根本不需要整个班级。

即使对于编程初学者 来说,这项任务也非常简单。从文件中读取数据后会发生什么是下一个任务,只有程序员才了解。

阿列克谢,雇用一个程序员或开始适当的编程研究。否则,你将在你无法使用的课程上浪费金钱。没有编程经验就想挣钱是毫无意义的。

P.S.

不要接触雷纳特。他在这个问题上没有什么可做的。他必须修复优化。

 
Maxim Dmitrievsky:

因此,从mt5写进二进制。它是一个数组吗?只要一次把数组写到文件里,以后再加载。

有很多列,每一列都是一个独立的数组。

 
fxsaber:

作为一个基准,以下数字是可能的

超过3GB的ZIP(>>10GB的CSV)我处理起来没有任何问题,所以它绝对可以工作得相当好。

谢谢。如何将行写入数组是很清楚的,但我也想处理列的问题。按理说,从数组中调用行号后,你需要做一些额外的解析来寻找列,但如何做呢?

 
Aleksey Vyazmikin:

有很多列,每一列都是一个独立的数组。

所以它是一个二维数组,一个矩阵。写吧

 
Roffild:

CSV解析本身应该包括大约10行。在这种情况下,根本不需要整个班级。

即使对于编程初学者 来说,这项任务也非常简单。从文件中读取数据后会发生什么是下一个任务,只有程序员才了解。

阿列克谢,雇用一个程序员或开始适当的编程研究。否则,你将在你无法使用的课程上浪费金钱。没有编程经验就想挣钱是毫无意义的。

P.S.

不要接触雷纳特。他在这个问题上没有什么可做的。他需要解决优化问题。

从MT4开始,我已经用了大约3年了。 它很方便,但真的很慢。

当然,读懂一个字符串很容易,但把它全部变成一个工作的细胞结构就难多了。

你说我不能使用班级是什么意思?我是这样想的,况且,元气满满的员工写了这个班。然后,我真的雇了一个人,付了钱,并期望得到一个成品,但有人告诉我,慢一点也没关系......。我相信他们,但现在我的记忆力已经过剩了。