Paradosso NormalizeDouble - pagina 10

 
barabashkakvn:
Tutto arriva gradualmente. Per prima cosa bisogna ricordare che le frasi sono scritte in lettere maiuscole e che lo stile dei versi spezzati non è assolutamente adatto a un forum. Poi si risolverà da solo con la normalizzazione e l'indicizzazione da zero.

Stavo aspettando questo commento )))))

 

non c'è niente di più naturale che digitare velocemente in stile chat room - una riga

è naturale come contare da 1.

e arrotondare un numero per farlo arrotondare allo stesso modo.

dai, dov'è il tuo flusso di commenti sarcastici pieni di formalismo?

La vita è più che punti e virgole opportunamente spaziati e formati binari.

è il flusso delle sensazioni e dovrebbe essere bello.

è libertà e creatività.

qual è la sua risposta a questo?

 
transcendreamer:

Vi state tutti prendendo gioco di me, vero?

Avevo solo bisogno di digitare un numero frazionario senza spazzatura

e mi stai dimostrando che ho torto.

mql non è un fine in sé, è uno strumento.

Penso che ci siano alcune cose ovvie, come - se mettete un numero in una variabile, lo stampate come lo mettete...

non importa come è organizzato internamente o come il numero è memorizzato, è a livello di sistema

ed è ovvio che queste code sono una sciocchezza e un difetto a livello di applicazione - non amichevole

Ma qui abbiamo di nuovo qualche battuta da programmatore: "questo non è un bug, questa è una caratteristica".

queste battute non sono apparse per niente, non per niente ))))))))

NormalizeDouble() è necessaria quando si inviano parametri calcolati come prezzi negli ordini di compravendita. Puoi inviare i prezzi Ask e Bid senza normalizzazione, perché sono già normalizzati alla capacità della cifra necessaria. Se si calcolano i prezzi, per esempio per un Bid-stopLoss*Point, allora questa espressione richiede una normalizzazione. Anche i prezzi degli ordini pendenti sono uguali: li si calcola in anticipo, quindi devono essere normalizzati.

Quando si confrontano due numeri reali, è necessario confrontare la loro differenza normalizzata con zero o con il valore minimo.

Quando volete vedere ciò che avete calcolato, usate DoubleToString() con la precisione che volete. IntegerToString() con i parametri che volete.

Questo è qualcosa che dovreste capire e imparare.

 
transcendreamer:

non c'è niente di più naturale che digitare velocemente in stile chat room - una riga

è naturale come contare da 1.

e arrotondare un numero per farlo arrotondare allo stesso modo.

dai, dov'è il tuo flusso di commenti sarcastici pieni di formalismo?

La vita è più che punti e virgole opportunamente distanziati e formati binari.

è il flusso delle sensazioni e dovrebbe essere bello.

è libertà e creatività.

cosa ne dici di questo?

La libertà... e qualcuno la trattiene con la forza?

Creatività ... creare, scrivere i propri wrapper per tutte le funzioni MK e godersi la bellezza.

 
artmedia70:

NormalizeDouble() è necessaria quando si inviano parametri calcolati come prezzi negli ordini di compravendita. Puoi inviare i prezzi Ask e Bid senza normalizzazione, perché sono già normalizzati alla capacità di cifre richiesta. Se si calcolano i prezzi, per esempio per un Bid-stopLoss*Point, allora questa espressione richiede una normalizzazione. Anche i prezzi degli ordini pendenti sono uguali: li calcolate in anticipo, quindi devono essere normalizzati.

Quando si confrontano due numeri reali, è necessario confrontare la loro differenza normalizzata con zero o con il valore minimo.

Quando volete vedere ciò che avete calcolato, usate DoubleToString() con la precisione che volete. IntegerToString() con i parametri di cui avete bisogno.

Questo è qualcosa che è meglio capire e assimilare.

Sì, lo capisco molto bene, non si può inviare un ordine 1.234567 se la quotazione è un numero di 5 cifre.

Per quanto riguarda il confronto di numeri doppi, ho visto riferimenti a ..... ed è terribile.

ma per quanto ho capito è sicuro confrontare A>B finché A e B sono sensibilmente diversi

solo se si scopre che se, per esempio, imposto esplicitamente A=1,23456 e B=1,23456 e if(A==B) dà falso, allora questo è già un crimine

 
artmedia70:

NormalizeDouble() è necessaria quando si inviano parametri calcolati come prezzi negli ordini di compravendita. Puoi inviare i prezzi Ask e Bid senza normalizzazione, perché sono già normalizzati alla capacità di cifre richiesta. Se si calcolano i prezzi, per esempio per un Bid-stopLoss*Point, allora questa espressione richiede una normalizzazione. Anche i prezzi degli ordini pendenti sono uguali: li si calcola in anticipo, quindi devono essere normalizzati.

Quando si confrontano due numeri reali, è necessario confrontare la loro differenza normalizzata con zero o con il valore minimo.

Quando volete vedere ciò che avete calcolato, usate DoubleToString() con la precisione che volete. IntegerToString() con i parametri di cui avete bisogno.

Questo è qualcosa che dovreste capire e imparare.

stampa e avviso sono storti - l'ho già capito
 

Quello che mi preoccupa è che quando calcolo un numero frazionario, lo normalizzo, lo scrivo in una variabile, poi lo leggo e lo normalizzo di nuovo, ottengo delle code

ad esempio

basis[0]=NormalizeDouble(sum_A,2);

GlobalVariableSet("Equity-"+portfolio_id,basis[0]); 

...

current=NormalizeDouble(GlobalVariableGet("Equity-"+portfolio_id),2);

text = "Positions synchronized at " + current + " for portfolio: " + portfolio_name;

if(!automatic) MessageBox(text,""); else Print(text);

Ora l'ho cambiato in

text = "Positions synchronized at " + DoubleToStr(current,2) + " for portfolio: " + portfolio_name;

if(!automatic) MessageBox(text,""); else Print(text);

e non sembrano esserci code, whew, whew, whew...

 

più precisamente - nella versione originale era (string)current

cioè la conversione di un numero normalizzato a sinistra delle code

a volte (non sempre)

 

il problema di confrontare due doppi si pone se, per esempio, un numero è una costante e l'altro è calcolato dividendo/moltiplicando

 

Comunque grazie ancora per aver perso il vostro tempo su un umanitario senza speranza, se sto infastidendo qualcuno, scusate ancora, sto solo dicendo quello che penso senza malizia.

Buone notizie nel frattempo.