Schau, wie man Roboter kostenlos herunterladen kann
Finden Sie uns auf Telegram!
und werden Sie Mitglied unserer Fangruppe
Interessantes Skript?
Veröffentliche einen Link auf das Skript, damit die anderen ihn auch nutzen können
Hat Ihnen das Skript gefallen?
Bewerten Sie es im Terminal MetaTrader 5
Indikatoren

Demo_FileReadDatetime - Indikator für den MetaTrader 5

Ansichten:
699
Rating:
(16)
Veröffentlicht:
2016.06.20 13:20
Aktualisiert:
2016.11.22 07:34
Benötigen Sie einen Roboter oder Indikator, der auf diesem Code basiert? Bestellen Sie ihn im Freelance-Bereich Zum Freelance

Der Indikator liest Signal für Kaufen und Verkaufen aus einer Datei eines Unterverzeichnisses des lokalen Terminalordners und zeigt dann diese Signale in Form von aufwärts- und abwärtsgerichteten Pfeilen an. Um die Datei mit den Signalen zu erhalten, müssen Sie zuerst das Demo_FileWrite Skript ausführen. Der Ort des lokalen Terminal-Ordners kann durch Aufruf der TerminalInfoString() Funktion festgestellt werden.

PrintFormat("Der Pfad zum lokalen Terminal-Ordner lautet: %s\\Files\\",TerminalInfoString(TERMINAL_DATA_PATH));
Um Daten neben der FileReadDatetime() Funktion zu erhalten, verwendet der Indikator auch die FileReadNumber() und FileReadBool() Funktionen.

Code:

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots   2
//---- Label1 ausgeben
#property indicator_label1  "AufwärtsSignal"
#property indicator_type1   DRAW_ARROW
#property indicator_color1  clrRed
#property indicator_style1  STYLE_SOLID
#property indicator_width1  4
//---- Label2 ausgeben
#property indicator_label2  "AbwärtsSignal"
#property indicator_type2   DRAW_ARROW
#property indicator_color2  clrRed
#property indicator_style2  STYLE_SOLID
#property indicator_width2  4
//--- Parameter zum Lesen der Daten
input string InpFileName="MACD.csv";  // Dateiname
input string InpDirectoryName="Data";   // Verzeichnisname
//--- Globale Variables
int      ind=0;       // index
double   upbuff[];    // Indikatorbuffer der Aufwärtspfeile
double   downbuff[];  // Indikatorbuffer der Abwärtspfeile
bool     sign_buff[]; // Signal-Array (true - kaufen, false - verkaufen)
datetime time_buff[]; // Array mit Zeiten der Signale
int      size=0;      // Größe des Signal-Arrays
//+------------------------------------------------------------------+
//| Benutzerdefinierter Indikator Initialisierungs-Funktion          |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- Datei öffnen
   ResetLastError();
   int file_handle=FileOpen(InpDirectoryName+"//"+InpFileName,FILE_READ|FILE_CSV);
   if(file_handle!=INVALID_HANDLE)
     {
      PrintFormat("%s Datei zum Lesen geöffnet",InpFileName);
      //--- Zunächst Anzahl der Signal lesen
      size=(int)FileReadNumber(file_handle);
      //--- Speicher für das Array reservieren
      ArrayResize(sign_buff,size);
      ArrayResize(time_buff,size);
      //--- Daten von der Datei lesen
      for(int i=0;i<size;i++)
        {
         //--- Signalzeit
         time_buff[i]=FileReadDatetime(file_handle);
         //--- Signalwert
         sign_buff[i]=FileReadBool(file_handle);
        }
      //--- Datei schließen
      FileClose(file_handle);
     }
   else
     {
      PrintFormat("Fehler beim Öffnen der Datei %s , Fehlercode = %d",InpFileName,GetLastError());
      return(INIT_FAILED);
     }
//--- Arrays einbinden
   SetIndexBuffer(0,upbuff,INDICATOR_DATA);
   SetIndexBuffer(1,downbuff,INDICATOR_DATA);
//--- Symbolcode für das Zeichnen im PLOT_ARROW einstellen
   PlotIndexSetInteger(0,PLOT_ARROW,241);
   PlotIndexSetInteger(1,PLOT_ARROW,242);
//---- Indikatorwerte setzen, die man im Chart nicht sieht
   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0);
   PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,0);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Benutzerdefinierte Indikatoriterationsfunktion                   |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double& low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   ArraySetAsSeries(time,false);
   ArraySetAsSeries(high,false);
   ArraySetAsSeries(low,false);
//--- Schleife für die Balken, die noch nicht verarbeitet wurden
   for(int i=prev_calculated;i<rates_total;i++)
     {
      //--- Standardwert ist 0
      upbuff[i]=0;
      downbuff[i]=0;
      //--- Prüfen ob Daten vorhanden sind
      if(ind<size)
        {
         for(int j=ind;j<size;j++)
           {
            //--- Wenn Daten übereinstimmen, Werte aus der Datei verwenden
            if(time[i]==time_buff[j])
              {
               //--- Pfeil dem Signal entsprechend zeichnen
               if(sign_buff[j])
                  upbuff[i]=high[i];
               else
                  downbuff[i]=low[i];
               //--- counter erhöhen
               ind=j+1;
               break;
              }
           }
        }
     }
//--- Rückgabewert von prev_calculated für nächsten Aufruf:
   return(rates_total);
  }

Übersetzt aus dem Russischen von MetaQuotes Ltd.
Originalpublikation: https://www.mql5.com/ru/code/1627

Demo_FileWrite Demo_FileWrite

Das Skript demonstriert ein Beispiel für die Verwendung der FileWrite() Funktion

X Bar Clear Close Trend X Bar Clear Close Trend

Alternativer Trend Indikator basierend auf dem Muster Ausbruch über die Extrema des vorherigen Balkens

Demo_FileWriteDouble Demo_FileWriteDouble

Das Skript demonstriert ein Beispiel für die Verwendung der FileWriteDouble() Funktion

Demo_FileReadDouble Demo_FileReadDouble

Der Indikator demonstriert ein Beispiel für die Verwendung der FileReadDouble() Funktion