Welches Design ist richtig? - Seite 6

 
valenok2003:
Im while-Code , nur um zu verzögern, während der Thread beschäftigt ist.

Dann müssen Sie die Raten aktualisieren: RefreshRates(). Andernfalls werden Sie alte asc- und Gebotswerte verwenden. Oder fragen Sie nach asc\bid von MarketInfo.
 
VladislavVG:

Dann müssen Sie die Raten aktualisieren: RefreshRates(). Andernfalls verwenden Sie die alten Ask- und Bid-Werte. Oder fragen Sie auf MarketInfo.

Das ist also die Stelle, an der der Hund arbeitet.

Dieser Entwurf hat funktioniert:

//+------------------------------------------------------------------+
//|                                           CloseThisSymbolAll.mq4 |
//+------------------------------------------------------------------+
int start()
{
//----
  for (int trade = OrdersTotal()-1; trade >= 0; trade--) 
  {
    OrderSelect(trade, SELECT_BY_POS, MODE_TRADES);
    if (OrderSymbol() == Symbol()) 
    { 
      while (!IsTradeAllowed()) Sleep(1000);
      RefreshRates();
      if(OrderType() == OP_BUY ) OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Bid,Digits), 5, CLR_NONE);
      if(OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Ask,Digits), 5, CLR_NONE);
    }
  }
//----
   return(0);
}
//+------------------------------------------------------------------+

Wenigstens hat es beim ersten Mal geklappt.

Ich danke Ihnen!

 
VladislavVG:

Dann müssen Sie die Raten aktualisieren: RefreshRates(). Andernfalls werden Sie alte asc- und Gebotswerte verwenden. Oder fragen Sie nach asc\bid auf MarketInfo.

Ich danke Ihnen!

Ich werde das auch in meinem EA korrigieren.

 
valenok2003:



Das ist also die Lage des Hundes.

Das ist das Design, das es funktionieren lässt.

Wenigstens hat es beim ersten Mal geklappt.


Fast - ein weiterer Zustand muss korrigiert werden:


  for (int trade = OrdersTotal()-1; trade >= 0; trade--) 
  {
    if(!OrderSelect(trade, SELECT_BY_POS, MODE_TRADES)) break;
    ...........................
Wenn die Bestellung nicht rausgegangen ist, gibt es nichts zu tun.

Viel Glück dabei.

 
VladislavVG:


Fast - ein weiterer Zustand muss korrigiert werden:

Wenn der Haftbefehl nicht ausgestellt wird, gibt es nichts zu tun.

Ja, das macht Sinn. Dies ist ein Versehen in der Schleife
while(OrdersTotal()>0)
 
valenok2003:
fünf
Dort hatten Sie Schlupf = 5, und das reicht nicht für fünfstellige Kurse.
 

Zusammengefasst:


//+------------------------------------------------------------------+
//|                                           CloseThisSymbolAll.mq4 |
//+------------------------------------------------------------------+
int start()
{
//----
  for (int trade = OrdersTotal()-1; trade >= 0; trade--) 
  {
    if(!OrderSelect(trade, SELECT_BY_POS, MODE_TRADES)) break;
    if (OrderSymbol() == Symbol()) 
    { 
      while (!IsTradeAllowed()) Sleep(1000);
      RefreshRates();
      if(OrderType() == OP_BUY ) OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Bid,Digits), slippage, CLR_NONE);
      if(OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Ask,Digits), slippage, CLR_NONE);
    }
  }
//----
   return(0);
}
//+------------------------------------------------------------------+

oder gibt es noch andere Kommentare?

 
khorosh:
Dort hatten Sie Schlupf = 5, und das reicht nicht für fünfstellige Kurse.
Auf einem relativ ruhigen Markt sind 5 Punkte IMHO völlig ausreichend.
 
Es gab eine Zeit, in der die Codebasis einen eigenen Satz zum Schließen verschiedener Typen veröffentlichte.
Dateien:
 
https://www.mql5.com/ru/code/mt4