Diskussion zum Artikel "Das MQL5-Kochbuch: Entwicklung eines Indikators mit mehreren Symbolen für die Analyse von Preisunterschieden"
Ist es nur ein Tippfehler oder sollte es so sein?
Egal, wie oft ich es versucht habe, alle Funktionen aus dem "Copy Squad" geben niemals Null zurück, sondern nur -1 oder >0.
//+------------------------------------------------------------------+ //| Prüft die Anzahl der verfügbaren Daten für alle Zeichen //+------------------------------------------------------------------+ bool CheckAvailableData() { int attempts=100; //--- for(int s=0; s<SYMBOLS_COUNT; s++) { //--- Wenn es ein solches Zeichen gibt if(symbol_names[s]!=empty_symbol) { datetime time[]; // Array zur Überprüfung der Anzahl der Balken int total_period_bars =0; // Anzahl der Balken der aktuellen Periode datetime terminal_first_date =NULL; // Erstes Datum der verfügbaren Daten des aktuellen Zeitraums im Terminal //--- Abrufen des ersten Datums der Daten des aktuellen Zeitraums im Terminal terminal_first_date=(datetime)SeriesInfoInteger(symbol_names[s],Period(),SERIES_TERMINAL_FIRSTDATE); //--- Ermitteln der Anzahl der verfügbaren Balken ab dem angegebenen Datum total_period_bars=Bars(symbol_names[s],Period(),terminal_first_date,TimeCurrent()); //--- Überprüfen Sie die Bereitschaft dieser Balken for(int i=0; i<attempts; i++) { //--- Kopieren der angegebenen Datenmenge if(CopyTime(symbol_names[s],Period(),0,total_period_bars,time)) { //--- Wenn die erforderliche Menge kopiert wurde, wird die Schleife beendet if(ArraySize(time)>=total_period_bars) break; } } //--- Wenn weniger Daten kopiert werden, muss ein weiterer Versuch unternommen werden. if(ArraySize(time)==0 || ArraySize(time)<total_period_bars) { msg_last=msg_prepare_data; ShowCanvasMessage(msg_prepare_data); OC_prev_calculated=0; return(false); } } } //--- Wenn im Modus der vertikalen Linie für den Startpunkt der Preisdifferenz, beenden if(StartPriceDivergence==VERTICAL_LINE) return(true); else { datetime time[]; // Array zur Überprüfung der Anzahl der Balken int total_period_bars =0; // Anzahl der Balken der aktuellen Periode datetime terminal_first_date =NULL; // Erstes Datum der verfügbaren Daten des aktuellen Zeitraums im Terminal //--- Abrufen des ersten Datums der Daten des aktuellen Zeitraums im Terminal for(int i=0; i<attempts; i++) if((terminal_first_date=(datetime)SeriesInfoInteger(Symbol(),Period(),SERIES_FIRSTDATE))>0) break; //--- Ermitteln der Anzahl der verfügbaren Balken ab dem angegebenen Datum for(int i=0; i<attempts; i++) if((total_period_bars=(int)SeriesInfoInteger(Symbol(),timeframe_start_point,SERIES_BARS_COUNT))>0) break; //--- Überprüfen Sie die Bereitschaft dieser Balken for(int i=0; i<attempts; i++) //--- Kopieren der angegebenen Datenmenge if(CopyTime(Symbol(),timeframe_start_point, terminal_first_date+PeriodSeconds(timeframe_start_point),TimeCurrent(),time)>0) break; //--- Wenn weniger Daten kopiert werden, muss ein weiterer Versuch unternommen werden. if(ArraySize(time)<=0 || total_period_bars<=0) { msg_last=msg_prepare_data; ShowCanvasMessage(msg_prepare_data); OC_prev_calculated=0; return(false); } } //--- return(true); }
Ist es nur ein Tippfehler oder sollte es so sein?
Egal, wie oft ich es probiert habe, alle Funktionen aus dem "Copy Squad" geben niemals Null zurück, sondern nur -1 oder >0.
Im Allgemeinen sollte man >0 machen, aber in diesem Fall erlauben die nachfolgenden Prüfungen, dass man es nicht macht.
Aber dieser Ausdruck wird immer wahr sein:
if(CopyTime(symbol_names[s],Period(),0,total_period_bars,time))
Aber dieser Ausdruck wird immer wahr sein:
Sie können den wenn überhaupt entfernen. In diesem Fall ist es nicht kritisch.
Im Allgemeinen erfolgt das Laden von historischen Daten für ein Symbol nicht so, wie es in der Hilfe beschrieben ist.
In der Tat sieht es so aus:
Wenn vom Programm mql5 aus eine Anfrage nach Daten einer Zeitreihe gestellt wird, z.B. mit der Funktion CopyTime
angefordert werden und diese Daten nicht im Terminal vorhanden sind (noch nicht geladen), lädt das Terminal diese Daten nicht in der angeforderten Menge (im Beispiel der Hilfe sind es 100 Balken) vom Server herunter,
sondern so viele Balken der gewünschten Zeitreihe, wie der Parameter "Max bars in chart" im RAM "platzieren" kann.
Es reicht aus, nur einen Balken einer höheren Periode, z.B. PERIOD_W1, anzufordern, da die gesamte Historie vom Server heruntergeladen werden wird.
Im Allgemeinen erfolgt das Laden von historischen Daten für ein Symbol nicht so, wie es in der Hilfe beschrieben ist.
In der Tat sieht es so aus:
Wenn vom Programm mql5 aus eine Anfrage nach Daten einer Zeitreihe gestellt wird, z.B. mit der Funktion CopyTime
angefordert werden und diese Daten nicht im Terminal vorhanden sind (noch nicht geladen), lädt das Terminal diese Daten nicht in der angeforderten Menge (im Beispiel der Hilfe sind es 100 Balken) vom Server herunter,
sondern so viele Balken der gewünschten Zeitreihe, wie der Parameter "Max bars in chart" im RAM "platzieren" kann.
Es reicht aus, nur einen Balken einer höheren Periode anzufordern, z.B. PERIOD_W1, da die gesamte Historie vom Server heruntergeladen wird.
Die Hilfe kann alles sagen, was Sie wollen. Sie sind frei zu tun, was Sie für richtig halten. ;)
Das Beispiel aus der Hilfe wurde in einem anderen Artikel besprochen: Wie man MetaTrader 5-Kurse für andere Programme vorbereitet >>>.
Auf der Bescheinigung kann alles stehen, was Sie wollen. Sie sind frei, das zu tun, was Sie für richtig halten. ;)
Das Beispiel aus der Hilfe wurde in einem anderen Artikel besprochen: Wie man MetaTrader 5-Kurse für andere Programme vorbereitet >>>.
Genau das habe ich gemacht. Ich habe nur die Berechnung der verbleibenden "entladenen Bars" vom Server in Ihrem Code gesehen.
Und ich dachte - das Terminal kümmert sich nicht, es pumpt so viel, wie es bilden muss.
Am Ende Ihres Artikels schreiben Sie: "Dieser Indikator kann unbegrenzt zum Besseren entwickelt werden".
Meiner Meinung nach ist die Betrachtung von Kursdivergenzen für das menschliche Auge wenig hilfreich. Ein Mensch ist kein Roboter!
Aber es ist ein interessantes Thema für einen Roboter.
Sie haben mehrere Darstellungsmöglichkeiten vorgeschlagen:
1. von der Linie aus.
2. "Tag".
Ich arbeite derzeit an etwas Ähnlichem, nur im Modus "Woche".
Am Ende Ihres Artikels schreiben Sie: "Dieser Indikator kann unbegrenzt zum Besseren entwickelt werden".
Meiner Meinung nach ist die Betrachtung von Kursdivergenzen für das menschliche Auge wenig hilfreich. Ein Mensch ist kein Roboter!
Aber es ist ein interessantes Thema für einen Roboter.
Sie haben mehrere Darstellungsmöglichkeiten vorgeschlagen:
1. von der Linie aus.
2. "Tag".
Ich arbeite gerade an etwas Ähnlichem, nur im Modus "Woche".
Ich bin mir nicht sicher, ob ich in nächster Zeit etwas anderes schreiben kann, da ich mit anderen Problemen beschäftigt bin. Aber laut diesem Artikel sollte die Entwicklung noch in der Mehrwährungsberechnung und der Visualisierung dieser Berechnungen auf der Leinwand liegen.
Ja, der Mensch ist kein Roboter, aber manchmal muss man das Studienfach auf eine andere Art und Weise betrachten, um eine Idee zu bekommen. ;)
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Neuer Artikel Das MQL5-Kochbuch: Entwicklung eines Indikators mit mehreren Symbolen für die Analyse von Preisunterschieden :
In diesem Beitrag betrachten wir die Entwicklung eines Indikators mit mehreren Symbolen für die Analyse von Preisunterschieden in einem bestimmten Zeitraum. Die wichtigsten Themen wurden bereits im vorhergehenden Beitrag zur Programmierung mehrwährungsfähiger Indikatoren besprochen, "Das MQL5-Kochbuch: Entwicklung eines Indikators für die Volatilität mehrerer Symbole in MQL5". Diesmal gehen wir also nur auf jene neuen Features und Funktionen ein, an denen wesentliche Änderungen vorgenommen wurden. Wenn Sie ein Neuling in der Programmierung von mehrwährungsfähigen Indikatoren sind, empfehle ich Ihnen, zuerst den vorherigen Beitrag zu lesen.
Im nachfolgenden Screenshot sehen Sie den M30-Timeframe im Modus Tag, doch diesmal ist die Umkehrung für Symbole mit USD als Basiswährung aktiviert. In unserem Fall haben wir USDCAD (hellblaue Kerzen) und USDCHF (violette Kerzen).
Abb. 2 – M30-Timeframe im Modus "Tag"
Autor: Anatoli Kazharski