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

 
novichok2018:

Ciao, aiutami a risolvere la situazione: apro una posizione 1 sotto la condizione di Y1, chiusa sotto la condizione di Y2. Ma se prima del verificarsi di U2 ancora una volta si verifica U1 e aperto la posizione 2, non reagisce a venire U2, e si blocca al prossimo U2, che è venuto dopo il nuovo U1 (!) E questa nuova posizione non è chiuso da un nuovo U2, e attende la prossima condizione U1-U2. Come evitarlo? La mia testa mi sta uccidendo. Grazie.

Abbiamo bisogno di un ciclo per chiudere OrderClose(...) di tutti gli ordini sulla condizione U2 - anche se ne abbiamo cento. Possiamo cancellarne uno ad ogni tick - quindi fare quanto segue: 1) per condizione U2, alzare il flag. 2) Se la bandiera è alzata, cancella UN ordine. 3) Se non ci sono ordini, abbassare la bandiera. Poi tutti gli ordini uno dopo l'altro saranno cancellati....

 
STARIJ:

Abbiamo bisogno di un ciclo per chiudere OrderClose(...) di tutti gli ordini per condizione U2 - potete aprirne un centinaio in una volta sola


Sono già in un ciclo. C'è qualcosa che non va?

void ClosePoz()
  { int total=OrdersTotal();
  if(total>1)
   {
      for(int i=0;i<OrdersTotal();i++)
      {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) 
      { Print("позиция для закрытия не найдена");
         break;
      }
      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);                  
         }
      }
    } 
  }   
 
novichok2018:
Sono già in un ciclo. C'è qualcosa che non va?
Non capisco - ho usato l'SRC per inserire il codice, e non riesco a vederlo.
Dovete premere Insert e poi Add
 
STARIJ:
Devi premere Paste e poi Add

Sopra, anche se non nel posto giusto, ma si legge. Ora è nel posto giusto. Oh, mio Dio!

 
novichok2018:

Ho inserito il vostro codice correttamente.

Prima premi il pulsante SRC, poi commetti il tuo codice nella finestra, premi il pulsante "Inserisci" e invia il tuo messaggio.

 
tura210577:

Grazie per la vostra risposta!

Non c'è di che. Provate a usare funzioni multipiattaforma come questa:

//+------------------------------------------------------------------+
//| Returns specified Open by shift                                  |
//+------------------------------------------------------------------+
double Open(const string symbol_name,const ENUM_TIMEFRAMES timeframe,const int shift)
  {
   double array[];
   if(CopyOpen(symbol_name,timeframe,shift,1,array)==1) return array[0];
   return 0;
  }
//+------------------------------------------------------------------+
//| Returns specified High by shift                                  |
//+------------------------------------------------------------------+
double High(const string symbol_name,const ENUM_TIMEFRAMES timeframe,const int shift)
  {
   double array[];
   if(CopyHigh(symbol_name,timeframe,shift,1,array)==1) return array[0];
   return 0;
  }
//+------------------------------------------------------------------+
//| Returns specified Low by shift                                   |
//+------------------------------------------------------------------+
double Low(const string symbol_name,const ENUM_TIMEFRAMES timeframe,const int shift)
  {
   double array[];
   if(CopyLow(symbol_name,timeframe,shift,1,array)==1) return array[0];
   return 0;
  }
//+------------------------------------------------------------------+
//| Returns specified Close by shift                                 |
//+------------------------------------------------------------------+
double Close(const string symbol_name,const ENUM_TIMEFRAMES timeframe,const int shift)
  {
   double array[];
   if(CopyClose(symbol_name,timeframe,shift,1,array)==1) return array[0];
   return 0;
  }
//+------------------------------------------------------------------+
//| Returns specified Time by shift                                  |
//+------------------------------------------------------------------+
datetime Time(const string symbol_name,const ENUM_TIMEFRAMES timeframe,const int shift)
  {
   datetime array[];
   if(CopyTime(symbol_name,timeframe,shift,1,array)==1) return array[0];
   return 0;
  }
//+------------------------------------------------------------------+
 
novichok2018: Sono già in un ciclo. C'è qualcosa che non va?

Ci sono 2 errori nel codice. 1) Questa pagina spiega l'ordine degli ordini nel ciclo. 2) break - uscire dal ciclo e continuare - saltare questo

 
Artyom Trishkin:

Ho inserito il vostro codice correttamente.

Prima premi il pulsante SRC, poi commetti il tuo codice nella finestra, premi il pulsante "Insert" e invia il tuo messaggio.


Grazie. Almeno mi hai fatto ridere della mia scrittura. Qual è il senso della domanda? È tutto corretto nel ciclo?

 
novichok2018:

Grazie. Almeno mi hai fatto ridere della mia scrittura. Qual è il punto? Il ciclo è giusto?

Vi è già stata data una risposta:

Forum sul trading, sistemi di trading automatico e test di strategie di trading

Tutte le domande dei principianti su MQL4, aiuto e discussione su algoritmi e codici

STARIJ, 2018.01.18 20:19

Ci sono 2 errori nel codice. 1) Questa pagina spiega l'ordine degli ordini nel ciclo. 2) break - uscire dal ciclo, e si dovrebbe continuare - saltare questo


 
Artyom Trishkin:

Vi è già stata data una risposta:



Sì, grazie, ho letto la pagina. Solo la mia conoscenza di MKL4 è stata sufficiente per notare che nel mio ciclo le posizioni sono messe in loop da zero all'ultimo, mentre nell'esempio al contrario, dall'ultimo a zero.Non so ancora dove inserirela pausa. E quando ho cambiato il mio ciclo per invertirlo, le posizioni smettono di chiudersi del tutto.

Motivazione: