Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 133

 
Ciao a tutti. Potete dirmi come cambiare questo codice for(int i=OrdersTotal()-1;i>=0;i--){
Al momento sta chiudendo quelli aperti più di recente. Voglio che chiuda prima i primi!
 
Rustam Bikbulatov:
Ciao a tutti. Potete dirmi come cambiare questo codice for(int i=OrdersTotal()-1;i>=0;i--){
Al momento sta chiudendo quelli aperti più di recente. Voglio che chiuda prima i primi!
for(int i=0; i<OrdersTotal(); i++)
 
Rustam Bikbulatov:
Ciao a tutti. Per favore ditemi come cambiare questo codice for(int i=OrdersTotal()-1;i>=0;i--){
Al momento sta chiudendo quelli aperti più di recente. Vuoi che chiuda prima i primi!
for( int i = 0; i < OrdersTotal(); i++ )
   {
    if( /*Функция закрытия. Если вернула истину*/ )
       i--;
   }

Provate in questo modo. Invece dei commenti, dovreste usare la funzione per chiudere l'ordine. Non ho controllato la sua funzionalità. E qui, penso che dovremo chiamare la funzione che calcola la quantità di ordini ogni volta, poiché il numero di ordini diminuirà.

Possiamo anche provare una tale variante:

while( OrdersTotal() > 0 )
   /*Функция закрытия ордера*/
 
Vitaly Muzichenko:
for(int i=0; i<OrdersTotal(); i++)
non si chiude correttamente)
 
Rustam Bikbulatov:
si chiude in modo imbarazzante)
Il modo corretto è quello di ricordare quali ordini devono essere chiusi, ordinare la lista come si vuole e chiudere in quell'ordine

non è corretto, ma per ora (fino a qualche build) funziona: alla chiusura riuscita di i--



 
Rustam Bikbulatov:
Ciao a tutti. Potete dirmi come cambiare questo codice for(int i=OrdersTotal()-1;i>=0;i--){
Al momento sta chiudendo quelli aperti più di recente. Voglio che chiuda prima i primi!

//+------------------------------------------------------------------+
//|           Закрыть все позиции начиная с первых                   |
//+------------------------------------------------------------------+

double CloseOrders()

{
  for(int i=0; i<OrdersTotal(); )
  {
    if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
    break;
    
    if (OrderMagicNumber() != mn)
    break;
    
    int type   = OrderType();

    bool result = false;
    
    switch(type)
    {
      //Close opened long positions
      case OP_BUY       : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), Slippage, CloseColor );
                          break;
      
      //Close opened short positions
      case OP_SELL      : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), Slippage, CloseColor );
                          break;
    }
    
    if(result == false)
    {
      Print("Order " , OrderTicket() , " failed to close. Error:" , GetLastError() );
      i++;
    }  
  }
return (True);
}
// End
 
Rustam Bikbulatov:
Si chiude in modo imbarazzante)
L'opzione che ho suggerito è generalmente incongrua per la chiusura.
Se state parlando di chiudere dal vecchio al nuovo, allora state chiudendo la griglia. Avendo un po' di esperienza con le griglie, tutto quello che posso dire con certezza è che non si dovrebbe scegliere in base all'età della posizione, ma al suo lotto, e si dovrebbe chiudere da un lotto più grande a uno più piccolo. Se la griglia è a lotto unico, allora non c'è differenza nell'ordine di chiusura. Usare funzioni già pronte per chiudere, e non inventare qualcosa che è già stato inventato)
 
Grazie mille ragazzi! Ho già risolto!!!
 
Vitaly Muzichenko:
L'opzione che ho suggerito è generalmente incongrua per la chiusura.
Se state parlando di chiudere dal vecchio al nuovo, allora state chiudendo la griglia. Avendo un po' di esperienza con le griglie, tutto quello che posso dire con certezza è che non si dovrebbe scegliere in base all'età della posizione, ma al suo lotto, e si dovrebbe chiudere da un lotto più grande a uno più piccolo. Se la griglia è a lotto unico, allora non c'è differenza nell'ordine di chiusura. Usare funzioni già pronte per la chiusura, e non inventare qualcosa che è già stato inventato)
Proprio così. Hai ragione!
 
Signori sviluppatori! Buona giornata a tutti. Mi interessa una domanda su come creare un modello di Expert Advisor (script) al momento della creazione. Questo può essere modificato da qualche parte e come si fa?