Caratteristiche del linguaggio mql5, sottigliezze e tecniche - pagina 39

 
Vasiliy Sokolov:
Non si è parlato di sostituire completamente il casting.
Sì, hanno tagliato le possibilità.
 
Vasiliy Sokolov:

Casting arbitrario tramite scrittura/lettura binaria... Luci spente. Non c'è bisogno di leggere oltre...

Avete un suggerimento migliore?
 
Vasiliy Sokolov:

p.s. Ho guardato il tuo codice:

Casting arbitrario tramite scrittura/lettura binaria... Luci spente. Non leggere oltre...

C'è un casting arbitrario via union - qualsiasi struttura semplice senza costruttori personalizzati e operatori di copia. Per tutti gli articoli di questa risorsa, questo casting funzionerà.

template <typename T>
class CASTING
{
public:
  template <typename T1>
  static const T Casting( const T1 &Value )
  {
    union CAST
    {
      T1 Value1;
      const T Value2;

      CAST( const T1 &Value)
      {
        this.Value1 = Value; // кастомный оператор может все испортить
      }
    };

    const CAST Union(Value);

    return(Union.Value2);
  }
};

#define _C(A, B) CASTING<A>::Casting(B)

void OnStart()
{
  MqlTick Tick = {0};
  
  Tick = _C(MqlTick, Tick); // Tick = (MqlTick)Tick;
}

Ma se volete coprire il 100% del casting - tramite i file. C'è una scelta.

 
Combinatore:
Hai un suggerimento migliore?
Ovviamente non usate costruttori personalizzati nelle strutture e negli operatori di assegnazione. Scrivere codice semplice.
 
Vasiliy Sokolov:
Ovviamente non usate costruttori personalizzati nelle strutture e negli operatori di assegnazione. Scrivere codice semplice.
Allora non dovreste usare i campi const delle strutture.
 

È un test popolare

if (ArrayResize(Array, NewSize) == NewSize)
// ....

non è affatto la stessa cosa di

if (ArrayResize(Array, NewSize) == ArraySize(Array))
// ....
 

In realtà, ArrayResize() restituisce

Valore di ritorno

Se ha successo, la funzione restituisce il numero di tutti gli elementi contenuti nell'array dopo il ridimensionamento; altrimenti, restituisce -1 e l'array non viene ridimensionato.


 
Roffild:

In realtà, ArrayResize() restituisce

Il comportamento è stato cambiato un anno fa. Chiarito nell'Aiuto questa settimana.
 
CopyTicks asincrono solo negli indicatori

Ora abbiamo solo una richiesta di indicatori e partire con i dati che abbiamo. E la paginazione funziona da sola.

Gli esperti e gli script hanno un approccio leggermente diverso. Lì vengono fatti diversi tentativi per aspettare i dati necessari. Finché i dati arrivano, i tentativi vengono fatti. Non appena ci sono problemi con la connessione, la interrompiamo immediatamente

 

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

Registrazione per il campionato MetaQuotes-Demo di maggio

Vladimir Karputov, 2017.05.05 11:54

Aggiunto. Sì, ho bisogno di ciclare l'intera base del segnale nel terminale:

SignalBaseTotal

Restituisce il numero totale di segnali disponibili nel terminale


A proposito, raccomando prima di questa esecuzione (specialmente quando si passa da un altro server o appena dopo l'avvio) di cliccare almeno una volta sulla scheda "Signals" del terminale - questo dovrebbe attivare la paginazione del database attuale.


Motivazione: