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

 
igrok333:

ha scritto questo codice.

il meta-editore borbotta.



Perché si accoppia?


#proprietà rigorosa

Il vostro pr è inizializzato?

 
igrok333:

ha scritto questo codice.

il meta-editore borbotta.
Perché si accoppia?


#proprietà rigorosa

Dice chiaramente che alla linea 553 è possibile usare una variabile che non ha valore. Provate a scrivere bool pr=false; Questo ingannerà il compilatore ma è meglio controllare bene. Dopo tutto, se il tipo di ordine è un ordine pendente, avrete ancora pr senza un valore...

 
Roman Sharanov:

su quello precedente, e cosa c'è qui da mql4? la funzione OnTick()?

La domanda è stata affrontata nell'articolo sul linguaggio mql4, quindi ho subito notato Time[0].

Dopo uno sguardo più attento, diventa chiaro che si tratta di un array definito dall'utente.

Ed ecco un commento dalla documentazione:

Nota

La funzione usa la chiamata sincrona - significa che la funzione aspetta l'esecuzione di tutti i comandi che sono stati messi nella coda del grafico prima di essere chiamata, quindi questa funzione potrebbe richiedere molto tempo. Dovresti tenerlo a mente se lavori con un gran numero di oggetti sul grafico.

Poiché un oggetto in una coordinata di prezzo può avere diversi valori, è necessario specificare il numero della linea. Questa funzione può essere applicata solo ai seguenti oggetti:

  • Linea di tendenza (OBJ_TREND)
  • Linea di tendenza per angolo (OBJ_TRENDBYANGLE)
  • Linea di Gann (OBJ_GANNLINE)
  • Canale equidistante (OBJ_CHANNEL) - 2 linee
  • Canale di regressione lineare (OBJ_REGRESSION) - 3 linee
  • Canale di deviazione standard (OBJ_STDDEVCHANNEL) - 3 linee
  • Linea con freccia (OBJ_ARROWED_LINE)


 
Artyom Trishkin:

Il vostro pr è inizializzato?

Deve essere inizializzato? Pensavo che fosse sufficiente dichiararlo.
Pensavo che fosse inizializzato da zero quando viene dichiarato.
 
STARIJ:

Dice chiaramente che nella linea 553 è possibile usare una variabile che non ha valore. Provate a scrivere bool pr=false; Questo ingannerà il compilatore, ma è meglio controllare tutto correttamente. Dopo tutto, se il tipo di ordine è un ordine pendente, avrete ancora pr senza valore...

grazie per avermi ricordato gli ordini in sospeso)



È il modo giusto per farlo?

 void zakritj_vse_sdelki()
 {
 bool pr;
 for (int i=OrdersTotal()-1; i>=0; i--)       
   {                                        
   if(OrderSelect(i,SELECT_BY_POS)==true)
      {  
         pr=false; 

         if (OrderType()==OP_BUY)    pr=OrderClose(OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(),MODE_BID), 30 );                              
         if (OrderType()==OP_SELL)   pr=OrderClose(OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(),MODE_ASK), 30 );
         
         if (pr==false) Print("закрытие ордера ", OrderSymbol() ," завершилось с ошибкой #",GetLastError());
         if (pr==true) Print("ордер ", OrderSymbol() , " ЗАКРЫТ");
       }
    }
  }  
 
igrok333:

grazie per avermi ricordato gli ordini in sospeso)
è questo il modo giusto per farlo?

if (pr==false) è equivalente a if (!pr)
if (pr==true) è equivalente a if (pr)

Io uso Alert invece di Print - dovrebbe apparire subito senza aprire il diario. E non ci sono informazioni extra

 
Вместо
if (OrderType()==OP_BUY)    pr=OrderClose(OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(),MODE_BID), 30 );
if (OrderType()==OP_SELL)   pr=OrderClose(OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(),MODE_ASK), 30 );
короче
if (OrderType()==OP_BUY)    pr=OrderClose(OrderTicket(), OrderLots(), Bid, 30 );
if (OrderType()==OP_SELL)   pr=OrderClose(OrderTicket(), OrderLots(), Ask, 30 );
или просто
pr=OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 30 );


 
STARIJ:

if (pr==false) è equivalente a if (!pr)
if (pr==true) è equivalente a if (pr)

Io uso Alert invece di Print - appare immediatamente sullo schermo senza aprire il diario. E non ci sono informazioni extra

In realtà sto parlando di mettere pr nel codice))
 
Дед пенсионер:
possiamo scrivere OrderClosePrice() in questo modo?

Otteniamo OrderClosePrice() dopo la chiusura della transazione.
 
igrok333:
È possibile scrivere OrderClosePrice() in questo modo?

Otteniamo OrderClosePrice() dopo che la transazione è stata chiusa.

È possibile. Ma fate attenzione. Per una posizione aperta, restituisce il prezzo di chiusura. Corrispondentemente: per comprare - Bid, per vendere - Ask

Motivazione: