[ARCHIVIO] Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 3. - pagina 248

 
Roman.:
ERR_INVALID_TRADE_VOLUME 131 Volume errato - conosci questo modulo e imposta il volume "giusto" secondo il tuo tipo di conto, per esempio nei conti micro il volume è di solito 0,01 lotto, nei conti 'classici' 0,1 lotto... Inserisci un valore costante di 0,1 lotti nella tua funzione di apertura degli ordini e controlla se il volume...
L'EA scambia una specifica % di lotto da ekvit, cioè posso solo inserire percentuali come 10, 5, non c'è opzione per inserire lotto 0.1 o 0.01. Questo problema si è verificato solo con un broker a 4 cifre.
 
MeTrade:
MaxZ:
Avete fatto il test nei giorni feriali? Lo spread è fluttuante?
Ottimizzato tutta la settimana, testato stasera e stamattina. È un problema?
Non hai risposto alla mia domanda sulla diffusione.
 
Perché appare questo avviso? Ho speso molti sforzi per scoprire che quando si confronta una cifra con una parte frazionaria, ho bisogno di normalizzarla con NormalizeDouble(). Ma oggi ho deciso di provare per divertirmi e l'allarme salta fuori! Cosa sono questi glitch? O non glitch?
      if (1.3320 == 1.3320)
         Alert("Ku!");
 
ScioMe:
Perché appare questo avviso? Ho speso molti sforzi per scoprire che quando si confronta una cifra con una parte frazionaria, ho bisogno di normalizzarla con NormalizeDouble(). Ma oggi ho deciso di provare per divertirmi e l'allarme salta fuori! Che tipo di glitch? O non glitch?
Quali sono i difetti? Queste costanti sono uguali. La condizione è soddisfatta.
 
MeTrade:
L'EA fa trading con una certa % dell'ekvit, cioè posso inserire solo una percentuale, per esempio 10, 5, non c'è la possibilità di inserire un lotto di 0,1 o 0,01. Questo problema si è verificato solo con un broker a 4 cifre.
questo problema si verifica solo nei broker a 4 cifre: "...posso solo inserire una percentuale, ad esempio 10, 5" - quindi il tuo calcolo è fatto senza normalizzazione del volume prima di aprire un ordine, cioè alla fine, il tuo 10 o 5 per cento risulta in 0,123 o 1,548 lotti, il che causa l'errore numero 131, si prega di correggere la funzione per il calcolo dei lotti o chiedere a un telepate, dal momento che non abbastanza "input" (raw) dati sull'argomento ...
 
ScioMe:
Perché appare questo avviso? Ho speso un sacco di sforzi prima cercando di capire che quando si confronta una cifra con una parte frazionaria, ho bisogno di normalizzarla usando la funzione NormalizeDouble(). Ma oggi ho deciso di provare per divertirmi e l'allarme salta fuori! Che tipo di glitch? O non glitch?

1). Il compilatore può semplicemente ignorare questa condizione (dichiarazione if).

2). Se però il compilatore non ignora questa condizione, scriverà ogni numero in memoria e assegnerà 8 bit per ogni numero. Confronta i numeri, non come facciamo noi con i nostri occhi, ma un po' alla volta. I numeri in memoria sono gli stessi e la condizione sarà valida.

Sono molto sorpreso dalla tua domanda, perché non riesco a capire come questi due numeri (due record) non sono percepiti come uguali?

 
MaxZ:
Non hai risposto alla mia domanda sulla diffusione.
Ho provato su un terminale a 4 cifre con uno spread fisso, tutto è OK. Ma è apparso un altro problema, l'errore numero 131, che non si è verificato sul terminale a 5 cifre.
 
MeTrade:
In seguito al tuo commento, ho provato su un terminale a 4 cifre con uno spread fisso, tutto è OK. Ma è apparso un altro problema, l'errore numero 131, che non si è verificato sul terminale a 5 cifre.
Devo sedermi qui e cercare di indovinare! :))) Sono sicuro che risolverete anche gli altri problemi.
 

La mia funzione di calcolo MM è complessa e in una parte di essa, quando si calcola il lotto, la funzione restituisce 0,18 come lotto massimo possibile e si può aprire o 0,1, 0,2 o 0,3, cioè il passo è 0,1.

Se normalizzo il lotto viene arrotondato a 0,2 e l'ordine non è più consentito, anche se il lotto massimo consentito è 0,18. Qual è il modo corretto per arrotondare o per normalizzare correttamente?

 
MaxZ:

""""...
Я очень удивлён был Вашему вопросу, так как не могу понять как можно два эти числа (две записи) воспринять не равными??""""


Sto lottando con il problema da un po' di tempo. Mi ha quasi rotto il cervello! Il problema era questo: avevo bisogno di eseguire una condizione di uguaglianza in if (). Stavamo confrontando numeri reali. Non riuscivo a ricevere un avviso e mi chiedevo cosa diavolo stesse succedendo. Questi numeri, si può vedere ad occhio nudo che sono uguali! Ma il terminale non lo stampava. Alla fine ho sospettato che ci fosse qualcosa che non andava, ma non riuscivo a capire cosa fosse. Ho bisogno di aiuto dalla comunità mql4. Ho fatto una domanda qui, e grazie, gli esperti (sembra Roman e altre brave persone) hanno risposto che quando si confrontano numeri reali, ho bisogno di normalizzarli con la funzione NormalizeDouble(). Mi ha aiutato. Ma oggi l'ho provato e cosa c'è che non va? Sono tranquillamente confrontati senza normalizzazione. Comunque, sono giunto alla conclusione che a volte sono paragonati e a volte no, quindi è meglio normalizzarli per essere sicuri.
Motivazione: