Caratteristiche del linguaggio mql5, sottigliezze e tecniche - pagina 42

 
PositionSelect azzera tutti i dati di PositionGet in caso di fallimento.
 
Un errore classico
void Func( int& ) {}

void OnStart()
{
  int i;
  
  Func(true ? i : i); // '?' - parameter passed as reference, variable expected
  Func(i); // OK
}
 
fxsaber:
Un errore classico
Ti stai chiedendo se questo è l'errore giusto?
 
fxsaber:
Mi chiedo se questo sia un errore.

In termini di correttezza, questo è corretto.

Apparentemente l'operatore ternario non restituisce un riferimento ma una variabile per valore (il che non è logico in principio).

Risulta essere una variabile temporanea, che non piace alle funzioni mql con parametri di riferimento.

Cioè, l'operatore ternario e i riferimenti non vanno d'accordo, in poche parole.

Il senso comune -- non so, la costruzione è logica.
 
Combinatore:

Si ottiene una variabile di rampa, che non piace alle funzioni mql con parametri di riferimento.

MqlTick Out()
{
  MqlTick Tick = {0};
  
  return(Tick);
}

void In( MqlTick& ) {}

void OnStart()
{
  In(Out());
}
Esattamente "mi piace". È a causa di tali esempi che sono sorti dei dubbi.
 
fxsaber:
Esattamente "mi piace". È a causa di tali esempi che sono sorti dei dubbi.

Dalla descrizione dell'errore stesso, sembra un problema con i link e i non-link.

forse qualcuno con una conoscenza più aggiornata della lingua può spiegare.

 

fxsaber:
Errore classico

void Func( int& ) {}

void OnStart()
{
  int i;
  
  Func(true ? i : i); // '?' - parameter passed as reference, variable expected
  Func(i); // OK
}

E se è così

void Func( int& ) {}

void OnStart()
{
  int i;
  
  Func((true ? i : i));
  Func(i); // OK
}
 
Alexey Viktorov:

Che ne dite di questo?

È più veloce controllare che fare un post.

Non funziona, ovviamente.

 
fxsaber:

È più veloce controllare che fare un post.

Non funziona, ovviamente.

Strano. Uso sempre questa opzione quando apro posizioni con o senza takeaway.

          trade.BuyStop(lot, buyPrice, _Symbol, 0.0, (tacke == 0.0 ? 0 : buyPrice+tacke));
          trade.SellStop(lot, sellPrice, _Symbol, 0.0, (tacke == 0.0 ? 0 : sellPrice-tacke));
 
Alexey Viktorov:

Strano. Uso sempre questa opzione quando apro posizioni con o senza acquisizioni.

In questi casi funzionerà anche senza staffe aggiuntive.
Motivazione: