MT5 RAM-Speicherüberfluss, Probleme beim Lesen/Schreiben großer Dateien - Seite 4

 
Maxim Dmitrievsky:

Versuchen Sie, Ihre Datei wie folgt zu lesen

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

Ich habe im Moment keine Zeit, das Terminal zu öffnen, vielleicht morgen).

Es heißt also"aus einer Binärdatei", woher soll ich eine bekommen?

Ich werde auf "morgen" warten :)
 
Aleksey Vyazmikin:

Es heißt also"aus einer Binärdatei", woher bekomme ich eine?

Ich werde auf "morgen" warten :)

Woher bekommen Sie es?

 
Maxim Dmitrievsky:

Woher bekommen Sie es?

In diesem speziellen Fall wird die Datei aus anderen CSV-Dateien in Excel zusammengeklebt. In diesem speziellen Fall wurden die Dateien ursprünglich von MT5 generiert.

 
Aleksey Vyazmikin:

In diesem speziellen Fall wird die Datei aus anderen CSV-Dateien in Excel zusammengeklebt. In diesem speziellen Fall wurde er ursprünglich von MT5 generiert.

Schreiben Sie also die Binärdatei von mt5 ein. Ist es ein Array? Schreiben Sie das Array einfach auf einmal in die Datei und laden Sie es später

 

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Merkmale der Sprache mql5, Feinheiten und Tricks

fxsaber, 2018.04.06 17:08

Wahrscheinlich tun das nicht viele Leute, deshalb hier
// Заполнение массива строками из файла - классика
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);
}
Ich selbst benutze die zweite Möglichkeit, wenn ich etwas raspeln muss. Wahrscheinlich geht es auch schneller, ich habe es nicht getestet.

Als Benchmark sind folgende Indikatoren möglich

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Skripte: ThirdPartyTicks

fxsaber, 2018.04.18 23:10

Analysiert (ZIP+CSV) mit drei Millionen Ticks pro Sekunde. Das muss schnell gehen.

Mehr als 3GB ZIP (>> 10GB CSV) verarbeite ich ohne Probleme, es könnte also durchaus funktionieren.

 

Das CSV-Parsing selbst sollte aus etwa 10 Zeilen bestehen. Eine ganze Klasse ist in diesem Fall gar nicht nötig.

Die Aufgabe ist selbst für einen Anfänger in der Programmierung sehr einfach. Was mit den Daten nach dem Lesen aus der Datei geschieht, ist die nächste Aufgabe, die nur der Programmierer versteht.

Alexey, stellen Sie einen Programmierer ein oder beginnen Sie ein richtiges Studium der Programmierung. Andernfalls verschwenden Sie Geld für Kurse, die Sie nicht nutzen können. Es ist sinnlos, ohne Programmiererfahrung etwas verdienen zu wollen.

P.S.

Berühren Sie Renat nicht. Er hat in diesem Bereich nichts zu tun. Er muss die Optimierung vornehmen.

 
Maxim Dmitrievsky:

Schreiben Sie also die Binärdatei von mt5 ein. Ist es ein Array? Schreiben Sie das Array einfach auf einmal in die Datei und laden Sie es später.

Es gibt viele Spalten, jede Spalte ist ein eigenes Array.

 
fxsaber:

Als Richtwert sind folgende Zahlen möglich

Mehr als 3GB ZIP (>> 10GB CSV) verarbeite ich ohne Probleme, es kann also durchaus gut funktionieren.

Danke. Es ist klar, wie man Zeilen in ein Array schreibt, aber ich möchte auch mit Spalten arbeiten. Es wird angenommen, dass nach dem Aufruf der Zeilennummer aus dem Array, müssen Sie einige zusätzliche Parsing zu tun, um die Spalten zu finden, aber wie es zu tun?

 
Aleksey Vyazmikin:

Es gibt viele Spalten, jede Spalte ist ein eigenes Array.

Es handelt sich also um ein 2-dimensionales Array, eine Matrix. Schreiben Sie es

 
Roffild:

Das CSV-Parsing selbst sollte aus etwa 10 Zeilen bestehen. Eine ganze Klasse ist in diesem Fall gar nicht nötig.

Die Aufgabe ist selbst für einen Anfänger in der Programmierung sehr einfach. Was mit den Daten nach dem Lesen aus der Datei geschieht, ist die nächste Aufgabe, die nur der Programmierer versteht.

Alexey, stellen Sie einen Programmierer ein oder beginnen Sie ein richtiges Studium der Programmierung. Andernfalls verschwenden Sie Geld für Kurse, die Sie nicht nutzen können. Es ist sinnlos, ohne Programmiererfahrung etwas verdienen zu wollen.

P.S.

Berühren Sie Renat nicht. Er hat in diesem Bereich nichts zu tun. Er muss die Optimierung in Ordnung bringen.

Ich benutze es schon seit etwa 3 Jahren, seit MT4; es ist praktisch, aber verdammt langsam.

Natürlich ist es einfach, eine Zeichenkette zu lesen, aber sie in eine funktionierende Zellstruktur zu verwandeln, ist viel schwieriger.

Was meinen Sie damit, dass ich keine Klassen verwenden kann? Ich schon, und außerdem hat der Mitarbeiter von metaquote den Kurs geschrieben. Und dann habe ich tatsächlich eine Person eingestellt, bezahlt und erwartet, ein fertiges Produkt zu bekommen, aber mir wurde gesagt, dass es in Ordnung ist, langsam zu sein... Ich habe ihnen geglaubt, aber jetzt habe ich die Erinnerung über Bord geworfen.