Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 6. - pagina 9

 
gyfto:

Si potrebbe scrivere if((b-a)*(c-a)*(d-a)>0), ma non necessariamente più veloce. AND logico è la moltiplicazione binaria, è solo un'altra notazione della stessa espressione, l'unica differenza è la dimensione dei tipi di variabile. a>b è una variabile booleana, 4 byte, e b-a, se sono doppi, la differenza sarà doppia (8 byte), e questa moltiplicazione è almeno 2 volte più lunga.


Un consiglio inestimabile.

Lasciatemi spiegare. Potete riscrivere la vostra espressione come if(((a>b)*(a>c)*(a>d)==1), perché le espressioni tra parentesi assumono valori 0 o 1 (e sono, a loro volta, definite in define nel precompilatore come false e true).

Grazie - penso che questo funzionerà più velocemente
 

Ragazzi, per favore consigliatevi.

In modalità test di strategia, non posso cambiare i numeri nelle proprietà di ottimizzazione:

Saldo minimo 200

Profitto massimo 10000

ecc.

Qual è il problema?

 

Potete dirmi quali valori possono restituire init, start e deinit e cosa significano?

Ho provato a cercare nel forum ma non l'ho trovato. Non c'è questa informazione nel manuale. Probabilmente si tratta di informazioni riservate. : )))(Testo emozionale cancellato... )

Come immagino - "0" - è andato tutto bene... Ma, dato che il loro tipo è interger, apparentemente ci possono essere più di 2 valori...

 
Chiripaha:

Potete dirmi quali valori possono restituire init, start e deinit e cosa significano?

Ho provato a cercare nel forum ma non l'ho trovato. Non c'è questa informazione nel manuale. Probabilmente si tratta di informazioni riservate. : )))(Testo emotivo cancellato... )

Come immagino - "0" - è andato tutto bene... Ma, dato che il loro tipo è interger, apparentemente ci possono essere più di 2 valori...

Questo è stato discusso abbastanza recentemente. Riferimento:

Ci sono 3 funzioni con nomi predefiniti in MQL4:

init() - funzione chiamata durante l'inizializzazione del modulo. Se manca, non viene chiamata alcuna funzione durante l'inizializzazione.

start() - la funzione principale. Viene chiamato dagli Expert Advisors dopo la ricezione del prossimo tick. Per gli indicatori personalizzati viene chiamato durante il ricalcolo dopo che l'indicatore è attaccato al grafico, quando il terminale client viene aperto (se l'indicatore è attaccato al grafico), e anche dopo l'arrivo del prossimo tick. Negli script viene eseguito immediatamente dopo il collegamento al grafico e l'inizializzazione. Se non c'è una funzione start() nel modulo, questo modulo (Expert Advisor, script o indicatore personalizzato) non può essere lanciato.

deinit() - la funzione che viene chiamata durante la deinizializzazione del modulo. Se è assente, non viene chiamata alcuna funzione durante la deinizializzazione.

Le funzioni predefinite possono avere dei parametri. Tuttavia, quando queste funzioni sono chiamate dal terminale client, nessun parametro sarà passato dall'esterno, ma saranno utilizzati i valori predefiniti.
Le funzioni start(), init() e deinit() possono essere chiamate da qualsiasi punto del modulo secondo le regole generali, insieme ad altre funzioni.

Non è auspicabile chiamare start() o trade dalla funzione init(), perché al momento dell'inizializzazione del modulo i dati del grafico, i prezzi di mercato, ecc. potrebbero non essere pronti. Le funzioni init() e deinit() dovrebbero terminare il loro lavoro il più rapidamente possibile e in nessun caso bloccarsi cercando di iniziare il funzionamento completo prima che la funzione start() sia chiamata.

Per le chiamate di sistema, il ritorno non ha importanza.
 

Ok, allora cercherò di chiarire la domanda.

Per esempio, voglio controllare alcuni parametri nella fase di inizializzazione e a seconda del risultato: passare alla fase di avvio o no.

Se ho capito bene il tuo commento, Vadim, allora il risultato dell'inizializzazione non avrà importanza (in questo caso) e la funzione Start sarà avviata?

 

allora dovete chiamare l'init dall'inizio.

Perché devi fare tutta questa fatica? Le variabili globali non sono ancora state cancellate...

 
Chiripaha:

Ok, allora cercherò di chiarire la domanda.

Per esempio, voglio controllare alcuni parametri nella fase di inizializzazione e a seconda del risultato: passare alla fase di avvio o no.

Se ho capito bene il tuo commento, Vadim, il risultato dell'inizializzazione non avrebbe importanza (in questo caso) e la funzione Start sarebbe avviata?

Rustam ha risposto:

FAQ:

allora dovete chiamare voi stessi l'init dall'inizio.

Perché una tale complicazione? Nessuno ha ancora cancellato le variabili globali...

Si dichiarano le variabili globali e si inizializzano come necessario. Tutte le funzioni dello stesso modulo possono vedere le variabili globali.
 
Zhunko:

Rustam ha risposto:

Dichiarate le variabili globalmente e inizializzatele come necessario. Tutte le funzioni di un modulo possono vedere le variabili globali.

Sì, a meno che non sia un controllo per limitare l'accesso al programma, per esempio.
 
FAQ:

allora dovete chiamare l'init dall'inizio.

Perché devi fare tutta questa fatica? Le variabili globali non sono ancora state cancellate...


Non sarebbe più facile controllare con una bandiera? Naturalmente...
 
hoz:

Non sarebbe più facile controllarlo con una bandiera? Certamente globale...

No, non è più facile. Perché se ci fosse un flag negativo (o una variabile globale), il controllo deve ancora essere eseguito. Sia il flag che la variabile globale funzionano solo nel caso positivo. E alcune funzioni sono ancora necessarie all'inizio (anche se qui è diverso).

In qualunque modo la si guardi, si inizia comunque: o tramite rifacimento di "inite", che è altrettanto fastidioso, o tramite rifacimento delle funzioni richieste.