Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 829

 

C'è una questione di questo formato: c'è questo codice

int P=3;

se(P==5){allora è necessario entrare nella biblioteca e calcolare qualcosa}

In questa situazione P=3, cioè la condizione è falsa. La domanda è: il compilatore entrerà nella libreria ed eseguirà oziosamente il codice o il compilatore leggerà il codice nel file corrente? Ti spiego perché lo chiedevo. Bene, guardate, supponiamo di scrivere la seguente condizione di formato

int Y=4;

if(Y==4){fare qualcosa} else{fare qualcos'altro}. In questa situazione otteniamo la seguente immagine Y==4, la prima possiamo dire, l'operatore di priorità è stato eseguito, ma il blocco else{fare qualcos'altro} sarà anche controllato e calcolato (solo calcolato e sempre), ma non eseguito, perché la priorità è un'espressione if(Y==4). In altre parole, indipendentemente dal risultato di verità, la macchina fa tutti i calcoli, cioè spende energia per i calcoli indipendentemente dal fatto che l'operatore secondario sia eseguito o meno. Se uso grandi programmi e librerie, e il compilatore scaverà ogni volta il codice della libreria, alla fine rallenterà il programma. Quanto sarà efficace l'uso delle librerie in questo caso, dovrei usare il codice mql4 stesso il più conciso possibile per rendere le prestazioni del robot alte? Chi ha qualche idea su questo argomento?

 
Pavel Soin:

Salve.

Diciamo che ho 2 indicatori, il primo ha 4 buffer, il secondo ne ha 2. Li metto su un grafico e apro la finestra dei dati (CTRL+D). La lista contiene 6 buffer da 0 a 5. Come posso leggere il valore del buffer 5, diciamo, da questa lista in MQL? Non è conveniente usare iCustom per l'indicatore richiesto. È più conveniente usare questa lista. So che lo fanno, ma come?

Qualcuno può aiutarmi?

 
Seric29:

C'è una questione di questo formato: c'è questo codice

int P=3;

se(P==5){allora è necessario entrare nella biblioteca e calcolare qualcosa}

In questa situazione P=3, cioè la condizione è falsa. La domanda è: il compilatore entrerà nella libreria ed eseguirà oziosamente il codice o il compilatore leggerà il codice nel file corrente? Ti spiego perché lo chiedevo. Bene, guardate, supponiamo di scrivere la seguente condizione di formato

int Y=4;

if(Y==4){fare qualcosa} else{fare qualcos'altro}. In questa situazione otteniamo la seguente immagine Y==4, la prima possiamo dire, l'operatore di priorità è stato eseguito, ma il blocco else{fare qualcos'altro} sarà anche controllato e calcolato (solo calcolato e sempre), ma non eseguito, perché la priorità è un'espressione if(Y==4). In altre parole, indipendentemente dal risultato di verità, la macchina fa tutti i calcoli, cioè spende energia per i calcoli indipendentemente dal fatto che l'operatore secondario sia eseguito o meno. Se uso grandi programmi e librerie, e il compilatore scaverà ogni volta il codice della libreria, alla fine rallenterà il programma. Quanto sarà efficace l'uso delle librerie in questo caso, dovrei usare il codice mql4 stesso il più conciso possibile per rendere le prestazioni del robot alte? Chi ha qualche idea su questo argomento?

Il debugger integrato di MetaEditor risponde molto bene a queste domande. Dovresti scrivere uno script con condizioni simili ed eseguirlo passo dopo passo nel debugger. Vedrete che il programma non entrerà nel luogo dove non ha niente da fare. Inoltre, tale condizione

int P = 3, Y = 4;
if(P == 5 && Y == 4)

Dopo aver verificato che P != 3 non si controlla più nulla.

 
Buon pomeriggio. Potete dirmi cosa fare per mantenere tutti gli elementi grafici sul grafico durante il fine settimana?
 
Lomonosov1991:
Buon pomeriggio. Potete dirmi cosa fare per mantenere tutti gli elementi grafici sul grafico durante il fine settimana?
Non cancellarli
 
Alexey Viktorov:

Il debugger integrato in MetaEditor risponde molto bene a queste domande. Scrivete uno script con condizioni simili ed eseguitelo passo dopo passo nel debugger. Vedrete come il programma non entra nel luogo dove non ha niente da fare. Inoltre, questa condizione

Dopo aver verificato che P != 3 non si controlla più nulla.

Ecco un esempio

int pp=8;if(pp==8){pp=3;}else{pp=340000000000000000000000000000;}

pp=8 in questo caso è 8, ma il compilatore giura sul numero grande, che voglio mettere in una variabile, ma non metterò questo numero in una variabile perché pp=8 è corretto, ma per qualche motivo il compilatore comincia a scavare quello che ho scritto e controlla se può essere, quindi concludiamo che è il compilatore che controlla e conta, bene, questo è certamente un errore grossolano, potremmo fare un errore meno grave, ma il compilatore controllerà comunque se può essere o no. Non intendo scriverci cose del genere, ma il compilatore controllerà ciò che dovrebbe fare, ma non lo farà e conterà. Ho provato a lavorare con il debugger MQL4 ho letto le istruzioni quihttps://www.metatrader5.com/ru/metaeditor/help/development/debug ma non ho nemmeno visto una scheda attiva "check against history" anche se le istruzioni suggeriscono che dovrebbe essere attiva.

 
Seric29:

Ecco un esempio

int pp=8;if(pp==8){pp=3;}else{pp=340000000000000000000000000000;}

pp=8 in questo caso è 8, ma il compilatore giura sul grande numero che voglio mettere in una variabile, ma non metterò questo numero in una variabile perché pp=8 è corretto, ma per qualche ragione il compilatore comincia a scavare quello che ho scritto e controlla se può essere, quindi concludiamo che è il compilatore che controlla e aggiunge tutto, naturalmente questo è un errore grossolano, potremmo fare errori meno gravi, ma il compilatore controllerà comunque se può essere o no. Non intendo scriverci cose del genere, ma il compilatore controllerà ciò che dovrebbe fare, ma non lo farà e conterà. Ho provato a lavorare con il debugger MQL4 ho letto le istruzioni da quihttps://www.metatrader5.com/ru/metaeditor/help/development/debug ma la scheda "check against history" non è nemmeno attiva, anche se le istruzioni suggeriscono che dovrebbe esserlo. Ho provato a controllare con dati reali ma in questo caso i valori delle variabili non vengono mostrati, non ho visto nulla, mi chiedo solo cosa stia succedendo.

Il compilatore controlla i valori validi in fase di compilazione, ma non in fase di esecuzione. Informatevi sui tipi di variabili e su quali intervalli sono consentiti i valori di queste variabili. Se il compilatore non controllasse questi intervalli, potreste perdere dei valori al momento dell'esecuzione del codice e ottenere risultati errati dei calcoli. Quindi questo comportamento è buono per il programmatore. Il compilatore avverte sempre della possibile perdita di precisione.

E il debugger di MT4 non funziona sui dati storici. È la prerogativa del tester MT5. Ma non ha senso comunque fare il debug degli script sulla storia, e si può osservare ciò che suggerisco nel tester di MT4. Basta impostare un punto di interruzione all'inizio del codice e poi osservare la sequenza di esecuzione e i valori delle variabili passo dopo passo.

 
Pensi che sia giusto discutere di pezzi di codice decompilato?
Dovrebbero almeno rinominare le variabili. Non è così sfacciato...
 
Artyom Trishkin:
Pensi che sia giusto discutere di pezzi di codice decompilato?

Dovrebbero almeno rinominare le variabili. Altrimenti, è troppo sfacciato...

Questo EA è disponibile online in formato MQL4. Trio Dancer, lo sto solo rifacendo per me.

 
Lomonosov1991:

Questo consulente è disponibile online. Trio Dancer, lo sto solo modificando per me.

E allora? Ci sono posti dove comprano e vendono merce rubata.
Questo forum non è in quella categoria.
È stato violato (rubato all'autore) qualche tempo fa e ora lo stai facendo per te. Per favore non fatelo su questo sito. Qui abbiamo l'etica.