Fragen von einem "Dummy" - Seite 57

 
Lizar:

Ich werde mir die im Artikel genannte Version ansehen. So weit gemacht einige Experten auf Spione, funktioniert super.

MetaDriver:

Ich glaube nicht, dass diese Technologie im Testgerät funktioniert.

Es funktioniert.

Es ist einfach toll, dass es im Testgerät funktioniert. Ich habe es noch nicht umsetzen können. Aber das liegt wahrscheinlich an der mangelnden Erfahrung. Ich habe mich für eine Zeitschaltuhr entschieden, aber sie ist sehr lang.

Wenn ich versuche, den Expert Advisor an das Diagramm anzuhängen, erhalte ich eine solche Meldung:

Ich verstehe nicht, was der USDJPY damit zu tun hat. Ich habe sogar das Abrufen von Handle bei der Initialisierung im Code auskommentiert, aber diese Meldung wird immer noch angezeigt.

 
Lizar:

Es funktioniert.

Konstantin, verstehe ich das richtig, dass der ausführbare EA-Code, der sich normalerweise in OnTick() oder OnTimer() befindet, in OnChartEvent() platziert werden muss, damit Ihr Schema im Mehrwährungsmodus funktioniert, sowohl in Echtzeit als auch im Tester.
 
tol64:

Es ist einfach toll, dass es im Testgerät funktioniert. Ich habe es noch nicht umsetzen können. Aber das liegt wohl an der mangelnden Erfahrung. Ich habe mich vorerst für den Timer entschieden, aber er ist zu lang.

Wenn ich versuche, den Expert Advisor an das Diagramm anzuhängen, erhalte ich eine solche Meldung:

Ich verstehe nicht, was der USDJPY damit zu tun hat. Ich habe sogar das Abrufen eines Handles bei der Initialisierung im Code auskommentiert, aber diese Meldung wird immer noch angezeigt.

Ich habe es mir noch nicht angesehen.

Tol64:
Konstantin, verstehe ich das richtig, dass der ausführbare EA-Code, der sich normalerweise in OnTick() oder OnTimer() befindet, in OnChartEvent() platziert werden muss, damit Ihr Schema im Mehrwährungsmodus funktioniert, sowohl in Echtzeit als auch im Tester.

Ja.

 
tol64:

Es ist einfach toll, dass es im Testgerät funktioniert. Ich habe es noch nicht umsetzen können. Aber das liegt wohl an der mangelnden Erfahrung. Ich habe mich vorerst für den Timer entschieden, aber er ist zu lang.

Wenn ich versuche, den Expert Advisor an das Diagramm anzuhängen, erhalte ich eine solche Meldung:

Ich verstehe nicht, was der USDJPY damit zu tun hat. Ich habe sogar das Abrufen eines Handles bei der Initialisierung im Code auskommentiert, aber die Meldung kommt immer noch.

Ich habe es mir angesehen. Der Expert Advisor funktioniert. Es handelte sich lediglich um einen Druckfehler in der Fehlermeldung.

Sie erhielten eine Meldung, dass das Symbol im MarketWatch-Fenster nicht ausgewählt war. Setzen Sie entweder die Symbole, mit denen der Expert Advisor arbeitet, auf das MarketWatch-Fenster, oder kommentieren Sie die Spyros-Aufrufe für die entsprechenden Symbole in OnInit() aus.

Ich füge die modifizierte Version von exSpy Control panel MCM.mq5 bei.

Документация по MQL5: Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Ошибки компиляции
Документация по MQL5: Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Ошибки компиляции
  • www.mql5.com
Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Ошибки компиляции - Документация по MQL5
Dateien:
 
Lizar:

Ich habe es mir angesehen. Der Experte ist im Einsatz. Es handelte sich lediglich um einen Tippfehler in der Fehlermeldung.

Sie erhielten die Meldung, dass das Symbol im MarketWatch-Fenster nicht ausgewählt war. Setzen Sie entweder die Symbole, mit denen der Expert Advisor arbeitet, auf das MarketWatch-Fenster, oder kommentieren Sie die Aufrufe der Spyros für die entsprechenden Symbole in OnInit() aus.

Ich habe die modifizierte Version des exSpy Control Panels MCM.mq5 beigefügt.

Ich habe sogar über mich selbst gelacht, weil ich so unaufmerksam war))) USDJPY befand sich im Market Watch-Fenster. Es gab kein anderes Symbol, und die Ausdrucke enthielten nur dieselbe Botschaft. )))

Danke.

 
tol64:
Konstantin, verstehe ich das richtig, dass der ausführbare Code des Expert Advisors, der sich normalerweise in OnTick() oder OnTimer() befindet, in OnChartEvent() platziert werden sollte, damit Ihr Schema im Multicurrency-Modus funktioniert, sowohl in Echtzeit als auch im Tester.

Es ist besser, alle benötigten Funktionen in Form von separaten Prozeduren und Funktionen zu implementieren (ich empfehle letztere) und sie dann von jeder beliebigen Stelle im Expert Advisor aufzurufen.

Wenn Sie OOP verwenden, kann die gesamte erforderliche Funktionalität als eine Reihe mehrerer Methoden der Hauptklasse implementiert werden (in der Regel handelt es sich um einen Nachkommen der Klasse Expert).

 
Interesting:

Es ist besser, alle erforderlichen Funktionen als separate Prozeduren und Funktionen zu implementieren (ich empfehle letztere) und sie dann von einer beliebigen Stelle im Expert Advisor aus aufzurufen.

Wenn Sie OOP verwenden, können Sie alle erforderlichen Funktionen als eine Reihe von Methoden der Hauptklasse implementieren (in der Regel handelt es sich um einen Abkömmling der Klasse Expert Advisor).

Im Moment sind fast alle Funktionen auf diese Weise implementiert. Fast. Das heißt, der gesamte Code besteht aus einigen wenigen Funktionen, die die grundlegenden Berechnungen enthalten. Ich habe OOP noch nicht vollständig beherrscht, aber ich sehe schon den Nutzen, den ich daraus ziehen kann. Der Code wächst von Tag zu Tag und bald wird es sehr unbequem sein, ihn ohne OOP zu benutzen.

Ich habe ein separates Thema erstellt, in dem ich Ihnen die Ergebnisse verschiedener Multicurrency-Testmethoden vorstelle:Results of Multicurrency Expert Advisor Testing. Es gibt noch viele Dinge, die mir bei diesem Thema unklar sind.

 

Warum werden meine Zitate nicht geladen? Bei EURUSD zum Beispiel werden sie nur bis August des betreffenden Jahres geladen. Das ist alles. Sie wollen sie nicht weiter belasten. Vielleicht gibt es irgendwo eine Datei mit Anführungszeichen?

Ich habedie Anzahl der Balken auf unbegrenzt eingestellt. Ich habe die Seite mehrmals aktualisiert. Ich habe mehrmals auf HOME gedrückt. Es funktioniert immer noch nicht.

 

Und wo ist die "angekündigte vollständige Liste" aller MT5-Dateien und ihrer Details.

Ich bin heute erst vom Affenbrotbaum gekommen, tut mir leid.

 

Ein multitemporaler fraktaler Indikator.

Das Wesen des Indikators besteht darin, die Fraktale eines Zeitrahmens (oder mehrerer gleichzeitig) auf einem anderen anzuzeigen.

Quellartikel: https://www.mql5.com/ru/code/7304, Indikatorcode in MQL4

Zuerst habe ich versucht, es aus der .mq4-Version zu kopieren und einzufügen, mit einigen Mikrokorrekturen für .mq5 (ich zitiere diesen Code nicht einmal - das Problem trat auf, als ich eine unvorsichtige Manipulation von Arrays wie High[shift+i] im MQL4-Quellcode entdeckte.

bool Fractal (string F,int Per, int shift) {...}

Ich habe versucht, es in MQL5 umzuschreiben (keine Standardsichtbarkeit solcher Arrays außerhalb von OnCalculate).

Dann habe ich versucht, es für MQL5 umzuschreiben, indem ich mehrere iFractals-Handles mit verschiedenen Parametern aufrief PERIOD_.... Infolgedessen fielen die Fraktale auseinander, obwohl manchmal nur eine Reihe von fraktalen Pfeilen auf der entsprechenden TF angemessen landen konnte. Bemerkenswert ist, dass die Fraktale anders aussehen, wenn ich von anderen Zeitrahmen zum gleichen Zeitrahmen im Terminal zurückkehre, was auf Folgendes hindeutet: Die Daten im Terminal dieses unbekannten Indikators wandern auf unverständliche Weise, obwohl ich immer dachte, dass sich das gleiche Fehlerbild stabil wiederholen sollte. Natürlich enthält die zweite Variante nicht einmalbool Fractal(string F,int Per, int shift) {...}, was ich an erfahrene Entwickler von Indikatoren richten möchte.

Hier ist, was ich gezeichnet habe:

#property indicator_chart_window
#property indicator_buffers 8
#property indicator_plots   8

#property indicator_label1  "FractalUp1"
#property indicator_type1   DRAW_ARROW
#property indicator_color1 clrRed
#property indicator_width1  2

#property indicator_label2  "FractalDw1"
#property indicator_type2   DRAW_ARROW
#property indicator_color2 clrRed
#property indicator_width2  2

#property indicator_label3  "FractalUp2"
#property indicator_type3   DRAW_ARROW
#property indicator_color3 clrBlue
#property indicator_width3  2

#property indicator_label4  "FractalDw2"
#property indicator_type4   DRAW_ARROW
#property indicator_color4 clrBlue
#property indicator_width4  2

#property indicator_label5  "FractalUp3"
#property indicator_type5   DRAW_ARROW
#property indicator_color5 clrGold
#property indicator_width5  2

#property indicator_label6  "FractalDw3"
#property indicator_type6   DRAW_ARROW
#property indicator_color6 clrGold
#property indicator_width6  2

#property indicator_label7  "FractalUp4"
#property indicator_type7   DRAW_ARROW
#property indicator_color7 clrSienna
#property indicator_width7  2

#property indicator_label8  "FractalDw4"
#property indicator_type8   DRAW_ARROW
#property indicator_color8 clrSienna
#property indicator_width8  2

double ExtMapBuffer1[];
double ExtMapBuffer2[];
double ExtMapBuffer3[];
double ExtMapBuffer4[];
double ExtMapBuffer5[];
double ExtMapBuffer6[];
double ExtMapBuffer7[];
double ExtMapBuffer8[];

int ArrowShift=-10;

int handle1;
int handle2;
int handle3;
int handle4;

int OnInit()
  {
//   IndicatorSetInteger(INDICATOR_DIGITS,_Digits);
//---
   SetIndexBuffer(0,ExtMapBuffer1,INDICATOR_DATA);
   PlotIndexSetInteger(0,PLOT_ARROW,217);
   PlotIndexSetInteger(0,PLOT_ARROW_SHIFT,ArrowShift);
   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,EMPTY_VALUE);
   ArrayInitialize(ExtMapBuffer1,EMPTY_VALUE);

   SetIndexBuffer(1,ExtMapBuffer2,INDICATOR_DATA);
   PlotIndexSetInteger(1,PLOT_ARROW,218);
   PlotIndexSetInteger(1,PLOT_ARROW_SHIFT,-ArrowShift);
   PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,EMPTY_VALUE);
   ArrayInitialize(ExtMapBuffer2,EMPTY_VALUE);

//---
   SetIndexBuffer(2,ExtMapBuffer3,INDICATOR_DATA);
   PlotIndexSetInteger(2,PLOT_ARROW,217);
   PlotIndexSetInteger(2,PLOT_ARROW_SHIFT,ArrowShift);
   PlotIndexSetDouble(2,PLOT_EMPTY_VALUE,EMPTY_VALUE);
   ArrayInitialize(ExtMapBuffer3,EMPTY_VALUE);

   SetIndexBuffer(3,ExtMapBuffer4,INDICATOR_DATA);
   PlotIndexSetInteger(3,PLOT_ARROW,218);
   PlotIndexSetInteger(3,PLOT_ARROW_SHIFT,-ArrowShift);
   PlotIndexSetDouble(3,PLOT_EMPTY_VALUE,EMPTY_VALUE);
   ArrayInitialize(ExtMapBuffer4,EMPTY_VALUE);

//---
   SetIndexBuffer(4,ExtMapBuffer5,INDICATOR_DATA);
   PlotIndexSetInteger(4,PLOT_ARROW,217);
   PlotIndexSetInteger(4,PLOT_ARROW_SHIFT,ArrowShift);
   PlotIndexSetDouble(4,PLOT_EMPTY_VALUE,EMPTY_VALUE);
   ArrayInitialize(ExtMapBuffer5,EMPTY_VALUE);

   SetIndexBuffer(5,ExtMapBuffer6,INDICATOR_DATA);
   PlotIndexSetInteger(5,PLOT_ARROW,218);
   PlotIndexSetInteger(5,PLOT_ARROW_SHIFT,-ArrowShift);
   PlotIndexSetDouble(5,PLOT_EMPTY_VALUE,EMPTY_VALUE);
   ArrayInitialize(ExtMapBuffer6,EMPTY_VALUE);

//---
   SetIndexBuffer(6,ExtMapBuffer7,INDICATOR_DATA);
   PlotIndexSetInteger(6,PLOT_ARROW,217);
   PlotIndexSetInteger(6,PLOT_ARROW_SHIFT,ArrowShift);
   PlotIndexSetDouble(6,PLOT_EMPTY_VALUE,EMPTY_VALUE);
   ArrayInitialize(ExtMapBuffer7,EMPTY_VALUE);

   SetIndexBuffer(7,ExtMapBuffer8,INDICATOR_DATA);
   PlotIndexSetInteger(7,PLOT_ARROW,218);
   PlotIndexSetInteger(7,PLOT_ARROW_SHIFT,-ArrowShift);
   PlotIndexSetDouble(7,PLOT_EMPTY_VALUE,EMPTY_VALUE);
   ArrayInitialize(ExtMapBuffer8,EMPTY_VALUE);

   handle1=iFractals(_Symbol, PERIOD_M15);
   handle2=iFractals(_Symbol, PERIOD_H1);
   handle3=iFractals(_Symbol, PERIOD_H4);
   handle4=iFractals(_Symbol, PERIOD_D1);

   return(0);
  }

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[])
  {
   int B1 = BarsCalculated(handle1);
   int B2 = BarsCalculated(handle2);
   int B3 = BarsCalculated(handle3);
   int B4 = BarsCalculated(handle4);

   CopyBuffer(handle1,0,0,B1,ExtMapBuffer1);
   CopyBuffer(handle1,1,0,B1,ExtMapBuffer2);
   CopyBuffer(handle2,2,0,B2,ExtMapBuffer3);
   CopyBuffer(handle2,3,0,B2,ExtMapBuffer4);
   CopyBuffer(handle3,4,0,B3,ExtMapBuffer5);
   CopyBuffer(handle3,5,0,B3,ExtMapBuffer6);
   CopyBuffer(handle4,6,0,B4,ExtMapBuffer7);
   CopyBuffer(handle4,7,0,B4,ExtMapBuffer8);

   return(rates_total);
  }
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   return;
  }
 

Offensichtlich fehlen einige bedingte Prüfungen innerhalb von OnCalculate sowie in externen Funktionen vom Typ bool oder ich verwende einfach nicht richtig, was ich bereits in meinem Code habe. Auch, vielleicht Arrays müssen korrekt an der richtigen Stelle initialisiert werden und als Zeitreihen gesetzt?

Grund der Beschwerde: