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

 
novichok2018: Ich danke Ihnen! Ich verstehe die Konventionen, ich werde sie berücksichtigen. Aber um das vorgeschlagene Skript zu verstehen, reichen meine Kenntnisse von mcl4 leider nicht aus. Tut mir leid :( .

Ich mache alle meine Experimente mit Skripten. Führen Sie das Skript in Ihrem Terminal aus. Ändern Sie einige Zeilen oder werfen Sie sie weg. Sehen, was passiert

 

Ich möchte die Min-Max von Indikator-Daten zu finden, ich habe "alles nach dem Handbuch" getan, aber es fühlt sich wie die Indikator-Daten nicht in ein Array geschrieben wird. MQL pro sagt mir, wo ich einen Fehler gemacht habe.

     
int limit=40000;
     
      double ArrayGreen[];  
      ArrayResize(ArrayGreen,limit);
      for (int i=0;i>=limit;i++)
         {
            ArrayGreen[i] =iCustom(NULL,0,"Kolier_SuperTrend_Indi",ATR_Period,ATR_Multiplier,0,1);
         }
      int max=ArrayMaximum(ArrayGreen,Quant,0); 
      double iMaximum = ArrayGreen[max];
      Print("Max = ",ArrayGreen[max]," at index=",max); 

      
     
      double ArrayRad[];  
      ArrayResize(ArrayRad,limit);
      for (int i=0;i>=limit;i++)
         {
            ArrayRad[i] = iCustom(NULL,0,"Kolier_SuperTrend_Indi",ATR_Period,ATR_Multiplier,1,1);
         }
     int min=ArrayMinimum(ArrayRad,Quant_Bars,0); 
     double iMinimum = ArrayRad[min];
     Print("Min= ",ArrayRad[min]," at index=",min); 
 
Corvin85:

Ich möchte die Min-Max von Indikator-Daten zu finden, ich habe "alles nach dem Handbuch" getan, aber es fühlt sich wie die Indikator-Daten nicht in ein Array geschrieben wird. Wenn Sie ein MQL-Profi sind, teilen Sie mir bitte mit, wo ich einen Fehler gemacht habe.

Der Wert der variablen Grenze ist größer als Null. Daher wird keine der Schleifen ausgeführt. Infolgedessen werden ArrayGreen und ArrayRad unbesetzt bleiben.

Wenn wir den Grenzwert auf Null oder weniger setzen, kehrt das Programm zur ersten Schleife zurück.

Daher müssen wir die Bedingung der Schleifen ändern. Höchstwahrscheinlich sollte es so gemacht werden:

 for (int i = 0; i < limit; i++)
 
Corvin85:

Ich möchte die Min-Max von Indikator-Daten zu finden, ich habe "alles nach dem Handbuch" getan, aber es fühlt sich wie die Indikator-Daten nicht in ein Array geschrieben wird. Ich habe einen guten MQL-Profi, bitte beraten Sie mich, wo ich einen Fehler gemacht habe.

Außerdem wird in iCustom(...........); der letzte übergebene Parameter i

 for (int i=0;i<limit;i++)
         {
            ArrayGreen[i] =iCustom(NULL,0,"Kolier_SuperTrend_Indi",ATR_Period,ATR_Multiplier,0,i);
         }

etwa so.

 
Danke! Es funktioniert!
 

Guten Tag!


Um das Testen zu erleichtern, möchte ich die Schaltfläche zum Aktivieren und Deaktivieren der Bedingung entfernen, damit ich nicht jedes Mal in den Code gehen muss und die Bedingung nicht in Text ändern muss, damit sie nicht in Kraft tritt.

Mit anderen Worten: Im Moment mache ich es so:

if ((Close[1]<=High[2])&&(Close[1]>=Low[2])&&(Open[1]<=High[2])&&(Open[1]>=Low[2]))
{

So schalten Sie es aus:

//if ((Close[1]<=High[2])&&(Close[1]>=Low[2])&&(Open[1]<=High[2])&&(Open[1]>=Low[2]))
//{

Versucht, die Aktivierung und Deaktivierung in Eingabe bool Y=True; (Wo Y ist die Bedingung) Einstellungen zu ziehen, weisen Sie Y die Bedingung, und Split-Zweige, wenn die Bedingung tut oder nicht über else if arbeiten. Aber irgendetwas hat nicht geklappt.

Können Sie uns beraten, wie wir in solchen Fällen vorgehen sollen?

 
YanSay:

Guten Tag!


Um das Testen zu erleichtern, möchte ich die Schaltfläche zum Aktivieren und Deaktivieren der Bedingung entfernen, damit ich nicht jedes Mal in den Code gehen muss und die Bedingung nicht in Text ändern muss, damit sie nicht in Kraft tritt.

Mit anderen Worten: Im Moment mache ich es so:

So schalten Sie es aus:

Ich habe versucht, das Aktivieren und Deaktivieren in die Eingabe bool Y=True; (Wo Y die Bedingung ist) zu ziehen, Y der Bedingung zuzuweisen und Zweige aufzuteilen, wenn die Bedingung über else if in Kraft ist oder nicht ist. Aber irgendetwas hat nicht geklappt.

Bitte geben Sie mir einen Rat, was in solchen Fällen zu tun ist.

Man könnte Folgendes tun

input bool FLAG =True;


if (FLAG && (Close[1]<=High[2])&&(Close[1]>=Low[2])&&(Open[1]<=High[2])&&(Open[1]>=Low[2]))
{
 
Vitaly Muzichenko:

Sie könnten dies tun.

Der Grund dafür ist, dass der Algorithmus die Bedingung "Falsch" ignoriert und mit den nächsten Bedingungen fortfährt.

input bool FLAG =False;

Der Algorithmus wird nicht weitergehen, während er diese Bedingung ignorieren sollte, wenn der Code falsch ist, und zu den nächsten Bedingungen übergehen sollte.

In meinem Fall besteht die einzige Möglichkeit darin, 2 Zweige anzugeben?

input bool FLAG =True;

if (FLAG=True)
{(Close[1]<=High[2])&&(Close[1]>=Low[2])&&(Open[1]<=High[2])&&(Open[1]>=Low[2]))
 {//следующие условия
 }
}

if (FLAG=False)
 {//следующие условия
 }

Oder gibt es einen einfacheren Weg?

 
YanSay:

In Ihrer Version stellt sich heraus, dass, wenn der Wert

Der Algorithmus wird nicht weitergehen, während er diese Bedingung ignorieren sollte, wenn sie falsch ist, und zu den nächsten Bedingungen übergehen sollte.

In meinem Fall besteht die einzige Möglichkeit darin, 2 Verzweigungen zu schreiben?

Oder gibt es einen einfacheren Weg?

//+------------------------------------------------------------------+
input bool FLAG =True;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
  if(FLAG) {
    if(Close[1]<=High[2]) && (Close[1]>=Low[2]) && (Open[1]<=High[2]) && (Open[1]>=Low[2])
    //...
  } else {
    //следующие условия
  }
//+------------------------------------------------------------------+
 
YanSay:

In Ihrer Version stellt sich heraus, dass, wenn der Wert

Der Algorithmus wird nicht weitergehen, während er diese Bedingung ignorieren sollte, wenn sie falsch ist, und zu den nächsten Bedingungen übergehen sollte.

In meinem Fall besteht die einzige Möglichkeit darin, 2 Verzweigungen zu schreiben?

Oder gibt es einen einfacheren Weg?

Nur auf diese Weise

if(!FLAG || (Close[1]<=High[2] && Close[1]>=Low[2] && Open[1]<=High[2] && Open[1]>=Low[2]))
Grund der Beschwerde: