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

 
Rielaborato un po', ora faccio while invece del ciclo for principale, ma ancora nessuna occorrenza della prima condizione nel secondo ciclo annidato!
int GetMagic(Order &order)
{
  int magic = 0;
  int unique = 0;
  
  if(order.cmd == OP_SELLSTOP || order.cmd == OP_BUYSTOP){
    if(OrdersTotal()){
      do{
        magic++;
        for(int i = OrdersTotal(); i > 0 ; i --){
          if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){
            Print( "!!!!!!!!!!!!!!!!!!!");//<----------НЕ ПРИНТУЕТСЯ
            if(magic != OrderMagicNumber())
              unique ++;
          }
        }
      }while(unique < OrdersTotal());
    }else return (magic + 1);
  }
  return magic;
}
 
MakarFX #:

Davvero?!))

L'avete provato?

Ho avuto il cambio di colore che funziona così per molto tempo, ma non sulla linea, anche se non dovrebbe fare differenza

                     if(SymOpen < SymClose) {
                       CColor=Mirroring?BearBarColor:BullBarColor;
                        SetIndexStyle(32+(num*8),DRAW_HISTOGRAM,STYLE_SOLID,Mirroring?1:WidthOC,CColor); SetIndexLabel(32+(num*8), SubSymbol);
                        SetIndexStyle(33+(num*8),DRAW_HISTOGRAM,STYLE_SOLID,Mirroring?WidthOC:1,CColor); SetIndexLabel(33+(num*8), SubSymbol);
                        SetIndexStyle(34+(num*8),DRAW_HISTOGRAM,STYLE_SOLID,Mirroring?WidthOC:1,CColor); SetIndexLabel(34+(num*8), SubSymbol);
                        SetIndexStyle(35+(num*8),DRAW_HISTOGRAM,STYLE_SOLID,Mirroring?1:WidthOC,CColor); SetIndexLabel(35+(num*8), SubSymbol);

PS. Guardando l'altro mio codice, cambia il colore della linea lì

SetIndexStyle(num,DRAW_LINE,STYLE_SOLID,1,BullColor);
 
Vitaly Muzichenko #:

Ho avuto un cambio di colore che funziona così per molto tempo, ma non sulla linea, anche se non dovrebbe fare differenza

PS. Guardando l'altro mio codice, cambia il colore della linea

SetIndexStyle(num,DRAW_LINE,STYLE_SOLID,1,BullColor);

Cambia l'intera linea, non la sezione desiderata

 
MakarFX #:

Cambia l'intera linea, non la sezione giusta

Beh, ha scritto che bisogna cambiare l'intera linea

 
Allora, ho adattato il codice per il test, prova ad eseguirlo e ottieni un ciclo infinito sul secondo ordine :(
File:
 
Nerd Trader #:
Allora, ho adattato il codice per il test, prova ad eseguirlo e ottieni un ciclo infinito sul secondo ordine :(

Me lo chiedo! Perché?

Perché questo, che significato sacro ha?

int GetMagic(Order &order)
{
  int magic = 0;
  int unique = 0;
  
  if(order.cmd == OP_SELLSTOP || order.cmd == OP_BUYSTOP){
    if(OrdersTotal()){
      do{
        magic++;
        for(int i = OrdersTotal(); i > 0 ; i --){
          if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){
            Print( "!!!!!!!!!!!!!!!!!!!");//<----------НЕ ПРИНТУЕТСЯ
            if(magic != OrderMagicNumber())
              unique ++;
          }
        }
      }while(unique < OrdersTotal());
    }else return (magic + 1);
  }
  return magic;
}

---

Stai cercando per numero, quindi cerca per numero.

Se hai 2 mandati, li esaminerà, ma non può trovare il 3° o il 23°.

---

Non mi sembra che tu abbia ben chiaro il compito, quindi questa è la soluzione.

 
Nerd Trader #:

il ciclo non è impostato correttamente:

for(int i = OrdersTotal(); i > 0 ; i --){

dovrebbe essere così:

for(int i = OrdersTotal()-1; i >= 0 ; i --){
 
Aleksei Stepanenko #:

il ciclo non è impostato correttamente:

dovrebbe essere così:

Sì, funziona! Ma perché prima è entrato ancora il secondo ciclo for e se inserisco la prossima linea Print() - sarà eseguito (all'infinito) ma non andrà oltre? In ogni caso, grazie, ora posso almeno andare a dormire.
 
Vitaly Muzichenko #:

Me lo chiedo! Perché?

Perché questo, che significato sacro ha?

---

Stai cercando per numero, quindi cerca per numero.

Se hai 2 mandati, li esaminerà, ma non può trovare il 3° o il 23°.

---

Non mi sembra che tu abbia ben chiaro il compito, quindi questa è la soluzione.

È solo che il majik deve essere unico, cioè non deve avere una corrispondenza con gli altri.
 
Aleksei Stepanenko #:

il ciclo non è impostato correttamente:

dovrebbe essere così:

Qual è la differenza? E la numerazione degli ordini non parte da zero e non da uno?