Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 1361

 
azolotta:

Danke, das hat das Problem wirklich gelöst!!!

Wenn es Ihnen nichts ausmacht, können Sie mir sagen, welche Art von Konstruktion hinzugefügt werden sollte, damit es nicht zwei Hochs/Tiefs in einer Reihe anzeigt, sondern eine Variabilität (Hoch-Tief-Hoch)? Ich verstehe, dass ich eine Prüfung brauche, wie "wenn das vorherige Array-Element hoch war, dann sollte das zweite aufeinanderfolgende hoch nicht in das Array aufgenommen werden, und warten Sie auf niedrig", aber wie sollte es getan werden?

Ich habe es Ihnen bereits erklärt.

Forum zum Thema Handel, automatisierte Handelssysteme und Strategietests.

Alle MQL4 und MQL5 Anfänger Fragen, Hilfe und Diskussion über Algorithmen und Codes

Alexey Viktorov, 2021.01.24 17:15

Wenn Sie das Handelssignal als Indikator verwenden möchten, sollten Sie den neuesten Indikator verwenden.


 
DanilaMactep:

Guten Tag zusammen. Ich habe den Check eingeschaltet, aber ich habe vergessen, ihn zu testen. Gut, dass ich mich heute daran erinnert habe... Hier ist die Überprüfung der Mod-Stop-Ebene

Beim Testen dieser Prüfung treten die in der folgenden Abbildung gezeigten Fehler auf

Und was interessant ist, als ich beraten wurde, fügte ich zu dieser Kontrolle Herrschaft durch 1,5 wie folgt


Diese Hinzufügung löst das Problem nicht, da der Test Fehler wie im folgenden Screenshot zeigt.

Wenn diese Prüfung auf der Mod-Stop-Ebene auskommentiert wird, treten keine Fehler auf. Worin besteht der Fehler bei der Überprüfung? Ohne sie kann man den Gral in der realen Welt nicht starten - wird sofort gebanntL O_o

Ich denke, der Fehler liegt nicht im Test, sondern darin, wo Sie ihn vorgeschrieben haben

und auch hier können Sie "*1,5" entfernen

if(tp<MarketInfo(Symbol(),MODE_STOPLEVEL)*1,5)
if(sl<MarketInfo(Symbol(),MODE_STOPLEVEL)*1,5)
 
DanilaMactep:

Guten Tag zusammen. Ich habe den Check eingeschaltet, aber ich habe vergessen, ihn zu testen. Gut, dass ich mich heute daran erinnert habe... Hier ist die Überprüfung der Mod-Stop-Ebene

Beim Testen dieser Prüfung treten die in der folgenden Abbildung gezeigten Fehler auf

Und was interessant ist, als ich beraten wurde, fügte ich zu dieser Kontrolle Herrschaft durch 1,5 wie folgt


Diese Hinzufügung löst das Problem nicht, da der Test Fehler wie im folgenden Screenshot zeigt.

Wenn diese Prüfung auf der Mod-Stop-Ebene auskommentiert wird, treten keine Fehler auf. Worin besteht der Fehler bei der Überprüfung? Ohne sie kann man den Gral in der realen Welt nicht starten - wird sofort gebanntL O_o

Vergewissern Sie sich, dass der Wert für den Stoppwert angegeben ist , oft ist er 0.

   int    Stoplevel = (int)MarketInfo(Symbol(), MODE_STOPLEVEL);
   int    Spread = (int)MarketInfo(Symbol(), MODE_SPREAD);

   if (Stoplevel == 0) Stoplevel = 2 * Spread;

   

Also etwa so.

 
Alekseu Fedotov:

Prüfen Sie, wie hoch der Stoppwert ist, oft ist er 0.

Zum Beispiel so.

Das braucht er nicht, es heißt "wenn weniger als das Niveau".

 
DanilaMactep:

Guten Tag zusammen.

Grober Fehler... habe es nicht sofort gesehen.

if(sl<MarketInfo(Symbol(),MODE_STOPLEVEL)*1,5) // ЕСЛИ СТОПОЛС МЕНЬШЕ ЧЕМ МИНИМАЛЬНО ДОПУСТИМЫЙ УРОВЕНЬ ЕГО УСТАНОВКИ ТО 
 {
  sl= MarketInfo(Symbol(),MODE_STOPLEVEL)*1,5;//СТОП  ЛОССУ ПРИСВАЕВАЕМ МИНИМАЛЬНО ДОПУСТИМУЮ ВЕЛИЧИНУ ЕГО УСТАНОВКИ
 }

if(tp<MarketInfo(Symbol(),MODE_STOPLEVEL)*1,5) // ЕСЛИ ПРОФИТ МЕНЬШЕ ЧЕМ МИНИМАЛЬНО ДОПУСТИМЫЙ УРОВЕНЬ ЕГО УСТАНОВКИ ТО 
 {
  tp= MarketInfo(Symbol(),MODE_STOPLEVEL)*1,5;// ПРОФИТУ ПРИСВАЕВАЕМ МИНИМАЛЬНО ДОПУСТИМУЮ ВЕЛИЧИНУ ЕГО УСТАНОВКИ
 }

Es sollte DOTS sein.

 
azolotta:
Nicht zwei Hochs/Tiefs hintereinander anzeigen, sondern variabel sein (Hoch-Tief-Hoch)

Sie können dies auf einfache Art und Weise tun. Deklarieren Sie eine globale Variable und ändern Sie sie abhängig von Ereignissen.

int direction=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[])
   {


   for(n=0; n<=limit; n++)
     {
      if(direction>=0 && ((Close[n+1]>Open[n+1] && Open[n+2]>=Close[n+2]) || (Close[n+1]>Open[n+1] && Open[n+3]>Close[n+3])))
        {
         val_index=iLowest(NULL,0,MODE_LOW,3,n+1);
         myAZBuffer[n]=Low[val_index];
         ExtLowBuffer[n]=Low[val_index];
         direction=-1;
        }
      else
         if(direction<=0 && ((Open[n+1]>Close[n+1] && Close[n+2]>=Open[n+2]) || (Close[n+1]<Open[n+1] && Close[n+3]>Open[n+3])))
          {
            val_index=iHighest(NULL,0,MODE_HIGH,3,n+1);
            myAZBuffer[n]=High[val_index];
            ExtHighBuffer[n]=High[val_index];
            direction=1;
           }
      }
.......

In Indikatoren verwenden Sie die Funktion OnCalculate und alle ihre Variablen.

Und Start ist bereits unmodern:)

 
Aleksei Stepanenko:

Sie können dies auf einfache Art und Weise tun. Deklarieren Sie eine globale Variable und ändern Sie sie abhängig von Ereignissen.

In Indikatoren verwenden Sie die Funktion OnCalculate und alle ihre Variablen.

Und Start ist aus der Mode:)

Danke, das ist ein cooler Weg ;-)

habe es überOnCalculate, ich werde dabei sein))

 
Aleksei Stepanenko:

Sie können dies auf einfache Art und Weise tun. Deklarieren Sie eine globale Variable und ändern Sie sie abhängig von Ereignissen.

In Indikatoren verwenden Sie die Funktion OnCalculate und alle ihre Variablen.

Und Start ist bereits unmodern:)

nicht funktionieren, wird der neue Höchst-/Tiefstwert sie nicht berücksichtigen
 

Guten Tag. Wenn ich den Indikator in meinem Expert Advisor aufrufe, wird in der Box ein Fehler angezeigt. Woran liegt das? Und nicht immer. Es funktioniert gut bei

Terminal, funktioniert es einwandfrei.


 
Sergey Fionin:

Guten Tag. Wenn ich den Indikator in meinem Expert Advisor aufrufe, wird in der Box ein Fehler angezeigt. Woran liegt das? Und nicht immer. Es funktioniert gut bei

Terminal, funktioniert es einwandfrei.


Dies ist ein Verstoß gegen das Schreibverbot, ein Schreibverbot im System.