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
- Ansichten:
- 813
- Rating:
- Veröffentlicht:
- Aktualisiert:
-
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

Alternativer 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

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