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

 
007yurik:

Freunde, helft einem Dummkopf. Die Idee ist die folgende: Wenn die "Ind"-Variable den eingestellten Wert erreicht, wechseln Sie zum Warten auf eine Richtungsänderung von "Value", während Sie darauf warten, dass "Ind" nicht mehr abgeglichen wird.


   if(Ind[0]<=-0.7)
     {
      while(Value[3]>Value[2]<Value[1])
        {
         if(CopyBuffer(InpInd2_Handle,1,SignalBar,3,Value)<=0)
           {
            Recount=true;
            return;
           }
        }
      if(BuyPosOpen) BUY_Open=true;
     }


Was ist der richtige Weg, um dies zu tun?

   if(Ind[0]<=-0.7)
     {

ersetzen durch

   bool pravda=false;

   if(pravda || Ind[0]<=-0.7)
     {
      pravda=true;
 
007yurik:

...


pivomoe:

...


Bitte fügen Sie den Code korrekt ein:Fügen Sie den Code korrekt in das Forum ein

 
007yurik:

Freunde, helft einem Dummkopf. Die Idee ist die folgende: Wenn die Variable "Ind" den eingestellten Wert erreicht, wird auf eine Richtungsänderung von "Value" gewartet, ohne dass "Ind" während des Wartens erneut überprüft wird.

Was ist die richtige Vorgehensweise???

Ich glaube, hier liegt ein Fehler vor:

while(Value[3]>Value[2]<Value[1])

Das muss es auch sein:

while(Value[3]>Value[2] §§ Value[2]<Value[1])
 
Ivan Ivanov:

Ich glaube, hier liegt ein Irrtum vor:

Das muss es auch sein:

Wo befindet sich das Absatzsymbol auf der Tastatur? Ich dachte, sie sei deaktiviert worden...

while(Value[3]>Value[2] §§  Value[2]<Value[1])
 
Ivan Ivanov:

Ich glaube, hier liegt ein Irrtum vor:

So sollte es sein:

Dies ist in der Regel nicht der Fall, Sie können sich mit
while(Value[2]<Value[1])
 
pivomoe:

ersetzen durch

Wenn ich es richtig gemacht habe (was zu bezweifeln ist), bleibt es hängen, anscheinend kommt es nicht aus der Schleife heraus.
 bool pravda=false;

   if(pravda || Ind[0]<=-0.7)
   pravda=true;
   
   {   
      
      while(Value[2]<Value[1])
         {
         if(CopyBuffer(InpInd2_Handle,1,SignalBar,3,Value)<=0) {Recount=true; return;}                 
          }
          
         if(BuyPosOpen) BUY_Open=true;     
                                                  
         if(SellPosClose) SELL_Close=true;
         UpSignalTime=datetime(SeriesInfoInteger(Symbol(),InpInd_Timeframe,SERIES_LASTBAR_DATE))+TimeShiftSec;
         }
 
007yurik:
Wenn ich es richtig gemacht habe (was zu bezweifeln ist), bleibt er hängen und kommt offenbar nicht aus dem Zyklus heraus.
 if(pravda || Ind[0]<=-0.7)
 {
   pravda=true;         
 
pivomoe:
Versucht, dasselbe: Wenn Ind über das Niveau hinausgeht, bleibt es hängen.
 
1
007yurik:
Versucht, dasselbe: Wenn Ind das Niveau überschreitet, bleibt es hängen.

1. bool pravda global machen.(https://www.mql5.com/ru/docs/basis/variables/global)

2. Ersetzen Sie while durch if.

3. Wenn if (aus Schritt 2) funktioniert, geben Sie pravda=false zurück.

Документация по MQL5: Основы языка / Переменные / Глобальные переменные
Документация по MQL5: Основы языка / Переменные / Глобальные переменные
  • www.mql5.com
Глобальные переменные создаются путем размещения их объявлений вне описания какой-либо функции. Глобальные переменные определяются на том же уровне, что и функции, т. е. не локальны ни в каком блоке. Область видимости глобальных переменных - вся программа, глобальные переменные доступны из всех функций, определенных в программе...
 
007yurik:

Freunde, helft einem Dummkopf. Die Idee ist die folgende: Wenn die Variable "Ind" ein bestimmtes Niveau erreicht, gehen wir dazu über, auf eine Richtungsänderung von "Value" zu warten, während wir darauf warten, dass "Ind" nicht erneut überprüft wird.




Was ist der richtige Weg, um es zu tun???

Sind Sie sicher, dass der Indikator während der while-Schleife neu berechnet wird?
Grund der Beschwerde: