[ARCHIVIO]Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Non posso andare da nessuna parte senza di te - 5. - pagina 303

 
Un'altra domanda. l'indicatore xrust (https://www.mql5.com/ru/code/8318) ora ho bisogno di inviare il prezzo del massimo e del minimo all'Expert Advisor (con uscita sul grafico). ho fatto un po' di risoluzione dei problemi, ma non posso ottenere i valori di cui ho bisogno((: uno viene inviato, un altro equivale a 0. come visualizzare i valori reali?
 
hoz:

Sto imparando a lavorare con le biblioteche. Sto scrivendo un Expert Advisor, c'è una funzione come questa:

L'ho messo nell'inclusione, tutto funziona come dovrebbe. Ma se lo colleghi alla libreria, c'è un errore durante la compilazione dell'Expert Advisor:

Perché questa funzione non è visibile nella libreria?

La libreria ha questo contenuto e si compila perfettamente:

Un sacco di errori. Possiamo guardare un esempio e farlo per analogia?
 

C'è una quotazione, supponiamo Ask = 1,20667

Da questa citazione bisogna togliere la terza cifra dopo il punto decimale. Cioè prendere il valore 1,206, il resto dovrebbe essere scartato.

Per favore, ditemi come farlo correttamente, perché"Normalize" arrotonda per eccesso e il risultato è 1,20700.

Ho provato un workaround:

DoubleToStr(Ask,3)

Sì, dà tutto correttamente -> 1.206 . Ma quando torna a Double arrotonda di nuovo, ma a 2 cifre decimali.

StrToDouble(DoubleToStr(Ask,3)) = 1,2100    // 1,2100 - это получившийся результат (т.е. округляет)

Non ho bisogno di arrotondamenti. Ho solo bisogno di prendere la seconda, terza o quarta cifra (a mia scelta) dopo la virgola e scartare il resto.

Come si fa a farlo correttamente?

 
Chiripaha:

C'è una quotazione, supponiamo Ask = 1,20667

Da questa citazione bisogna togliere la terza cifra dopo il punto decimale. Cioè prendere il valore 1,206, il resto dovrebbe essere scartato.

Per favore, ditemi come farlo correttamente, perché"Normalize" arrotonda per eccesso e il risultato è 1,20700.

Ho provato un workaround:

Sì, dà tutto correttamente -> 1.206 . Ma quando torna a Double arrotonda di nuovo, ma a 2 cifre decimali.

Non ho bisogno di arrotondamenti. Ho solo bisogno di prendere la seconda, terza o quarta cifra (a mia scelta) dopo il punto decimale e scartare il resto.

Come si fa a farlo correttamente?

Sei sulla strada giusta: convertire il doppio in stringa con Digits e poi tagliare il numero di cifre richiesto dal risultato(StringSubstr()).
 
Chiripaha:

C'è una quotazione, supponiamo Ask = 1,20667

Da questa citazione bisogna togliere la terza cifra dopo il punto decimale. Cioè prendere il valore 1,206, il resto dovrebbe essere scartato.

Per favore, ditemi come farlo correttamente, perché"Normalize" arrotonda per eccesso e il risultato è 1,20700.

Ho provato un workaround:

Sì, dà tutto correttamente -> 1.206 . Ma quando torna a Double arrotonda di nuovo, ma a 2 cifre decimali.

Non ho bisogno di arrotondamenti. Ho solo bisogno di prendere la seconda, terza o quarta cifra (a mia scelta) dopo la virgola e scartare il resto.

Come si fa a farlo correttamente?

https://docs.mql4.com/ru/strings/StringSubstr
 

Mi scuso - ho pensato che avrei potuto fraintendere. Ho cercato di chiarire, ma l'effetto è ancora lì. - È colpa mia, scusate.

Ho bisogno non solo di una cifra (3a, 4a, ecc. dopo la virgola), ma dell'intera cifra fino alla 2a, 3a o 4a virgola compresa. MA! senza arrotondamento.

E il problema è che quando rimetto la cifra in Double type, si arrotonda di nuovo.

E il tutto è, che anche se quella cifra in modo stupido grande traduce una lettera alla volta prima in tipo String, e poi la traduce in Double,

si arrotonderà di nuovo. - Questa è l'ironia della situazione. Perché StrToDouble() arrotonda un numero? - Questo è quello che non capisco. Il compito della funzione è di convertirlo da

da un formato all'altro e non "modellare" o aggiungere nulla da te stesso lì. Ma "migliora" anche qualcosa.

 
Chiripaha:

Mi scuso - ho pensato che avrei potuto fraintendere. Ho cercato di chiarire, ma l'effetto è ancora lì. - È colpa mia, scusate.

Ho bisogno non solo di una cifra (3a, 4a, ecc. dopo la virgola), ma dell'intera cifra fino alla 2a, 3a o 4a virgola compresa. MA! senza arrotondamento.

E il problema è che quando rimetto la cifra in Double type, si arrotonda di nuovo.

E il tutto è, che anche se quella cifra in modo stupido grande traduce una lettera alla volta prima in tipo String, e poi la traduce in Double,

si arrotonderà di nuovo. - Questa è l'ironia della situazione. Perché StrToDouble() arrotonda un numero? - Questo è quello che non capisco. Il compito della funzione è di convertirlo da

da un formato all'altro e non "modellare" o aggiungere nulla da te stesso lì. Ma "migliora" anche qualcosa.

Conosci la differenza tra un numero e una cifra?
 
Chiripaha:

Mi scuso - ho pensato che avrei potuto fraintendere. Ho cercato di chiarire, ma l'effetto è ancora lì. - È colpa mia, scusate.

Ho bisogno non solo di una cifra (3a, 4a, ecc. dopo la virgola), ma dell'intera cifra fino alla 2a, 3a o 4a virgola compresa. MA! senza arrotondamento.

E il problema è che quando rimetto la cifra in Double type, si arrotonda di nuovo.

E il tutto è, che anche se quella cifra in modo stupido grande traduce una lettera alla volta prima in tipo String, e poi la traduce in Double,

si arrotonderà di nuovo. - Questa è l'ironia della situazione. Perché StrToDouble() arrotonda un numero? - Questo è quello che non capisco. Il compito della funzione è di convertirlo da

da un formato all'altro e non "modellare" o aggiungere nulla da te stesso lì. Ma "migliora" anche qualcosa.

Bisogna sviluppare la capacità di "sentire"! :))
 

: )))))))) Sì, proprio così. Tutti i rimproveri sono accettati! - Per questo, di nuovo, mi scuso. - Sono tutte le conseguenze di un forte sviluppo (con esercizi speciali)

lato creativo, immaginativo, poetico, ecc... ma, allo stesso modo, ci sono due emisferi in un essere umano: creativo e razionale. La mia colpa è di averlo visto e di non averlo corretto.

Quindi, tutte le vostre affermazioni sono pertinenti e io sono colpevole.

Ma solo la questione rimane irrisolta...

Come risolverlo alla fine?

Se pensate che io non abbia sentito qualcosa, vi prego di chiarire. Capisco la tecnica del feedback (per poter "sentire"), ma non ho ancora visto una soluzione.

Come ottenere il numero giusto senza arrotondare in Double, fino al terzo posto decimale, per esempio nel valore di Ask = 1,20667?- Una soluzione come "StrToDouble(DoubleToStr(Ask,3)) = 1,2100 // 1,2100 è il risultato (cioè l'arrotondamento)" non ha funzionato.

Vi ringrazio in anticipo per la vostra tolleranza e comprensione.

 
Zhunko:
Conosci la differenza tra un numero e una cifra?


: )) Sì, certo che capisco la differenza. Ma in un post apologetico e chiarificatore ho fatto comunque quella gaffe (Come ottenere il numero giusto senza arrotondare...), ho dovuto correggere (e non me ne sono accorto subito). Non è un malinteso, è l'altro lato dello sviluppo delle immagini. Ahimè - questo è il suo costo. Anche quando dicono "morti viventi" o qualcosa di simile, non ha senso. Ma senza di essa, è impossibile percepire l'essenza delle cose in modo figurato. Voglio dire che è normale. Non giudicare. : ) Non è nemmeno bello prendere le cose alla lettera. - Cercherò, anche con il vostro aiuto, di correggere la mia comunicazione. Insieme renderemo la vita migliore e più perfetta. Grazie per i vostri commenti!
Motivazione: