und werden Sie Mitglied unserer Fangruppe
Veröffentliche einen Link auf das Skript, damit die anderen ihn auch nutzen können
Bewerten Sie es im Terminal MetaTrader 5
Demo_FileReadDatetime - Indikator für den MetaTrader 5
- Ansichten:
- 737
- Rating:
- 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
Das Skript demonstriert ein Beispiel für die Verwendung der FileWrite() Funktion
X Bar Clear Close TrendAlternativer Trend Indikator basierend auf dem Muster Ausbruch über die Extrema des vorherigen Balkens
Das Skript demonstriert ein Beispiel für die Verwendung der FileWriteDouble() Funktion
Demo_FileReadDoubleDer Indikator demonstriert ein Beispiel für die Verwendung der FileReadDouble() Funktion