Errori, bug, domande - pagina 440

 
Renat:
Per favore, calcola il risultato del tuo valore negativo e mettilo in relazione con 32 bit di int, poi leggi l'overflow aritmetico e trova i tuoi 17 giorni.

Benvenuti nel mondo della vera programmazione.

Non ho fatto la domanda "da dove vengono 17 giorni? Ripeto: ho trovato una situazione che non capivo nel tester, me l'ho detto e ho ricevuto una spiegazione che (1) la funzione Sleep() funziona anche con valori negativi, e produce un ritardo non nullo, (2) il lavoro della funzione Sleep() è emulato nel tester. Se gli sviluppatori lo trovano accettabile, cosa posso restituire? Non c'è bisogno di calcolare esattamente 17 giorni.

Документация по MQL5: Общие функции / Sleep
Документация по MQL5: Общие функции / Sleep
  • www.mql5.com
Общие функции / Sleep - Документация по MQL5
 
stringo:
Cosa suggerisce? Interrompere il programma in caso di emergenza?
È difficile suggerire senza sapere come funziona il sistema. Il mio scopo è quello di sondare la domanda e poi sta a voi. Questa volta si è scoperto che la domanda rientra pienamente nell'ideologia attuale del terminale. Bene, allora ne saprò di più.
 
uncleVic:

Sì, non abbiamo visto l'elefante.

Ho un forte sospetto su questa linea:


e in questo caso:

Non credo che il compilatore dovrebbe mancare questo. Hai cosa? Neanche un avvertimento? In caso contrario, fate una richiesta al Service Desk. Ok?


applicazione#154746

Come si ottiene il numero di sequenza dell'elemento con il valore massimo/minimo nell'array s1.open?

 
Yedelkin:

In questo caso mi basterebbe avere un'istruzione nella sezione "Funzione Sleep" ... (2) "La funzione Sleep() è pienamente supportata dal tester".

Abbiamo evidenziato le questioni principali sui test in un articolo separato, "Fondamenti dei test in MetaTrader 5". Qui abbiamo cercato di spiegare la maggior parte delle sfumature dell'uso delle varie funzioni del tester. Abbiamo anche spiegato le funzioni Sleep():

Funzione Sleep() nel tester

La funzione Sleep() permette di sospendere per un certo tempo l'esecuzione di un programma mql5 in un Expert Advisor o in uno script, quando si lavora su un grafico. Questo può essere necessario quando si richiedono alcuni dati, che al momento della richiesta non sono pronti e bisogna aspettare che siano pronti. Un esempio dettagliato dell'uso della funzione Sleep() può essere trovato nella sezione Organizzazione dell'accesso ai dati.

Nel tester, le chiamate di Sleep() non ritardano il processo di test. Quando si chiama Sleep(), i tick generati vengono "suonati" entro il ritardo specificato, il che può far scattare ordini pendenti, stop, ecc. Dopo che Sleep() è stato chiamato, il tempo simulato nel tester è aumentato dell'intervallo specificato nel parametro della funzione Sleep.

Se, come risultato dell'esecuzione di Sleep() il tempo corrente nel tester supera la fine del periodo di test, si riceverà un errore "loop infinito in Sleep". Se si verifica un tale errore, i risultati dei test non vengono scartati, tutti i calcoli vengono completati (numero di trade, drawdown, ecc.) e i risultati vengono passati al terminale.

La funzione Sleep() non funzionerà in OnDeinit() poiché dopo la sua chiamata il tempo di test è garantito oltre l'intervallo di test.



Figura 7. Schema di utilizzo della funzione Sleep() in MetaTrader 5 terminal tester.

 
Rosh:

Abbiamo trattato specificamente le questioni principali dei test nel nostro articolo separato, Fondamenti dei test in MetaTrader 5. Qui abbiamo cercato di spiegare la maggior parte delle sfumature dell'uso delle varie funzioni del tester. Abbiamo anche spiegato la funzione Sleep():

Mi dispiace, è davvero colpa mia, non l'ho testato per 9 mesi e mi sono perso l'articolo.

Sarebbe bello se la menzione degli articoli chiave nelle sezioni corrispondenti della Guida di riferimento (ho già suggerito qualcosa di simile l'anno scorso, ma oggi è una buona occasione per farlo di nuovo). Dopotutto, tutti noi usiamo la F1.

 
Cioè, non avete fatto quello che vi ho chiesto.

Hai diverse persone qui che cercano di far notare il tuo semplice errore con l'overflow aritmetico.
 
Renat:
Cioè, non hai fatto quello che ti ho chiesto.

Hai diverse persone qui che cercano di far notare il tuo semplice errore di overflow aritmetico.

==============================================================

Lei ha chiesto:

Renat:
Saresti così gentile da calcolare il risultato del tuo valore negativo, correlarlo con 32 bit di int, poi leggere l'overflow aritmetico e trovare i tuoi 17 giorni...

Ho risposto: Sì, non ho fatto la domanda "da dove vengono esattamente 17 giorni?". :) ecc.

Rispondere alla tua domanda attuale. Quello che avete chiesto - non l'ho fatto. Perché è stato fatto da me ieri (ho avuto dati iniziali leggermente diversi, ma l'essenza di ciò che ho capito). Se qualcuno avesse compilato quello script, avrei ricevuto ben due avvisi. Overflow/cutoff - l'ho affrontato io stesso ieri.

Le domande erano perché (1) la funzione opera con valori negativi dell'argomento e (2) dà un ritardo nel tester per tali argomenti. Eppure lei punta ancora una volta sull'"errore del programmatore" con un overflow di tipo int. - Cioè, rifiutate il mio campione di prova solo perché è stato specificato "un valore troppo grande" quando si è selezionato l'argomento della funzione Sleep(). Ma il punto non è nel "valore traboccato". È solo un tocco in più per il campione di prova. Sembra che i partecipanti alla discussione l'abbiano capito. Alla fine, potete inserire "valore non debordante" nell'esempio del test - a parità di altre condizioni, l'essenza della domanda rimarrà la stessa (la domanda stessa è già stata trattata).

Comunque, grazie per il consiglio. Perché se il compilatore non ti avesse avvertito, il tuo consiglio sarebbe probabilmente tornato utile e ti avrebbe fatto pensare due volte.

 

Quali sono i limiti del suo utilizzo? W =(long)ChartGetInteger(Chart_ID[i],CHART_WIDTH_IN_PIXELS,0);
H =(long)ChartGetInteger(Chart_ID[i],CHART_HEIGHT_IN_PIXELS,0);
W_B =(long)ChartGetInteger(Chart_ID[i],CHART_WIDTH_IN_BARS,0);

Chiamando la funzione da void OnInit() tutto è corretto, ma da void OnTick() i dati non sono corretti, in particolare CHART_WIDTH_IN_BARS dà il numero di barre visibili, anche se capisco che dovrebbe dare il numero di barre adatte al grafico senza offset

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы графиков / Свойства графиков
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы графиков / Свойства графиков
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы графиков / Свойства графиков - Документация по MQL5
 
Virty:

Scusa per la domanda primitiva.

La query commerciale non è in esecuzione. Errore 10014 - volume sbagliato nella richiesta.

Come posso capire/calcolare dall'interno dell'EA qual è il volume massimo e minimo del lotto che posso comprare al momento?

La funzione OrderCheck non è adatta, perché controlla soltanto e non dice quanti lotti si possono comprare.

Guardate l'enumerazione ENUM_SYMBOL_INFO_DOUBLE e la funzione corrispondente. È questo che intende?
 
Yedelkin:
Vedere l'enumerazione ENUM_SYMBOL_INFO_DOUBLE e la funzione corrispondente. È questo che intende?
Sì, grazie. SYMBOL_VOLUME_MAX l'ho trovato io, e tu mi hai aiutato.
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте - Документация по MQL5
Motivazione: