MetaTrader 5 herunterladen

FileWriteString

Zeichnet in die Datei des Typs BIN, CSV oder TXT, die Wert des Parameters des Typs string von der laufenden Position des Dateianzeigers auf. Bei der Aufzeichnung in die Datei des Typs CSV oder TXT, wenn in der Zeile das Symbol '\n ' (LF) ohne vorangehendes Symbol '\r ' (CR) anwesend ist, so wird vor dem Symbol '\n ' das fehlende Symbol '\r ' fertiggeschrieben.

uint  FileWriteString(
   int           file_handle,    // Datei-Handle
   const string  text_string,    // die geschriebene Zeile 
   int           length=-1       // Anzahl der Symbole
   );

Parameter

file_handle

[in]  Dateiattribut, das durch die Funktion FileOpen() zurückgegeben wird.

text_string

[in]  Zeile.

length=-1

[in]  Anzahl der Symbole, die geschrieben werden müssen. Parameter ist für Schreiben der Zeile in die Datei des Typs BIN notwendig. Wenn die Größe nicht angegeben wird, wird die ganze Zeile ohne terminale 0 geschrieben. Wenn die angegebene Größe weniger als Zeilenlänge ist, wird ein Teil der Zeile ohne terminale 0 geschrieben. Wenn die angegebene Größe mehr als die Zeilenlänge ist, wird die Zeile durch entsprechende Anzahl der Nullen ergänzt. Für die Dateien des Typs CSV oder TXT wird dieser Parameter auch die Zeile ignoriert schreibt sich vollständig ein.

Rückgabewert

Im Erfolgsfall gibt die Funktion die Anzahl der geschriebenen Bytes zurück. Dateianzeiger wird um dieselbe Anzahl der Bytes verschoben.

Bemerkung

Es ist bemerkenswert, dass beim Schreiben in die Datei, die durch die Flagge Flagge FILE_UNICODE (oder ohne Flagge FILE_ANSI) geöffnet wurde, wird die Anzahl der geschriebenen Bytes um das Doppelte mehr als die Anzahl der geschriebenen Zeilensymbole. Beim Schreiben in die Datei, die durch die Flagge FILE_ANSI eröffnet wurde, wird die Anzahl der geschriebenen Bytes mit der Anzahl der geschriebenen Zeilensymbole zusammenfallen.

Beispiel:

//+------------------------------------------------------------------+
//|                                         Demo_FileWriteString.mq5 |
//|                        Copyright 2013, MetaQuotes Software Corp. |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
//--- Beim Starten des Scripts zeigen Sie den Fenster mit den Eingabeparametern an
#property script_show_inputs
//--- die Parameter für das Erhalten der Daten aus dem Terminal
input string             InpSymbolName="EURUSD";           // Währungspaar
input ENUM_TIMEFRAMES    InpSymbolPeriod=PERIOD_H1;        // Zeitspanne
input int                InpMAPeriod=14;                   // die durchschnittliche Periode
input ENUM_APPLIED_PRICE InpAppliedPrice=PRICE_CLOSE;      // der Typ des Preises
input datetime           InpDateStart=D'2013.01.01 00:00'; // das Anfangsdatum zum Kopieren von Daten
//--- die Parameter für die Aufzeichnung der Daten in die Datei
input string             InpFileName="RSI.csv";   // der Dateiname
input string             InpDirectoryName="Data"// der Verzeichnisname
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   datetime date_finish; // das Enddatum zum Kopieren von Daten
   double   rsi_buff[];  // ein Array von Werten des Indikators
   datetime date_buff[]; // ein Array von Daten des Indikators
   int      rsi_size=0;  // die Größe der Array von Indikator
//--- die Zeit des Abschlusses - laufend
   date_finish=TimeCurrent();
//--- bekommen Sie die Handle des Indikators RSI
   ResetLastError();
   int rsi_handle=iRSI(InpSymbolName,InpSymbolPeriod,InpMAPeriod,InpAppliedPrice);
   if(rsi_handle==INVALID_HANDLE)
     {
      //--- es misslang, die Handle des Indikators zu bekommen
      PrintFormat("Fehler beim Erhalten der Handle des Indikators. Fehlercode = %d",GetLastError());
      return;
     }
//--- befinden Sie sich im Zyklus, bis der Indikator alle Werten rechnen wird
   while(BarsCalculated(rsi_handle)==-1)
      Sleep(10); // die Verzögerungszeit, damit der Indikator dazugekommen ist die Werten auszurechnen
//--- kopieren Sie die Werte eines Indikators für eine bestimmte Periode
   ResetLastError();
   if(CopyBuffer(rsi_handle,0,InpDateStart,date_finish,rsi_buff)==-1)
     {
      PrintFormat("Fehler beim Kopieren der Werte des Indikatos. Fehlercode = %d",GetLastError());
      return;
     }
//--- kopieren Sie die entsprechende Zeit für die Werte des Indikators
   ResetLastError();
   if(CopyTime(InpSymbolName,InpSymbolPeriod,InpDateStart,date_finish,date_buff)==-1)
     {
      PrintFormat("Fehler beim Kopieren von Zeitwerten. Fehlercode = %d",GetLastError());
      return;
     }
//--- befreien Sie das Gedächtnis, das mit dem Indikator eingenommen wird
   IndicatorRelease(rsi_handle);
//--- erhalten Sie die Größe des Puffers
   rsi_size=ArraySize(rsi_buff);
//--- öffnen Sie die Datei zum Schreiben die Indikatorwerte (wenn nicht, dann sie automatisch erstellt werden wird)
   ResetLastError();
   int file_handle=FileOpen(InpDirectoryName+"//"+InpFileName,FILE_READ|FILE_WRITE|FILE_CSV|FILE_ANSI);
   if(file_handle!=INVALID_HANDLE)
     {
      PrintFormat("%s Datei ist zum Lesen geöffnet",InpFileName);
      PrintFormat("Pfad zur Datei: %s\\Files\\",TerminalInfoString(TERMINAL_DATA_PATH));
      //--- bereiten Sie die Hilfsvariabelen vor
      string str="";
      bool   is_formed=false;
      //--- schreiben Sie das Datum auf die überkauft und überverkauft Zonen
      for(int i=0;i<rsi_size;i++)
        {
         //--- die Prüfung der Werten des Indikators
         if(rsi_buff[i]>=70 || rsi_buff[i]<=30)
           {
            //--- der erste Wert in dieser Zone
            if(!is_formed)
              {
               //--- fügen Sie den Wert und das Datum ein
               str=(string)rsi_buff[i]+"\t"+(string)date_buff[i];
               is_formed=true;
              }
            else
               str+="\t"+(string)rsi_buff[i]+"\t"+(string)date_buff[i];
            //--- der Übergang auf die nächste Iteration des Zyklus
            continue;
           }
         //--- die Prüfung der Fahne
         if(is_formed)
           {
            //---die Zeile ist gebildet, wir werden sie in die Datei aufzeichnen
            FileWriteString(file_handle,str+"\r\n");
            is_formed=false;
           }
        }
      //--- schließen Sie die Datei
      FileClose(file_handle);
      PrintFormat("Die Daten sind aufgezeichnet, die Datei %s geschlossen",InpFileName);
     }
   else
      PrintFormat("Fehler beim Öffnen der Datei %s, Fehlercode = %d",InpFileName,GetLastError());
  }

Sehen Sie auch

Typ string, StringFormat