FileWrite

Aufzeichnung der Daten in die Datei des Typs CSV oder TXT, der Datenbegrenzer wird automatisch eingefügt, wenn er nicht 0 gleich ist. Nach Aufzeichnung in die Datei wird Zeilenendesymbol "\r\n" hinzugefügt.

uint  FileWrite(
   int  file_handle,     // Datei-Handle
   ...                   // Liste der geschriebenen Parameter
   );

Parameter

file_handle

[in] Dateidescriptor, der durch die Funktion FileOpen() zurückgegeben wird.

...

[in]  Liste der Parameter, die durch Kommas getrennt werden, für Schreiben in die Datei. Anzahl der in die Datei geschriebenen Parameter muss nicht mehr als 63 sein.

Rückgabewert

Anzahl der geschriebenen Bytes.

Hinweis

Bei der Ausgabe werden numerische Daten in Textformat umgewandelt (s. die Funktion Print()). Daten des Typs double werden mit der Genauigkeit bis 16 Dezimalzeichen ausgegeben, dabei können Daten entweder im traditionellen oder im wissenschaftlichen Format ausgegeben - abhängig davon, welche Aufzeichnung kompakter ist. Daten des Typs werden mit 5 Dezimalzeichen ausgegeben. Für Ausgabe der Realzahlen mit anderer Genauigkeit oder im explizit angegebenen Format muss die Funktion DoubleToString() verwendet werden.

Zahlen des Typs bool werden als die Zeilen "true" oder "false" ausgegeben. Zahlen des Typs datetime werden im Format "YYYY.MM.DD HH:MI:SS" ausgegeben.

Beispiel:

//+------------------------------------------------------------------+
//|                                               Demo_FileWrite.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                InpFastEMAPeriod=12;              // die Periode des schnellen gleitenden Durchschnitts
input int                InpSlowEMAPeriod=26;              // die Periode des langsamen gleitenden Durchschnitts
input int                InpSignalPeriod=9;                // die durchschnittliche Periode auf die Unterschiede 
input ENUM_APPLIED_PRICE InpAppliedPrice=PRICE_CLOSE;      // der Typ des Preises
input datetime           InpDateStart=D'2012.01.01 00:00'; // das Anfangsdatum zum Kopieren von Daten
//--- die Parameter für die Aufzeichnung der Daten in die Datei
input string             InpFileName="MACD.csv";  // der Dateiname
input string             InpDirectoryName="Data"// der Verzeichnisname
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   datetime date_finish; // das Enddatum zum Kopieren von Daten
   bool     sign_buff[]; // ein Array von Signalen (true - kaufen, false - verkaufen
   datetime time_buff[]; // ein Array der Zeit des Eintritts der Signale
   int      sign_size=0; // die Größe der Array von Signalen
   double   macd_buff[]; // ein Array von Werten des Indikators
   datetime date_buff[]; // ein Array von Daten des Indikators
   int      macd_size=0; // die Größe der Array von Indikator
//--- Die Zeit des Abschlusses - laufend
   date_finish=TimeCurrent();
//--- bekommen Sie die Handle des Indikators MACD 
   ResetLastError();
   int macd_handle=iMACD(InpSymbolName,InpSymbolPeriod,InpFastEMAPeriod,InpSlowEMAPeriod,InpSignalPeriod,InpAppliedPrice);
   if(macd_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(macd_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(macd_handle,0,InpDateStart,date_finish,macd_buff)==-1)
     {
      PrintFormat("Fehler beim Kopieren der Werte des Indikators. 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(macd_handle);
//--- erhalten Sie die Größe des Buffers
   macd_size=ArraySize(macd_buff);
//--- Analysieren der Daten und speichern die Indikator-Signale in Arrays 
   ArrayResize(sign_buff,macd_size-1);
   ArrayResize(time_buff,macd_size-1);
   for(int i=1;i<macd_size;i++)
     {
      //--- Das Signal auf den Kauf
      if(macd_buff[i-1]<0 && macd_buff[i]>=0)
        {
         sign_buff[sign_size]=true;
         time_buff[sign_size]=date_buff[i];
         sign_size++;
        }
      //--- Das Signal auf den Verkauf
      if(macd_buff[i-1]>0 && macd_buff[i]<=0)
        {
         sign_buff[sign_size]=false;
         time_buff[sign_size]=date_buff[i];
         sign_size++;
        }
     }
//--- ö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);
   if(file_handle!=INVALID_HANDLE)
     {
      PrintFormat("%s Datei ist zum Lesen geöffnet",InpFileName);
      PrintFormat("Pfad zur Datei: %s\\Files\\",TerminalInfoString(TERMINAL_DATA_PATH));
      //--- schreiben Sie zuerst die Anzahl der Signale
      FileWrite(file_handle,sign_size);
      //--- zeichnen Sie die Zeit der Signale und ihre Werte in der Datei auf
      for(int i=0;i<sign_size;i++)
         FileWrite(file_handle,time_buff[i],sign_buff[i]);
      //--- 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

Comment, Print, StringFormat