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

 
ANDREY:

Buona giornata a tutti!

Sto cercando di passare da mql4 a mql5.

Domanda: Perché mql5 calcola e visualizza un'espressione per me sconosciuta come 2.99999999 - (meno) 05 invece della differenza tra il prezzo corrente e il valore della variabile Hay, che dovrebbe essere <1 (come in mql4)?

Come posso fare in modo che mql5 calcoli correttamente la differenza tra questi valori? Normalizzo tutti i valori usando NormalizeDouble(), ma i valori di cui sopra

vengono visualizzati invariati. Questo è strano per me, dato che entrambi i valori sono di tipo doppio

Grazie a tutti per il vostro aiuto.


2.9999999999 -(meno)05= 2.9999999999 / 100000 = 0.000029999999999. È così che si fa in matematica.

- (meno)05 è dividere per 10 alla quinta potenza.

 
IndependentMK:

Salve di nuovo.
Per favore, presta attenzione alla domanda di un principiante.
Ho bisogno di segnalare errori nel codice, perché nel tester, l'Expert Advisor non apre gli ordini...
Il compilatore non mostra errori o avvertimenti e la stessa cosa nel diario, non ci sono errori...

Non si apre perché una delle condizioni non è soddisfatta.

È

while(MA_Smoth_B > MA_Smoth_S)

o questo

if(MA_Simpl_B_Op < MA_Simpl_S_Op && MA_Simpl_B_Cl > MA_Simpl_S_Cl)

Commentate i due flash // e vedrete quale. È così che troverete l'errore.

 
Александр:

2.9999999999 -(meno)05= 2.9999999999 / 100000 = 0.0000299999999999999. È così che si fa in matematica.

- (meno)05 è dividere per 10 alla quinta potenza.

Grazie per la risposta, ma perché il programma non calcola la differenza tra il prezzo 1.33671 e Hay 1.33664 invece dell'espressione, che dovrebbe essere 0.00007, ma invece emette l'espressione?

Allo stesso tempo, quando sostituisco la variabile Hay con 1.33664 con la costante 1.33664( SymbolInfoDouble(Symbol(),SYMBOL_BID) - 1.33664 ), il programma calcola la differenza reale tra questi valori, cioè 0.00007. Infatti, la variabile Hay nel codice prende il valore del prezzo di apertura dell'ordine nel tick precedente, che è un valore doppio di 1,33664.

Grazie in anticipo per il vostro aiuto.

 
ANDREY:

Grazie per la risposta, ma perché il programma non calcola la differenza tra il valore del prezzo 1.33671 e Hay 1.33664 invece dell'espressione, che dovrebbe essere 0.00007, ma invece emette l'espressione?

Grazie in anticipo per il suggerimento.

DoubleToString(). Non è MQL5, è un output sbagliato di valori reali nel log. Questo è altrettanto vero per MQL4.

Документация по MQL5: Преобразование данных / DoubleToString
Документация по MQL5: Преобразование данных / DoubleToString
  • www.mql5.com
[in]  Формат точности. Если значение digits лежит в диапазоне от 0 до 16, то будет получено строковое представление числа с указанным количество знаков после запятой. Если значение digits лежит в диапазоне от -1 до -16, то...
 
Artyom Trishkin:

DoubleToString(). E non si tratta di MQL5, ma del tuo output errato di valori reali nel log. Questo vale anche per MQL4 esattamente nella stessa misura.

Capito. Grazie. Non ho mai affrontato tali problemi prima d'ora. Ora lo saprò.

Non sono del tutto sicuro di cosa significhi il formato di precisione in relazione al mio codice. Mi sembra che sia il numero di cifre decimali.
Ma in MT4, esattamente nello stesso codice (tranne che per OrderSend), se ricordo bene, la funzione Print emette sempre il valore reale della differenza tra due valori di prezzo, cioè il numero inferiore a 1 (0,00000) con 5 cifre decimali dopo lo 0.

 
ANDREY:

Capito. Grazie. Non ho mai incontrato questo prima d'ora. Ora lo saprò.

Non sono ancora sicuro di cosa significhi il formato di precisione in relazione al mio codice. Mi sembra che sia il numero di cifre decimali.
Ma in MT4, esattamente nello stesso codice (tranne che per OrderSend), se ricordo bene, la funzione Print emette sempre il valore reale della differenza tra due valori di prezzo, cioè il numero inferiore a 1 (0,00000) con 5 cifre decimali dopo lo 0.

I valori reali dei dati sono stampati ovunque. È solo un formato diverso di rappresentazione dei numeri reali. Se il terminale non specifica il formato di uscita, decide quale formato è più conveniente. Naturalmente, questo presuppone che conosciate tutti i formati di rappresentazione dei numeri.

Sta tutto nell'aiuto.

 
Artyom Trishkin:

I valori dei dati reali sono visualizzati ovunque. È solo un formato diverso per rappresentare i numeri reali. Se al terminale non viene detto quale formato emettere, decide quale formato è più conveniente. Naturalmente, questo presuppone che conosciate tutti i formati dei numeri.

Tutto è nella guida.

Quindi, MT4 e MT5 hanno formati diversi per la rappresentazione dei numeri reali?
Cosa devo leggere nella Guida di mql5 per affrontare questa domanda?

Grazie per l'aiuto.

 
Michail_David:
Salve, colleghi esperti. Ho bisogno del vostro aiuto per correggere l'indicatore. L'essenza dell'indicatore è la seguente. Calcola la grandezza dell'aumento del prezzo rispetto alla barra precedente. Per lo zero ci vuole una barra di stelle. Cioè, il prezzo di apertura è uguale al prezzo di chiusura. In fase di compilazione nessun errore, ma durante il test un errore sulla linea 80 20 caratteri. Anche la linea del segnale è disegnata in modo errato. Ma penso che questo sia il motivo del calcolo errato del buffer principale. Per favore, aiutatemi a risolvere il problema.

Ok. Sembra che solo pochi eletti vengano aiutati da queste parti.

 
Michail_David:

Ok. Sembra che solo pochi eletti vengano aiutati da queste parti.

Prova questo.

//--- typical price and its moving average
   for(i=0; i<rates_total-1; i++)
     {
      ExtTempBuffer[i] = NormalizeDouble((close[i]-open[i])/Point(),2);
 
Vitaly Muzichenko:

Prova questo.

Grazie, Vitaly. Ma ottengo ancora un errore nella linea ExtTempBuffer[i] = NormalizeDouble((close[i]-open[i])/Point(),2); sull'elemento [i}.

Motivazione: