Caratteristiche del linguaggio mql5, sottigliezze e tecniche - pagina 182

 
Konstantin Nikitin:

Per esempio, elimino tutti gli oggetti sul mio VDS. Non voglio sovraccaricare il programma. E non c'è bisogno di loro lì. Io uso i globali. Quindi tutto dipende dalla situazione.

Guarda, non mi piacciono per un motivo:

  1. È una questione di atomicità delle operazioni con loro. I documenti tacciono al riguardo, anche se in effetti è un oggetto e le operazioni con essi non sono atomiche, e la lettura/scrittura del doppio stesso in x86 è, se non mi sbaglio, due istruzioni.
  2. L'accessibilità delle variabili al di fuori del programma.
Se il punto 1 è più un brontolio sulla qualità della documentazione, il punto 2 è serio.
 
Vladimir Simakov:

Guarda, c'è un motivo per cui non mi piacciono:

  1. La questione dell'atomicità delle operazioni con loro. I documenti tacciono su di esso, anche se, in effetti, è un oggetto, e le operazioni con essi non sono atomiche, e la lettura/scrittura del doppio in x86 stesso è, se non sbaglio, due istruzioni.
  2. L'accessibilità delle variabili al di fuori del programma.
Se il punto 1 è più un brontolio sulla qualità della documentazione, il punto 2 è serio.

Beh, non c'è bisogno di leggerlo. Potete usare GlobalVariableCheck per controllare se la variabile è presente o meno. Si può fare lo stesso con gli oggetti.
Quindi avete solo bisogno di creare/controllare/cancellare una variabile.

 

Vladimir Simakov:

2. Disponibilità di variabili al di fuori del programma.

nessun problema, tutte le funzioni che lavorano con variabili globali hanno un valore di ritorno - il risultato dell'operazione

c'è uno strumento di sincronizzazionehttps://www.mql5.com/ru/docs/globals/globalvariablesetoncondition , non è molto, ma usa quello che ti viene offerto

Ma il grande svantaggio è il tipo di dati - solo doppio, non mi piace il doppio, almeno ulong sarebbe stato utilizzabile, e l'organizzazione di nome / valore ---> stringa / doppio provoca un desiderio di scambiare - per scrivere dati in stringa e chiave in doppio - più per una operazione può essere scritto / letto

ma avendo stimato tutta questa "roba" Potete scriverli in file binari, cioè totale libertà e nessuna incertezza.

probabilmente bisogna sapere come lavorare con loro

@fxsaber ha mostrato esempi di lavoro con qualsiasi tipohttps://www.mql5.com/ru/forum/320395/page6#comment_12910394

 
Konstantin Nikitin:

Beh, non c'è bisogno di leggere. Potete semplicemente usare GlobalVariableCheck per controllare se la variabile esiste o no. Si fa lo stesso con gli oggetti.
Quindi, avete solo bisogno di creare/controllare/cancellare la variabile.

Sì, un banale conflitto di nomi e la stringa nell'altro robot

GlobalVariableDel(yourValueName);

perderà il suo deposito))))

Dite che il nome sarà unico, che l'altro robot non ci sarà mai, che il figlio/moglie/amico/bronzo non si avvicinerà mai al terminale di battaglia))) D'accordo, ma la probabilità non è zero, il che significa che il codice diventa inaffidabile.

 
Vladimir Simakov:

Sì, è un banale conflitto di nomi e la linea dell'altro robot

ti prosciuga il tuo deposito)))

Direte che il nome sarà unico, che l'altro robot non ci sarà mai, che il bambino/moglie/amico/bevuto non si avvicinerà mai al terminale di battaglia))) D'accordo, ma la probabilità non è zero, il che significa che il codice diventa inaffidabile.

Stronzate e fantasia

Un EA su denaro viene SEMPRE eseguito da un terminale separato, sul proprio VDS (o anche server) e nessuno ci fa mai casino.

 
Maxim Kuznetsov:

Stronzate e fantasia

Un EA on the money viene SEMPRE eseguito da un terminale separato, su un proprio VDS (o anche server) e nessuno ci fa mai casino.

Cosa vuol dire "SEMPRE"? Oggi - sempre, domani si può calcolare diversamente. E non tutti sembrano essere d'accordo con lei.

Ho sottolineato il vero pericolo dell'uso delle variabili globali del terminale. Questo non è né buono né cattivo - è un dato che gli sviluppatori ci hanno dato, dobbiamo solo esserne consapevoli e tenerne conto.

La stessa stringa

GlobalVariablesDeleteAll();

...fatto in qualsiasi script e oops...

 

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

Peculiarità di mql5, consigli e trucchi

Vladimir Simakov, 2020.05.24 17:02

La stessa stringa

GlobalVariablesDeleteAll();

...fatto in qualsiasi script e oops.

Lo stesso vale per gli oggetti grafici.

ObjectsDeleteAll(...


Solo le risorse EA non possono essere cambiate da altri programmi.

 

Colleghi, per favore aiutatemi a fare una macro, se possibile.

Ho bisogno di dichiarare dinamicamente un array bidimensionale. E anche la seconda dimensione deve essere cambiata. Si tratta di qualcosa come questo ciclo:

for(int would_be_size2=0;would_be_size2<5;would_be_size2++)
    {
     double d_array[][would_be_size2];
     int size2=ArrayRange(d_array,1);
    }

Naturalmente, il compilatore si tirerà indietro di fronte a questo:

'[' - invalid index value       t7.mq5  20      22

Mi piacerebbe vedere una macro come la seguente:

#define  CREATE_MARRAY(type,arr_name,size2) (type arr_name[][##size2])

Invece di una linea:

double d_array[][would_be_size2];

Grazie.

 
Denis Kirichenko:

Colleghi, per favore aiutatemi a fare una macro, se possibile.

Ho bisogno di dichiarare dinamicamente un array bidimensionale. E anche la seconda dimensione deve essere cambiata. Si tratta di qualcosa come questo ciclo:

Naturalmente, il compilatore si tirerà indietro di fronte a questo:

Mi piacerebbe vedere una macro come la seguente:

Invece di una linea:

Grazie.

Ma la creazione di un array di dimensioni sufficienti (massime) al di fuori del ciclo è ostacolata da atteggiamenti politici ? :-)

L'approccio precedente (ricreare l'array nel ciclo ogni volta) non vince nulla in termini di velocità o consumo di memoria.

 
Denis Kirichenko:

Mi piacerebbe vedere una macro simile a questa:

Non funzionerà.

Motivazione: