Prova a stampare i valori di marginAllot, PercentRisk e pipsToSL per restringere il campo da dove viene il numero negativo. La mia ipotesi speculativa è che pipsToSL venga passato come numero negativo in certe circostanze.
NormalizeDouble(posSize,2);
Questa linea non fa nulla.- Non usare NormalizeDouble, MAI. Per nessuna ragione. È un trucco, non usarlo. Ilsuo uso è sempre sbagliato
- SL/TP (stop) devono essere normalizzati alla dimensione del tick(sul broker 5Digit gli stop possono essere posizionati solo su valori di pip completi). Come scoprirlo in mql?-MQL4 forum) e rispettare i limiti Requisiti e limitazioni nel fare trading - Appendici - MQL4 Tutorial e questo richiede la comprensione dell'uguaglianza in virgola mobile Può il prezzo != prezzo ? - MQL4 forum
- Solo il prezzo aperto per gli ordini in sospeso deve essere regolato. Sulle valute, Point == TickSize, quindi si otterrà la stessa risposta, ma non funzionerà sui metalli. Quindi fallo bene: Trailing Bar Entry EA - MQL4 forum o Bid/Ask: (Non serve) usare NormalizeDouble in OrderSend - MQL4 forum
- La dimensione del lotto deve anche essere regolata ad un multiplo di LotStep. Se questo non è una potenza di 1/10 allora NormalizeDouble è sbagliato. Fatelo bene.
Prova a stampare i valori di marginAllot, PercentRisk e pipsToSL per restringere il campo da dove viene il numero negativo. La mia ipotesi speculativa è che pipsToSL venga passato come numero negativo in certe circostanze.
Sono stato in grado di trovare alcuni punti nel resto del codice dove pipsToSL è stato calcolato erroneamente come negativo. Grazie.
- Questa linea non fa nulla.
- Non usare NormalizeDouble, MAI. Per nessuna ragione. È un trucco, non usarlo. Il suo uso è sempre sbagliato
- SL/TP (stop) devono essere normalizzati alla dimensione del tick.(Su 5Digit Broker gli stop possono essere posizionati solo su valori di pip pieni. Come scoprirlo in mql?-MQL4 forum) e rispettare i limiti Requisiti e limitazioni nel fare trading - Appendici - MQL4 Tutorial e questo richiede la comprensione dell'uguaglianza in virgola mobile Può il prezzo != prezzo ? - MQL4 forum
- Solo il prezzo aperto per gli ordini in sospeso deve essere regolato. Sulle valute, Point == TickSize, quindi si otterrà la stessa risposta, ma non funzionerà sui metalli. Quindi fallo bene: Trailing Bar Entry EA - MQL4 forum o Bid/Ask: (Non serve) usare NormalizeDouble in OrderSend - MQL4 forum
- La dimensione del lotto deve anche essere regolata ad un multiplo di LotStep. Se questo non è una potenza di 1/10 allora NormalizeDouble è sbagliato. Fallo bene.
Ho letto dei tuoi post su questo argomento prima, ma non ho capito il tuo punto fino al tuo ultimo link. Grazie.
Perché dovrei ancora ottenere risposte con più decimali se sto usando MathRound()? Ho provato a usare DoubleToString ma non mi ha aiutato per niente. È dovuto interamente alle limitazioni di Print() o c'è qualcos'altro di sbagliato?
posSize = posSize * 10; MathRound(posSize); posSize = posSize / 10;
NoLimitations: Perché dovrei ancora ottenere risposte con più cifre decimali se sto usando MathRound() | MathRound restituisce un doppio; un numero infinito di cifre decimali. |
NoLimitations : Perché dovrei ancora ottenere risposte con più cifre decimali se sto usando MathRound() | MathRound restituisce un doppio; numero infinito di posizioni decimali. |
Non secondo la pagina del doc per essa. https://docs.mql4.com/math/mathround
"Valore di ritorno
Valore arrotondato all'intero più vicino".
Se si suppone che lo faccia ma non lo fa, allora MQ deve essere avvisato, o devono mettere un'etichetta di avviso sulla funzione.
JD4 ha ragione, la pagina del documento dice che arrotonda al numero intero più vicino. Non sono sicuro di un altro modo per realizzare quello che stavo cercando di fare sopra senza arrotondare o tagliare un certo numero di cifre decimali. Quale sarebbe lo scopo di MathRound() o round() se non restituiscono un numero intero?
Ho anche appena provato ad usarlo senza successo. È possibile che DTS cambi semplicemente la precisione di un valore per l'aspetto e non il valore effettivo? Non vedo altre opzioni.
posSize = posSize * 100; DoubleToString(posSize,0); StringToDouble(posSize); posSize = posSize / 100;

- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Accetti la politica del sito e le condizioni d’uso
All'interno della mia strategia, uso una funzione GetPosSize() per calcolare le dimensioni della posizione. Al momento sto usando la strategia solo con EURUSD e per quanto mi riguarda non riesco a capire perché posSize restituisce un valore negativo, con conseguente errore OrderSend 4051. Qualsiasi aiuto sarebbe molto apprezzato. Posterò tutto il codice rilevante qui. Nessun altro calcolo verso posSize viene fatto in tutto il codice, solo la funzione viene chiamata. Tutti e tre i pezzi di codice separati sono all'interno della funzione.