OOP, modelli e macro in mql5, sottigliezze e usi - pagina 25

 

fxsaber:

Probabilmente, alcuni compilatori daranno degli avvertimenti in queste situazioni.

Lo specificatore si riferisce a un riferimento, non all'oggetto nel suo insieme, tutto è legittimo, perché il compilatore dovrebbe imprecare?

 
TheXpert:

lo specificatore si riferisce al riferimento, non all'oggetto nel suo insieme, tutto è legittimo, perché il compilatore dovrebbe imprecare?

Probabilmente, se lo fosse, non ci sarebbero rimproveri qui.

void g1( A& ) {}
void g2( const A& ) {}

void OnStart()
{
  const A a;
  
  g1(a); // 'a' - constant variable cannot be passed as reference
  g2(a); // OK
}
 
fxsaber:

Probabilmente, se fosse così, non ci sarebbero parolacce qui.

Questo è un oggetto costante, quindi è logico che un oggetto costante non può avere un riferimento non costante

 
TheXpert:

Questo è un oggetto costante, quindi è logico che un oggetto non costante non possa avere un riferimento non costante.

Come si fa riferimento a un oggetto costante?

 
fxsaber:

Come faccio a fare un riferimento a un oggetto costante?

void g1( A& ) {}
void g1(const A& ){}
void g2( const A& ) {}

void OnStart()
{
  const A a;
  
  g1(a);
  g2(a);
}

Aggiungere un sovraccarico.

 
Vladimir Simakov:

Sovraccarico da aggiungere.

Non è un tale sovraccarico su un link costante?

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

OOP, modelli e macro in mql5, consigli e suggerimenti

TheXpert, 2020.02.26 15:24

Lo specificatore si riferisce al riferimento e non all'oggetto nel suo insieme

 
fxsaber:

Un tale sovraccarico non è un riferimento costante?

Cosa vuoi fare?

 
fxsaber:

Un tale sovraccarico non è un sovraccarico su un riferimento costante?

Se vuoi che il compilatore vada in crash sul tuo primo esempio, non funzionerà, perché lì è tutto legale: non cambi l'istanza dell'oggetto per riferimento, cambi l'istanza dell'oggetto per cui viene chiamato il metodo, mentre il fatto che possa essere lo stesso oggetto non è un problema del compilatore, ma il mal di testa del programmatore.

Per una classe, si può fare questo trucco (per la struttura, no):

class A
{
  int i;
public:
  void f( const A &Value )  
  {
    Print(Value.i); // 0
    
    if (&this!=&Value) this.i = Value.i + 1;
    
    Print(Value.i); // 1
  }
};

void OnStart()
{
  A a;
  
  a.f(a);
}
 
Vladimir Simakov:

Se vuoi che il compilatore mandi in crash il tuo primo esempio, non lo farà, perché tutto lì è legale.

Non si tratta di legalità, ma del fatto che il modificatore const non garantisce che l'oggetto rimanga invariato.

 

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

OOP, modelli e macro in mql5, consigli e suggerimenti

fxsaber, 2020.02.25 22:23

Non ho mai visto questa espressione restituire falso.
ORDER_TIME_DONE_MSC == DEAL_TIME_MSC

Questo è il motivo per cui è difficile tenere statistiche sul tempo di esecuzione degli ordini in base alla storia del trading.

Se possiamo ancora confrontare il valore diORDER_TIME_SETUP_MSC per gli ordini a mercato, non ha senso per gli ordini in sospeso.


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

Biblioteche: MT4Orders

fxsaber, 2020.02.27 09:40

0 - 348806: 00:01:57.311
1 - 348530: 00:01:39.027
2 - 348494: 00:01:15.259
3 - 348406: 00:01:07.671
4 - 348950: 00:01:04.869
5 - 348960: 00:01:02.888
6 - 348814: 00:01:00.654
7 - 348392: 00:01:00.642
8 - 348508: 00:00:54.515
9 - 348550: 00:00:54.467


Fino a due minuti di esecuzione su un conto corrente. Condividi le tue statistiche qui. Lo script non usa nessuna libreria, è adatto per il Netting/Hedging.

Motivazione: