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

 
novichok2018:

Ja, danke, ich habe die Seite gelesen. Meine MKL4-Kenntnisse reichten nur aus, um zu bemerken, dass in meiner Schleife die Positionen von Null bis zur letzten gehen, während es im Beispiel umgekehrt ist, von der letzten bis zur Null.Ich weiß immer noch nicht, wo ichdie Pause einfügen soll.Als ich die Schleife umkehrte, schlossen sich die Positionen überhaupt nicht mehr.

Beim Schließen von Positionen muss die Schleife umgekehrt werden, damit keine Positionen übersprungen werden. Der break-Operator wird in dieser Schleife nicht benötigt - er ist die Unterbrechung der Schleife und der Ausstieg aus ihrem Körper. Was Sie brauchen, ist continue - der Übergang zur nächsten Schleifeniteration.

Und nur Sie wissen, warum sie nicht geschlossen wird und was Sie dafür getan haben.

 
Artyom Trishkin:

Beim Schließen von Positionen muss die Schleife umgekehrt werden, damit keine Positionen übersprungen werden. In dieser Schleife brauchen Sie keinen break-Operator - er unterbricht und verlässt den Schleifenkörper. Was Sie brauchen, ist continue - der Übergang zur nächsten Schleifeniteration.

Nur Sie wissen, warum sie nicht geschlossen werden kann und was Sie dafür getan haben.


Ich habe die Anweisungen genau befolgt. Hier ist der korrigierte Code:

void ClosePoz()
  { int total=OrdersTotal();
  if(total>0)
   {
      for(int i=OrdersTotal()-1;i>=0;i--)
      {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
         {double WPR0 = iWPR(NULL,PERIOD_M5,bars,0);
         if(OrderType()==OP_BUY && MathAbs(WPR0)>80)
           OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_BID),int(MarketInfo(OrderSymbol(),MODE_DIGITS))),slippage,clrNONE);                  
         }
         continue;
      }
    } 
  } 
  

Jetzt werden beide Positionen geschlossen, aber eine wird nicht geschlossen, sondern es wird auf die zweite gewartet. Es ist verrückt. Ich dachte, ich hätte die FunktionClosePoz() vielleicht an einer falschen Stelle eingefügt. Das Ergebnis ist Null. Ich schreie um Hilfe. Es kann nicht sein, dass niemand in der Lage ist, das Problem zu lösen.

 

Wie kann ich mir das ursprüngliche Konto (100 $) auszahlen lassen?

 
novichok2018:

Hat genau nach Anweisung gearbeitet. Hier ist der korrigierte Code:

Jetzt werden beide Positionen geschlossen, aber nicht die eine, sondern die andere wird abgewartet. Das ist verrückt. Ich dachte, ich hätte die FunktionClosePoz() vielleicht an einer falschen Stelle eingefügt. Das Ergebnis ist Null. Ich schreie um Hilfe. Es kann nicht sein, dass niemand in der Lage ist, das Problem zu lösen.

Ich weiß es nicht. Ich habe es auf mein Knie gemalt. Natürlich kann ich das nicht überprüfen - Ihre Bedingungen sind nicht ausreichend, also machen Sie es selbst.

//+------------------------------------------------------------------+
void ClosePoz(const string symbol_name,const int magic_number,const double wpr_buy,const double wpr_sell)
  { 
   int total=OrdersTotal();
   for(int i=total-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS))
        {
         ENUM_ORDER_TYPE type=OrderType();
         if(type>ORDER_TYPE_SELL)               continue;
         if(OrderMagicNumber()!=magic_number)   continue;
         if(OrderSymbol()!=symbol_name)         continue;
         int digits=(int)SymbolInfoInteger(OrderSymbol(),SYMBOL_DIGITS);
         if(type==ORDER_TYPE_BUY)
           {
            double close_price=SymbolInfoDouble(OrderSymbol(),SYMBOL_BID);
            if(iWPR(NULL,PERIOD_M5,bars,0))>wpr_buy)
              {
               ResetLastError();
               if(!OrderClose(OrderTicket(),OrderLots(),close_price,slippage,clrNONE);
                  Print(__FUNCTION__" > Позиция Buy #",OrderTicket()," не закрыта. Ошибка: ",GetLastError());
              }
           }                
         else
           {
            double close_price=SymbolInfoDouble(OrderSymbol(),SYMBOL_ASK);
            if(iWPR(NULL,PERIOD_M5,bars,0))<wpr_sell)
              {
               ResetLastError();
               if(!OrderClose(OrderTicket(),OrderLots(),close_price,slippage,clrNONE);
                  Print(__FUNCTION__" > Позиция Sell #",OrderTicket()," не закрыта. Ошибка: ",GetLastError());
              }
           }                
        }
     }
  } 
//+------------------------------------------------------------------+
Und WPR innerhalb der Funktion zu überprüfen - das ist irgendwie nicht normal. WPR sollte eine der Bedingungen für den Aufruf der Schließfunktion sein
 
Es ist nicht möglich, die Anzahl der Lose für einen schwebenden Auftrag zu ändern.
 
igrok333:
Ich verstehe, dass Sie die Anzahl der Lose in einem schwebenden Auftrag nicht ändern können.

Eröffnen Sie nur ein zusätzliches, mit dem von Ihnen benötigten Volumen.

 
Alekseu Fedotov:

Öffnen Sie nur ein zusätzliches Fenster mit dem gewünschten Volumen

Es kann einfacher sein, eine bestehende zu löschen und eine neue einzurichten. Schließlich muss das gewünschte Volumen nicht größer sein als das bereits platzierte. Und es ist einfacher, einem Befehl zu folgen.

 

Guten Tag, ich habe eine Frage, ich werde erklären, wie ich sie verstehe

Gibt es einen schriftlichen Algorithmus für Expert Advisors, die Kerzen ganz unten kaufen und Kerzen ganz oben verkaufen?

wie kann ich es in einen EA einbauen?
 
iisvlg: Gibt es einen schriftlichen Algorithmus für EAs, der eine Kaufkerze ganz unten und eine Verkaufskerze ganz oben setzt und wie man ihn in einen EA einbaut?

Das wäre großartig!!!

 
iisvlg:

Guten Tag, ich habe eine Frage, ich werde erklären, wie ich sie verstehe

Gibt es einen schriftlichen Algorithmus für Expert Advisors, die Kerzen ganz unten kaufen und Kerzen ganz oben verkaufen?

Und wie passt man es in einen EA ein?

Setzen Sie BUY LIMIT auf Low, und SELL LIMIT auf High.

Über die Algorithmen, graben Sie die Basis

Grund der Beschwerde: