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

 
Sergey Voytsekhovsky:

Ja, in der Tat, das war mir nicht aufgefallen. Es sieht besser aus, es gibt weniger Buchstaben.

Gibt es keine Möglichkeit, drei Versionen (ich weiß nicht, wie ich es richtig sagen soll) unter einem Betreiber zusammenzufassen?

Nur geschweifte Klammern - sie schränken die Bedingung ein.

 
int a,b,c,d,e,f,g,j;
a=10;
b=5;
d=3;
f=4;
j=1;
a>b?{c=d;e=f;g=j}:{c=0;e=0;g=0};
Print("c=",c," e=",e," g=",g);

Ich habe versucht, eine solche Konstruktion zu zeichnen, und der Compiler spuckte mir etwas übelriechendes entgegen. Wo liegt der Fehler?

 
Sergey Voytsekhovsky:

UURRAA, und die Seele hat gesungen. Alexey, ich danke dir sehr !!!!!

Es hat alles funktioniert, ich verstehe nicht ganz , wie es möglich ist, ohne das Array auszu kommen.

weil seine Beschreibung gelöscht wurde. Sie können also auf das zusätzliche Feld hier verzichten?


#property indicator_color3  clrGreen,clrRed

Dies ist das Feld.

 
Sergey Voytsekhovsky:

Ja, in der Tat, das war mir nicht aufgefallen. Es sieht besser aus, es gibt weniger Buchstaben.

Gibt es keine Möglichkeit, drei Versionen (ich weiß nicht, wie ich es richtig sagen soll) unter einem Betreiber zusammenzufassen?

Ja, das können wir. Erstellen Sie zwei benutzerdefinierte Funktionen und rufen Sie sie auf.

int m = 5;//0;//
m = m == 0 ? f1 : f2;

int f1()
 {
  return(1);
 }
int f2()
 {
  return(2);
 }
 
Konstantin Nikitin:

Das ist es, was ich damit sagen will. In Ordnung, wir sind fertig. Solange er weiß, was vor sich geht...

Ich habe es verstanden, danke.
Ich bin nur verwirrt. Das ist alles neu für mich.

 
Alexey Viktorov:

Sie können. Erstellen Sie zwei benutzerdefinierte Funktionen und rufen Sie sie auf.

Habe ich Sie richtig verstanden?

ColorHistogram_2Colors[i]=ExtMainBuffer[i]>=50?ColorUp(i):ColorDown(i);
//+------------------------------------------------------------------+ 
int ColorUp(int i)
 {
   ColorHistogram_2Buffer1[i]=50;
   ColorHistogram_2Buffer2[i]=ExtMainBuffer[i];
  return(0);
 }
int ColorDown(int i)
 {
   ColorHistogram_2Buffer1[i]=ExtMainBuffer[i];
   ColorHistogram_2Buffer2[i]=50;
  return(1);
 }

Ich habe dies im Indikator getan - es funktioniert.

 
Sergey Voytsekhovsky:

Habe ich Sie richtig verstanden?

Ich habe es so im Indikator vorgeschrieben - es funktioniert.

Wenn es funktioniert, ist es richtig. Aber ich würde es nicht auf diese Weise machen.

Zunächst einmal würde ich keine Änderungen an den Puffern vornehmen. Es reicht aus, wenn Sie immer 50 in einen der beiden Bereiche schreiben, ohne dass es irgendwelche Bedingungen gibt.

Und in den zweiten Puffer, um den Wert größer oder kleiner als 50 setzen. Bei der Bedingung <=> sollte dann nur noch Farbe eingesetzt werden. Und keine separaten Funktionen.

 
Alexey Viktorov:

Wenn es funktioniert, ist es richtig. Aber so würde ich es nicht machen.

Zunächst einmal würde ich keine ausgefallene Änderung von Puffern vornehmen, bei denen =50. Es reicht aus, wenn Sie immer 50 in einen der beiden Bereiche schreiben, ohne dass es irgendwelche Bedingungen gibt.

Und in den zweiten Puffer, um den Wert größer oder kleiner als 50 zu setzen. Bei der Bedingung <=> müssen Sie dann nur noch die Farbe zuweisen. Und keine separaten Funktionen.

Ich würde Ihnen zustimmen, wenn die Bedingung <>50 nur die Farbe definieren würde, aber sie ist auch der Anfang/Ende der Histogrammkerze. Deshalb werde ich nicht streiten, sondern versuchen, es zu überprüfen, obwohl Sie wahrscheinlich recht haben.

 
Alexey Viktorov:

Wenn es funktioniert, ist es richtig. Aber so würde ich es nicht machen.

Ja, in der Tat kann einer der beiden DRAW_COLOR_HISTOGRAM2-Puffer, die den Anfang und das Ende der Kerze definieren, entweder der Anfang oder das Ende sein. Alles ist jetzt viel einfacher:

   ColorHistogram_2Buffer1[i]=50;
   ColorHistogram_2Buffer2[i]=ExtMainBuffer[i];
   ColorHistogram_2Colors [i]=ExtMainBuffer[i]>=50?0:1;

Danke für die Wissenschaft.

 

Wie werden die Werte von INDICATOR_MAXIMUM und INDICATOR_MINIMUM beim Umschalten der Modi zurückgesetzt?

Der Punkt ist, dass diese Werte in dem einen Modus verwendet werden und in dem anderen nicht. Wenn man in den Modus wechselt, in dem diese Maxima und Minima nicht benötigt werden, werden sie aus irgendeinem Grund gespeichert. Dieses Problem besteht sowohl in MQL4 als auch in MQL5.

Wenn der Indikator beispielsweise im ersten Modus ausgeführt wird, sind die Begrenzungen nicht erforderlich und alles funktioniert korrekt.

Der zweite Modus legt die Grenzen für Maximum und Minimum des Indikatorfensters fest. Beim Wechsel vom ersten in den zweiten Modus funktioniert alles korrekt


Beim Wechsel vom zweiten zum ersten Modus (die Grenzen werden im ersten Modus nicht verwendet) werden diese Maxima und Minima jedoch gespeichert und der Benutzer kann die tatsächlichen Indikatorwerte nicht sehen


Der Code in MQL4 befindet sich in den angehängten Dateien

Ist jemand auf dieses Problem gestoßen? Hat jemand eine Idee, wie man das Problem lösen kann?

Dateien:
test.mq4  4 kb
Grund der Beschwerde: