Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 174

 
mila.com:

Hallo.

Bitte helfen Sie mir, Daten aus einer Datei als Histogramm anzuzeigen.

In der Datei "file.txt" entspricht ein Datum einer Zahl, etwa so:

29.03.2017. 574391

30.03.2017. 741308

31.03.2017. 614367

Ich hole die Daten aus der Datei und drucke sie aus, etwa so:


Histogramm nach Balkengröße, damit es wie ein Indikator aussieht )

Sie geben die Daten also in den Grafikpuffer ein, nicht in den Ausdruck. Bestimmen Sie das Datum, ab dem das Histogramm gezeichnet werden soll, und legen Sie die Daten dort ab.
 
-Aleks-:

Sie geben die Daten also in den Grafikpuffer und nicht an den Drucker weiter. Bestimmen Sie das Datum, ab dem das Histogramm aufgezeichnet werden soll, und legen Sie die Daten dort ab.

Das ist die Schwierigkeit.

Ich habe es ausgedruckt, um zu verdeutlichen, dass ich die Daten aus der Datei im Allgemeinen erhalte.

Ich kann nicht herausfinden, wie ich sie den entsprechenden Daten zuordnen kann.

 
mila.com:

Das ist die Schwierigkeit.

Ich habe es ausgedruckt, um zu verdeutlichen, dass ich die Daten aus der Datei im Allgemeinen erhalte.

Ich kann nicht herausfinden, wie ich sie den entsprechenden Daten zuordnen kann.

Nehmen Sie das Datum aus der Datei, suchen Sie die Strichnummer aus dem Datum und zeichnen Sie sie ein...
 
Alexey Viktorov:
Nehmen Sie das Datum aus der Datei, suchen Sie die Strichnummer aus dem Datum und zeichnen Sie sie ein...

Wie genau machen Sie das?

Zeigen Sie es mir bitte.

 
mila.com:

Wie genau machen Sie das?

Bitte zeigen Sie es mir.

Verwenden Sie String-Funktionen. Insbesondere

string  StringSubstr(
   string  string_value,     // строка
   int     start_pos,        // с какой позиции начать
   int     length=0          // длина извлекаемой строки
   );

10 Zeichen von der Nullposition abziehen und die Zeichenfolge in ein Datum umwandeln.

Aber wenn es keine Bar-Open-Time im String gibt, werden die Histogramme nicht auf jedem Bar sein, wenn wir es auf einem anderen Chart als D1 ausführen.

Строковые функции - Справочник MQL4
Строковые функции - Справочник MQL4
  • docs.mql4.com
Строковые функции - Справочник MQL4
 

Meine Freunde, bitte helfen Sie mir, eine Funktion zu schreiben, die die Anzahl der Balken ab dem Balken berechnet, an dem der Auftrag eröffnet wurde.

Zum Beispiel: Wenn wir einen offenen Auftrag bei Takt 5 haben, sollte die Funktion 5 zurückgeben.

 
Bek001:

Meine Freunde, bitte helfen Sie mir, eine Funktion zu schreiben, die die Anzahl der Balken ab dem Balken berechnet, an dem der Auftrag eröffnet wurde.

Zum Beispiel: Wenn wir einen offenen Auftrag bei Takt 5 haben, sollte die Funktion 5 zurückgeben.

int shift=iBarShift(NULL,PERIOD_СURRENT,OrderOpenTime());
 
Alexey Viktorov:

Verwenden Sie String-Funktionen. Insbesondere

10 Zeichen von der Nullposition abziehen und die Zeichenfolge in ein Datum umwandeln.

Aber wenn es keine Bar-Open-Time im String gibt, wird das Histogramm nicht auf jedem Bar sein, wenn ich es auf einem anderen Chart als D1 laufen lasse.

Danke, ich ziehe das Datum und den Wert separat ab.

Wie fülle ich nun den Puffer damit?

 for(int i=0; i<limit;i++){

string InpFileName="file.txt";
 ResetLastError(); 
  int file_handle=FileOpen(InpFileName,FILE_TXT|FILE_READ);
   
   if(file_handle!=INVALID_HANDLE) 
     { 
      PrintFormat("Файл %s открыт для чтения",InpFileName); 
      PrintFormat("Путь к файлу: %s\\Files\\",TerminalInfoString(TERMINAL_DATA_PATH)); 
      //--- вспомогательные переменные 
      int    str_size; 
      string str,str_b1,str_dat1; 
      //--- прочитаем данные из файла 
      while(!FileIsEnding(file_handle)) 
        { 
         //--- узнаем сколько символов использовано для записи времени 
         str_size=FileReadInteger(file_handle,INT_VALUE); 
         //--- прочитаем строку 
         str=FileReadString(file_handle,str_size); 
         str_dat1= StringSubstr(str,0,10);
         str_b1= StringSubstr(str,12,6);
         //--- распечатаем строку 
         PrintFormat(str_dat1); 
         PrintFormat(str_b1);
        } 
      //--- закроем файл 
      FileClose(file_handle); 
      PrintFormat("Данные прочитаны, файл %s закрыт",InpFileName); 
     } 
   else 
      PrintFormat("Не удалось открыть файл %s, Код ошибки = %d",InpFileName,GetLastError()); 
    //}
   
      Range_Buffer[i]=//???
      }
 
mila.com:

Danke, ich ziehe das Datum und den Wert separat ab.

Wie fülle ich nun den Puffer damit?

Range_Buffer[i]=значение//???

Es muss sich um eine Schleife handeln. Die while-Schleife in der for-Schleife ist eine Zeitverschwendung. Wir müssen eine Zeile lesen, das Datum und den Wert herausziehen und damit arbeiten. Finde die Anzahl der Balken nach Zeit und setze den Wert dort ein. Und erst dann geht es weiter zum nächsten Eintrag.

 
mila.com:

Das ist die Schwierigkeit.

Ich habe es ausgedruckt, um zu verdeutlichen, dass ich die Daten aus der Datei im Allgemeinen erhalte.

Ich kann nicht herausfinden, wie ich sie den entsprechenden Daten zuordnen kann.

Entspricht ein Datensatz einem Takt oder nicht?