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.