Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 926

 
Seric29:
Welcher Operator kann verwendet werden, von dem 2 Ergebnisse zurückgegeben werden können? Ich verwende die if-Anweisung , um diese Bedingung zu finden, aber sie kann nicht mehrere Ergebnisse zurückgeben, in diesem Fall muss ich die gleiche Bedingung 2 Mal schreiben, also schreibe ich mit dieser Frage.

Es ist nicht ganz klar, welche Bedingungen geprüft werden, aber vielleicht funktioniert der Schalter für Sie. Und mit TRUE weisen Sie die Werte zu, die Sie benötigen.

 
Gibt es eine Funktion zum Vertauschen der Werte zweier Variablen?
 
pivomoe:
Gibt es eine Funktion zum Vertauschen der Werte zweier Variablen?

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Merkmale der Sprache mql5, Feinheiten und Tricks

fxsaber, 2018.08.26 19:02

Der englische Teil des Forums zeigte
// Обмен значениями между двумя числовыми переменными
#define  SWAP(A, B) { A += B; B = A - B; A -= B; }

 
Artyom Trishkin:

Ich danke Ihnen. Ich werde mich mit diesen Definitionen auseinandersetzen müssen.

 
Hallo! Warum hat die Funktion Bars() unterschiedliche Werte, wenn sie vom Indikator und vom Experten aufgerufen wird, und WIE kann man die Übereinstimmung herstellen?
 
Tango_X:
Hallo! Warum hat die Funktion Bars() unterschiedliche Werte, wenn sie vom Indikator und vom Expert Advisor aufgerufen wird, und wie kann man die Übereinstimmung herstellen?

Code von EA und Indikator anzeigen.

 
Alexey Viktorov:

Code von EA und Indikator anzeigen.

Rufen Sie einfach die Funktion Bars(_Symbol,_Periode) auf

 
Tango_X:

Rufen Sie einfach die Funktion Bars(_Symbol,_Periode) auf

Muss ich einen separaten Ausdruck des Ergebnisses anfordern?

Ich verstehe den Unterschied nicht. Obwohl im Tester diese Variante nicht ausgeschlossen ist, weil es eine Geschichte gibt, über die ich wenig weiß, nur eine vage Erinnerung an das, was ich vor einiger Zeit gelesen habe. Schließlich stellt sich heraus, die Gesamtzahl der verfügbaren Bars. Aber wenn Sie von Zeit zu Zeit fragen, kann es keinen Unterschied geben.

 
Alexey Viktorov:
Die if-Anweisung gibt keinen Wert zurück.

Es gibt zwei Möglichkeiten, bestimmten Variablen in einer separaten Funktion Werte zuzuweisen:

1. Variablen müssen in allen Teilen des Programms sichtbar sein. Das heißt, sie müssen auf der Ebene der globalen Variablen deklariert werden (am Anfang des Codes).

2. Um lokal deklarierte Variablen per Referenz an die Benutzerfunktion zu übergeben. Das heißt, Sie müssen & vor den Variablennamen setzen

Das bedeutet, dass, wenn eine Bedingung erfüllt ist, zwei identische Aktionen durchgeführt werden müssen, z. B.

        if
        (Bar_Op[qt+2]>=Bar_Lo[qt+1]&&Bar_Cl[qt+2]<=Bar_Hi[qt+1]&& 
        Bar_Cl[qt+2]>=Bar_Lo[qt+1]&&Bar_Op[qt+2]<=Bar_Hi[qt+1]&&
        Bar_Op[qt+3]>=Bar_Lo[qt+1]&&Bar_Cl[qt+3]<=Bar_Hi[qt+1]&&
        Bar_Cl[qt+3]>=Bar_Lo[qt+1]&&Bar_Op[qt+3]<=Bar_Hi[qt+1]&&
        Bar_Op[qt+4]>=Bar_Lo[qt+1]&&Bar_Cl[qt+4]<=Bar_Hi[qt+1]&&
        Bar_Cl[qt+4]>=Bar_Lo[qt+1]&&Bar_Op[qt+4]<=Bar_Hi[qt+1])
         {
          int iHgCL=iHighest(_Symbol,PERIOD_D1,MODE_CLOSE,4,qt+1); int iHgOP=iHighest(_Symbol,PERIOD_D1,MODE_OPEN,4,qt+1);
         Price_UrNij = Bar_Cl[iHgCL]>Bar_Op[iHgOP] ? Bar_Cl[iHgCL]:Bar_Op[iHgOP];//провести нижний уровень
         int iLwCL=iLowest(_Symbol,PERIOD_D1,MODE_CLOSE,3,qt+1); int iLwOP=iLowest(_Symbol,PERIOD_D1,MODE_OPEN,3,qt+1);
         Price_UrVerh = Bar_Cl[iLwCL]<Bar_Op[iLwOP] ? Bar_Cl[iLwCL]:Bar_Op[iLwOP];//провести верхний уровень я перепутал записи местами и условие перевёрнуто задом на перёд но для примера вопроса пойдёт

         string Line_TR="Ln_TRUr"+DoubleToString(qt,0);
         vs_Line_TR( Line_TR, iTime(_Symbol,PERIOD_D1,qt+2),  Price_UrNij, iTime(_Symbol,PERIOD_D1,qt), Price_UrNij, clrGreen, DRAW_LINE, 2, false, false);
}

Ich habe Variablen deklariert und nichts wird getan, außer dieser AktionPrice_UrNij = Bar_Cl[iHgCL]>Bar_Op[iHgOP] ? Bar_Cl[iHgCL]:Bar_Op[iHgOP]; oder diese AktionPrice_UrVerh = Bar_Cl[iLwCL]<Bar_Op[iLwOP] ? Bar_Cl[iLwCL]:Bar_Op[iLwOP]; wie kann man 2 identische Aktionen mit oberer und unterer Ebene nach Bedingung durchführen. Kann mir jemand sagen, wie ich es kürzer schreiben kann?

 
Konstantin Nikitin:

Es ist nicht ganz klar, welche Bedingungen geprüft werden, aber vielleicht funktioniert der Schalter für Sie. Und bei TRUE weisen Sie die gewünschten Werte zu.

 if
        (Bar_Op[qt+2]>=Bar_Lo[qt+1]&&Bar_Cl[qt+2]<=Bar_Hi[qt+1]&& 
        Bar_Cl[qt+2]>=Bar_Lo[qt+1]&&Bar_Op[qt+2]<=Bar_Hi[qt+1]&&
        Bar_Op[qt+3]>=Bar_Lo[qt+1]&&Bar_Cl[qt+3]<=Bar_Hi[qt+1]&&
        Bar_Cl[qt+3]>=Bar_Lo[qt+1]&&Bar_Op[qt+3]<=Bar_Hi[qt+1]&&
        Bar_Op[qt+4]>=Bar_Lo[qt+1]&&Bar_Cl[qt+4]<=Bar_Hi[qt+1]&&
        Bar_Cl[qt+4]>=Bar_Lo[qt+1]&&Bar_Op[qt+4]<=Bar_Hi[qt+1])
         {
          int iHgCL=iHighest(_Symbol,PERIOD_D1,MODE_CLOSE,4,qt+1); int iHgOP=iHighest(_Symbol,PERIOD_D1,MODE_OPEN,4,qt+1);
         Price_UrNij = Bar_Cl[iHgCL]>Bar_Op[iHgOP] ? Bar_Cl[iHgCL]:Bar_Op[iHgOP];//провести нижний уровень
         int iLwCL=iLowest(_Symbol,PERIOD_D1,MODE_CLOSE,3,qt+1); int iLwOP=iLowest(_Symbol,PERIOD_D1,MODE_OPEN,3,qt+1);
         Price_UrVerh = Bar_Cl[iLwCL]<Bar_Op[iLwOP] ? Bar_Cl[iLwCL]:Bar_Op[iLwOP];//провести верхний уровень я перепутал записи местами и условие перевёрнуто задом на перёд но для примера вопроса пойдёт

         string Line_TR="Ln_TRUr"+DoubleToString(qt,0);
         vs_Line_TR( Line_TR, iTime(_Symbol,PERIOD_D1,qt+2),  Price_UrNij, iTime(_Symbol,PERIOD_D1,qt), Price_UrNij, clrGreen, DRAW_LINE, 2, false, false);

Sie müssen ausführenPrice_UrNij = Bar_Cl[iHgCL]>Bar_Op[iHgOP] ? Bar_Cl[iHgCL]:Bar_Op[iHgOP]; undPrice_UrVerh = Bar_Cl[iLwCL]<Bar_Op[iLwOP] ? Bar_Cl[iLwCL]:Bar_Op[iLwOP];.

Grund der Beschwerde: