Auguri per MQL5 - pagina 117

 
HideYourRichess писал(а) >>
Scambio con un ipod?! - Scusa per l'amor di Dio, avrei dovuto avvertirti subito. Per favore, scrivete, dichiarate qualsiasi sciocchezza - non dirò una parola. Ora che tutto è stato chiarito - lo prenderò con comprensione e pazienza. Scambio con un iPod! - aaaaaghit....

Grazie per la vostra simpatia e buona fortuna a voi, almeno non progredite

 

Ho appena riscontrato un problema in MT4, per favore assicurati che questo non accada in MT5 (non ho controllato).


All'inizio (prima di init) gli array erano impostati:

xsell[3];

xbuy[3];


Prima una variabile esterna:

extern int Max_Array_Size = 13;


Nel ciclo start():

ArrayResize(xsell, Max_Array_Size);

ArrayResize(xbuy, Max_Array_Size);


E poi il ciclo for():


for(int kss= Max_Array_Size; kss>0; kss--) {

xbuy[kss] = . . . ;

. . .

}


Lo stesso schema è stato usato sia nel modulo delle vendite(indicatore personalizzato) che in quello degli acquisti - cioè le variabili sono diverse,

ma il principio è lo stesso. All'inizio ho scritto tutto per le vendite, l'ho compilato - tutto va bene, nessun problema. Poi ho copiato

La compilazione ha richiesto molto più tempo e il passaggio tra

Anche la commutazione temporale ha richiesto molto più tempo. Vendite disabili - non è cambiato nulla, la frenata.

Ha lasciato solo le vendite - corre veloce. Il compilatore non si è lamentato, ha solo richiesto molto più tempo per l'esecuzione.

Ho ricontrollato tutto ciò che mi sembrava sospetto, ho riscritto alcune parti in acquisti - lags!...

Si è scoperto che il problema era nella dimensione dell'array: 13 => 0-12, e nel ciclo for stavo cercando di alimentare anche 13!


Dopo la correzione:

ArrayResize(xsell, Max_Array_Size+1);

ArrayResize(xbuy, Max_Array_Size+1);


sia le vendite che gli acquisti sono stati compilati come dovrebbero essere e la commutazione temporale è diventata più veloce.

Ma l'errore sarebbe dovuto comparire durante la compilazione. Trovare la causa in questi casi

Non è affatto facile trovare la ragione (potreste anche non essere consapevoli del problema).

E non è chiaro perché tutto funzionava bene nel modulo di vendita.

 
chief2000 писал(а) >>

Ma l'errore avrebbe dovuto essere scoperto durante la compilazione. Trovare la causa in questi casi non è affatto facile (potreste non sapere che c'era un problema).

Il compilatore non può e non deve tenere traccia dei valori delle variabili per definizione.

E non è nemmeno chiaro perché tutto funzionava senza problemi nel modulo di vendita.

Perché un solo errore è più veloce da elaborare che due o più.

 
fwiq >> :

Il compilatore non può e non deve tenere traccia dei valori delle variabili per definizione.

È brutto se lo è davvero.

Dopo tutto, è praticamente lo stesso che accedere a una variabile che non è stata predefinita.

fwiq ha scritto >>.

Perché un solo errore è più veloce da gestire che due o più.

No, è un'altra cosa - ti ho detto che quando era rimasto solo il modulo di vendita non c'era nessun problema,

e quando ho rimosso le vendite e lasciato solo gli acquisti, c'è stato un problema. La differenza era molto evidente, anche se entrambi i moduli

sono assolutamente identici, tranne che per alcune operazioni cambiate al contrario (>/<, High[]/Low[] ecc.).

 
chief2000 писал(а) >>

No, è un'altra cosa - ti ho detto che quando era rimasto solo il modulo vendite non c'era nessun problema, ma quando ho tolto le vendite e lasciato solo gli acquisti c'era un problema. La differenza era molto evidente, ed entrambi i moduli sono assolutamente identici, tranne che per alcune operazioni cambiate al contrario (>/<, High[]/Low[] ecc.).

Forse, non è la definizione delle variabili o degli array. Negli indicatori MT4, dovreste sorvegliare con cura e attenzione i momenti in cui iniziate ad aggiungere linee programmaticamente, e cambiare i nomi degli array riflessi. A volte c'è confusione e la linea può non essere riflessa o il calcolo può riagganciare, come in questo caso. C'è solo una cura, come nella barzelletta "Basta uscire e rientrare e tutto funzionerà".

 

Se letteralmente, anche il sovraccarico non ha aiutato.

Comunque, è stata la distinzione tra vendere e comprare che mi ha aiutato a capire che c'era un problema...

La felicità è stata una benedizione sotto mentite spoglie :)

 
Ho un'altra domanda. Non posso eseguire il debugger MQL5 sugli indicatori. Funziona su script e Expert Advisors ma non si ferma su nessun indicatore e non può passare attraverso i passi. Non sono sicuro che ci siano particolarità non documentate, se le conoscete, fatemelo sapere.
 
fwiq >> :
Ho un'altra domanda. Non posso eseguire il debugger MQL5 sugli indicatori. Tutto funziona su script e Expert Advisors, ma non si ferma su nessun indicatore e non può passare attraverso i passi. Non ho lavorato con questo tipo di cose, ho iniziato a lavorare con questo tipo di cose.

Una settimana fa i gestori hanno scritto che questa era l'idea e il debugger sugli indici di debugger funzionerà più tardi

 

In MT4 c'erano sempre errori perché Ask o Bid o altro (Close, Open, ecc.) raccolti dopo la virgola

una quantità enorme di numeri (come 1,432311111111111111111111). Di conseguenza, abbiamo dovuto aggiungere "NormalizeDouble(Bid,Digits);".

E questo può essere risolto una volta a livello di MT.

 

Si prega di aggiungere alle funzioni ObjectFind e ObjectDelete la possibilità di lavorare con maschere come : *,?

Inlinea di principio, ovviamente, si può usare solo ObjectFind .Se è necessario mantenere la compatibilità all'indietro, allora la prima funzione dovrebbe essere lasciata invariata, e l'insieme dovrebbe essere integrato con, per esempio ,ObjectFindM (ricerca multipla).

Esempio: abbiamo bisogno di trovare etichette di testo che iniziano con "Signal".

Attuazione: restituisce il nome del primo oggetto trovato (o l'handle, ma questo richiede altre funzioni che possano gestirlo).

Notazione: ObjectFindM("Signal*");

Esempio: dovete rimuovere dalla finestra "0" solo le etichette di testo che iniziano con "Signal".

Notazione: ObjectDelete(0,"Signal*");


Motivazione: