Hallo Programmierer des MT5,
Gibt es Routinen oder Hilfen zum Setzen von SL und TP, wenn der gewünschte Wert vom double nicht genau dargestellt werden kann?
Natürlich versagt dann auch Normalizedouble, das ist mir klar und ausprobiert ...
Leider kein echtes Beispiel, aber: SL 9.02755, durchs Programm errechnet als richtiger Wert (Diff zum Price) könnte evtl. nicht genau von Double dargestellt werden, es erscheint statt dessen: 9.027549999999999 oder 9.02755000000001;
Solche Werte werden vom Handelssystem nicht akzeptiert, der Tradeupdate geht schief, neuer versuch bringt natürlich auch nichts.
Jetzt geht Raten und Rechnen los, nehme statt 9.02755 9.02756 und siehe da, es könnte klappen ...
Ich habe mir geholfen durch eine eigene, komplizierte Routine, welche funktioniert- aber ich denke mir - da gibt es bestimmt etwas fertiges und viel einfacheres.
Dank im Voraus!
Ich denke, der Fehler muss da wo anders liegen! Alle double-Werte sind ja so, egal, was Du vorher machst und auf was Du die Werte auf-, ab- oder gar nicht rundest!
daher wäre ein echtes Beispiel schon interessant und vor allem die Fehlerauswertung!! Wenn es zB. heißt ungültiger Stopp, ist der entweder zu nah oder auf der falschen Seite oder vom falschen Kurs (Ask statt Bid oder ...) berechnet!!
Beachte mal dies:
- www.mql5.com
NormalizeDouble funktioniert.
Am einfachsten die CTrade Class benutzen.
Ticket=false;
StopLoss = 500;
SL=0;
SL= LastTick.ask-(StopLoss*Pip);
Ticket=cTrade.PositionOpen(_Symbol,OP_BUY,Lots,LastTick.ask,NormalizeDouble(SL,SymbolInfoInteger(symbol,SYMBOL_DIGITS)),NormalizeDouble(TP,SymbolInfoInteger(symbol,SYMBOL_DIGITS)),SignalComment);
if(!Ticket)
{
Print("Buy Error: ",GetLastError()," ",symbol);
Print("Failed to open order! Error:",cTrade.CheckResultRetcodeDescription());
}
Ich denke, der Fehler muss da wo anders liegen! Alle double-Werte sind ja so, egal, was Du vorher machst und auf was Du die Werte auf-, ab- oder gar nicht rundest!
daher wäre ein echtes Beispiel schon interessant und vor allem die Fehlerauswertung!! Wenn es zB. heißt ungültiger Stopp, ist der entweder zu nah oder auf der falschen Seite oder vom falschen Kurs (Ask statt Bid oder ...) berechnet!!
Beachte mal dies:
Hallo Carl,
Danke für den Versuch- hier ein kleiner Test:
//*********************************************************
void NormalizeDoubleTest()
//*********************************************************
{
double doubletest=9.73375;
doubletest=doubletest/0.00005*0.00005;
Print("Double vor Normalize=", doubletest);
doubletest=NormalizeDouble(doubletest,5);
Print("Double nach Normalize=", doubletest);
}
Ergebnis:
RP 0 19:44:28.984 BP1Body (EURUSD,M1) Double vor Normalize=9.733750000000001
RF 0 19:44:36.847 BP1Body (EURUSD,M1) Double nach Normalize=9.733750000000001
Wenn Du das an SL oder TP übergibst und updaten willst (mit CTRADE), bekommst du eine Fehlermeldung, weil TP oder SL nicht sauber in TickSize übergeben sind.
Dass NormalizeDouble diese Aufgabe nicht schafft, ist klar: Die obige Zahl 9.73375 lässt sich eben nicht sauber mit dem DoubleFormat binär darstellen. Sie springt von 9,73374999999999 auf 9.733750000000001.
Das geht in dem Zahlenbereich des USDSEK aber laufend so.
Ich hatte angenommen, diese Aufgabe sei irgendwo schon gelöst.
Ich habs selber verprobt, ausmultipliziert (integer daraus gewonnen), das double auch ausmultipliziert und verglichen, wenn Abweichung, Ticksize addiert, wieder verprobt, meist klappts im ersten Versuch.
Aber das ist natürlich SEHR heftig und nur EUDV. Etwas Ungenaue Daten Verarbeitung.
Ich bin froh, dass ich das so reproduzieren könnte.
frohe Weihnachten!
Hallo Carl,
Danke für den Versuch- hier ein kleiner Test:
//*********************************************************
void NormalizeDoubleTest()
//*********************************************************
{
double doubletest=9.73375;
doubletest=doubletest/0.00005*0.00005;
Print("Double vor Normalize=", doubletest);
doubletest=NormalizeDouble(doubletest,5);
Print("Double nach Normalize=", doubletest);
}
Ergebnis:
RP 0 19:44:28.984 BP1Body (EURUSD,M1) Double vor Normalize=9.733750000000001
RF 0 19:44:36.847 BP1Body (EURUSD,M1) Double nach Normalize=9.733750000000001
Wenn Du das an SL oder TP übergibst und updaten willst (mit CTRADE), bekommst du eine Fehlermeldung, weil TP oder SL nicht sauber in TickSize übergeben sind.
Dass NormalizeDouble diese Aufgabe nicht schafft, ist klar: Die obige Zahl 9.73375 lässt sich eben nicht sauber mit dem DoubleFormat binär darstellen. Sie springt von 9,73374999999999 auf 9.733750000000001.
Das geht in dem Zahlenbereich des USDSEK aber laufend so.
Ich hatte angenommen, diese Aufgabe sei irgendwo schon gelöst.
Ich habs selber verprobt, ausmultipliziert (integer daraus gewonnen), das double auch ausmultipliziert und verglichen, wenn Abweichung, Ticksize addiert, wieder verprobt, meist klappts im ersten Versuch.
Aber das ist natürlich SEHR heftig und nur EUDV. Etwas Ungenaue Daten Verarbeitung.
Ich bin froh, dass ich das so reproduzieren könnte.
frohe Weihnachten!
Fertiger Code mit Ergebnis zum nachvollziehen.
///*********************************************************
//*********************************************************
CTrade cT;
MqlTick lasttick;
void OnInit()
{
double doubletest=9.73375;
doubletest=doubletest/0.00005*0.00005;
Print("Double vor Normalize=", doubletest);
doubletest=NormalizeDouble(doubletest,SymbolInfoInteger(_Symbol,SYMBOL_DIGITS));
Print("Double nach Normalize=", doubletest);
SymbolInfoTick(_Symbol,lasttick);
cT.PositionOpen(_Symbol,ORDER_TYPE_SELL,1.0,lasttick.bid,doubletest,0,0);
}
Und hier das Log dazu
MS 0 21:39:13.813 Startup MetaTester 5 x64 build 1495 (09 Dec 2016)
CG 0 21:39:13.822 Server MetaTester 5 started on 127.0.0.1:3000
KL 0 21:39:13.822 Startup initialization finished
FK 0 21:39:14.178 127.0.0.1 login (build 1495)
LI 0 21:39:14.192 Network 38520 bytes of account info loaded
NN 0 21:39:14.192 Network 1482 bytes of tester parameters loaded
ED 0 21:39:14.192 Network 188 bytes of input parameters loaded
FS 0 21:39:14.229 Network 24318 bytes of symbols list loaded
LF 0 21:39:14.229 Tester expert file added: Experts\test22.ex5. 42052 bytes loaded
OG 0 21:39:14.242 Tester initial deposit 500000.00 EUR, leverage 1:500
QM 0 21:39:14.244 Tester successfully initialized
EJ 0 21:39:14.244 Network 57 Kb of total initialization data received
JQ 0 21:39:14.244 Tester AMD Phenom II X4 955 Processor, 12192 MB
FJ 0 21:39:14.314 Symbols EURUSD: symbol to be synchronized
MP 0 21:39:14.317 Symbols EURUSD: symbol synchronized, 3384 bytes of symbol info received
OD 0 21:39:14.318 History EURUSD: history synchronization started
NM 0 21:39:14.320 History EURUSD: load 27 bytes of history data to synchronize in 0:00:00.000
PP 0 21:39:14.320 History EURUSD: history synchronized from 2015.01.02 to 2016.12.16
HF 0 21:39:14.321 Ticks EURUSD: ticks synchronization started
PQ 0 21:39:14.330 Ticks EURUSD: load 34 bytes of tick data to synchronize in 0:00:00.000
JJ 0 21:39:14.330 Ticks EURUSD: history ticks synchronized from 2016.11.01 to 2016.12.16
CF 0 21:39:14.767 History EURUSD,H1: history cache allocated for 11588 bars and contains 11373 bars from 2015.01.02 09:00 to 2016.10.31 23:00
LJ 0 21:39:14.768 History EURUSD,H1: history begins from 2015.01.02 09:00
DO 0 21:39:14.769 Tester EURUSD,H1 (MetaQuotes-Demo): generating based on real ticks
GL 0 21:39:14.770 Tester EURUSD,H1: testing of Experts\test22.ex5 from 2016.11.01 00:00 to 2016.11.07 00:00 started
JE 0 21:39:14.788 test22 (EURUSD,H1) 2016.11.01 00:00:00 Double vor Normalize=9.733750000000001
CJ 0 21:39:14.788 test22 (EURUSD,H1) 2016.11.01 00:00:00 Double nach Normalize=9.733750000000001
CF 0 21:39:14.789 Trade 2016.11.01 00:00:00 instant sell 1.00 EURUSD at 1.09762 sl: 9.73375 (1.09762 / 1.09775)
HQ 0 21:39:14.789 Trades 2016.11.01 00:00:00 deal #2 sell 1.00 EURUSD at 1.09762 done (based on order #2)
DN 0 21:39:14.789 Trade 2016.11.01 00:00:00 deal performed [#2 sell 1.00 EURUSD at 1.09762]
NL 0 21:39:14.789 Trade 2016.11.01 00:00:00 order performed sell 1.00 at 1.09762 [#2 sell 1.00 EURUSD at 1.09762]
QI 0 21:39:14.791 test22 (EURUSD,H1) 2016.11.01 00:00:00 CTrade::OrderSend: instant sell 1.00 EURUSD at 1.09762 sl: 9.73375 [done at 1.09762]
LN 3 21:39:14.963 Ticks EURUSD : real ticks begin from 2016.11.01 00:00:00
MI 0 21:39:16.637 Trade 2016.11.04 22:59:56 position closed due end of test at 1.11427 [#2 sell 1.00 EURUSD 1.09762 sl: 9.73375]
MJ 0 21:39:16.638 Trades 2016.11.04 22:59:56 deal #3 buy 1.00 EURUSD at 1.11427 done (based on order #3)
IH 0 21:39:16.638 Trade 2016.11.04 22:59:56 deal performed [#3 buy 1.00 EURUSD at 1.11427]
RM 0 21:39:16.638 Trade 2016.11.04 22:59:56 order performed buy 1.00 at 1.11427 [#3 buy 1.00 EURUSD at 1.11427]
DQ 0 21:39:16.638 Tester final balance 498501.25 EUR
HD 0 21:39:16.638 Tester EURUSD,H1: 891682 ticks, 95 bars generated. Environment synchronized in 0:00:00.109. Test passed in 0:00:02.344 (including ticks preprocessing 0:00:00.172).
CR 0 21:39:16.638 Tester EURUSD,H1: total time from login to stop testing 0:00:02.453 (including 0:00:00.109 for history data synchronization)
Fertiger Code mit Ergebnis zum nachvollziehen.
///*********************************************************
//*********************************************************
CTrade cT;
MqlTick lasttick;
void OnInit()
{
double doubletest=9.73375;
doubletest=doubletest/0.00005*0.00005;
Print("Double vor Normalize=", doubletest);
doubletest=NormalizeDouble(doubletest,SymbolInfoInteger(_Symbol,SYMBOL_DIGITS));
Print("Double nach Normalize=", doubletest);
SymbolInfoTick(_Symbol,lasttick);
cT.PositionOpen(_Symbol,ORDER_TYPE_SELL,1.0,lasttick.bid,doubletest,0,0);
}
Und hier das Log dazu
MS 0 21:39:13.813 Startup MetaTester 5 x64 build 1495 (09 Dec 2016)
CG 0 21:39:13.822 Server MetaTester 5 started on 127.0.0.1:3000
KL 0 21:39:13.822 Startup initialization finished
FK 0 21:39:14.178 127.0.0.1 login (build 1495)
LI 0 21:39:14.192 Network 38520 bytes of account info loaded
NN 0 21:39:14.192 Network 1482 bytes of tester parameters loaded
ED 0 21:39:14.192 Network 188 bytes of input parameters loaded
FS 0 21:39:14.229 Network 24318 bytes of symbols list loaded
LF 0 21:39:14.229 Tester expert file added: Experts\test22.ex5. 42052 bytes loaded
OG 0 21:39:14.242 Tester initial deposit 500000.00 EUR, leverage 1:500
QM 0 21:39:14.244 Tester successfully initialized
EJ 0 21:39:14.244 Network 57 Kb of total initialization data received
JQ 0 21:39:14.244 Tester AMD Phenom II X4 955 Processor, 12192 MB
FJ 0 21:39:14.314 Symbols EURUSD: symbol to be synchronized
MP 0 21:39:14.317 Symbols EURUSD: symbol synchronized, 3384 bytes of symbol info received
OD 0 21:39:14.318 History EURUSD: history synchronization started
NM 0 21:39:14.320 History EURUSD: load 27 bytes of history data to synchronize in 0:00:00.000
PP 0 21:39:14.320 History EURUSD: history synchronized from 2015.01.02 to 2016.12.16
HF 0 21:39:14.321 Ticks EURUSD: ticks synchronization started
PQ 0 21:39:14.330 Ticks EURUSD: load 34 bytes of tick data to synchronize in 0:00:00.000
JJ 0 21:39:14.330 Ticks EURUSD: history ticks synchronized from 2016.11.01 to 2016.12.16
CF 0 21:39:14.767 History EURUSD,H1: history cache allocated for 11588 bars and contains 11373 bars from 2015.01.02 09:00 to 2016.10.31 23:00
LJ 0 21:39:14.768 History EURUSD,H1: history begins from 2015.01.02 09:00
DO 0 21:39:14.769 Tester EURUSD,H1 (MetaQuotes-Demo): generating based on real ticks
GL 0 21:39:14.770 Tester EURUSD,H1: testing of Experts\test22.ex5 from 2016.11.01 00:00 to 2016.11.07 00:00 started
JE 0 21:39:14.788 test22 (EURUSD,H1) 2016.11.01 00:00:00 Double vor Normalize=9.733750000000001
CJ 0 21:39:14.788 test22 (EURUSD,H1) 2016.11.01 00:00:00 Double nach Normalize=9.733750000000001
CF 0 21:39:14.789 Trade 2016.11.01 00:00:00 instant sell 1.00 EURUSD at 1.09762 sl: 9.73375 (1.09762 / 1.09775)
HQ 0 21:39:14.789 Trades 2016.11.01 00:00:00 deal #2 sell 1.00 EURUSD at 1.09762 done (based on order #2)
DN 0 21:39:14.789 Trade 2016.11.01 00:00:00 deal performed [#2 sell 1.00 EURUSD at 1.09762]
NL 0 21:39:14.789 Trade 2016.11.01 00:00:00 order performed sell 1.00 at 1.09762 [#2 sell 1.00 EURUSD at 1.09762]
QI 0 21:39:14.791 test22 (EURUSD,H1) 2016.11.01 00:00:00 CTrade::OrderSend: instant sell 1.00 EURUSD at 1.09762 sl: 9.73375 [done at 1.09762]
LN 3 21:39:14.963 Ticks EURUSD : real ticks begin from 2016.11.01 00:00:00
MI 0 21:39:16.637 Trade 2016.11.04 22:59:56 position closed due end of test at 1.11427 [#2 sell 1.00 EURUSD 1.09762 sl: 9.73375]
MJ 0 21:39:16.638 Trades 2016.11.04 22:59:56 deal #3 buy 1.00 EURUSD at 1.11427 done (based on order #3)
IH 0 21:39:16.638 Trade 2016.11.04 22:59:56 deal performed [#3 buy 1.00 EURUSD at 1.11427]
RM 0 21:39:16.638 Trade 2016.11.04 22:59:56 order performed buy 1.00 at 1.11427 [#3 buy 1.00 EURUSD at 1.11427]
DQ 0 21:39:16.638 Tester final balance 498501.25 EUR
HD 0 21:39:16.638 Tester EURUSD,H1: 891682 ticks, 95 bars generated. Environment synchronized in 0:00:00.109. Test passed in 0:00:02.344 (including ticks preprocessing 0:00:00.172).
CR 0 21:39:16.638 Tester EURUSD,H1: total time from login to stop testing 0:00:02.453 (including 0:00:00.109 for history data synchronization)
Danke für Deine Mühe, Christian.
Das ist der Beweis, dass SendOrder Sl (mithin TP) auch doubles akzeptiert, die im Rahmen der Darstellungsgenauigkeit "abliefern".
Ich hatte aber erwähnt, dass der Effekt bei Update (Modify) auftrat.
m_trade.PositionModify(symbol, SL, TP);
Bei mir sah das vor ca. 10 Tagen vor Entwicklung der Routine, die "glatte" doubles abliefert, so aus (bei USDSEK( Stoplevel 0)), siehe Anhang.
Wie auch immer- die Sache ist jetzt im Griff.
Mich hat sehr beeindruckt, wie schnell Du zu dem Problem einen HistoryTest aufgebaut hast- vielen Dank dafür - und für die Anregung es an langen Wochenenden genau so zu machen.
Jetzt zum Weihnachtsbraten:-)
Werner
Na dann leg ich noch einen nach Werner
Wir wollen doch genau sein , so wie dein Double Wert :-)
Code direkt ausführbar
CTrade cT;
MqlTick lasttick;
void OnInit()
{
double doubletest=9.73375;
doubletest=doubletest/0.00005*0.00005;
Print("Double vor Normalize=", doubletest);
doubletest=NormalizeDouble(doubletest,SymbolInfoInteger(_Symbol,SYMBOL_DIGITS));
Print("Double nach Normalize=", doubletest);
SymbolInfoTick(_Symbol,lasttick);
Sleep(1000);
cT.PositionOpen(_Symbol,ORDER_TYPE_SELL,1.0,lasttick.bid,doubletest,0,0);
double newSL = doubletest-1;
cT.PositionModify(2,newSL,0);
}
Und dazu die Log
ER 0 13:16:53.359 Tester account info found
FK 0 13:16:53.360 Network 1482 bytes of tester parameters loaded
JL 0 13:16:53.361 Tester expert file added: Experts\Test\test23.ex5. 42581 bytes loaded
DH 0 13:16:53.378 Tester initial deposit 3000.00 EUR, leverage 1:300
HS 0 13:16:53.382 Tester successfully initialized
KF 0 13:16:53.383 Network 43 Kb of total initialization data received
GN 0 13:16:53.383 Tester Intel Core i5-4200U @ 1.60GHz, 8072 MB
FI 0 13:16:53.438 History EURUSD: history synchronization started
FQ 0 13:16:53.440 History EURUSD: load 27 bytes of history data to synchronize in 0:00:00.000
IL 0 13:16:53.440 History EURUSD: history synchronized from 2015.01.02 to 2016.09.08
EG 0 13:16:53.441 Ticks EURUSD: ticks synchronization started
PP 0 13:16:53.445 Ticks EURUSD: load 34 bytes of tick data to synchronize in 0:00:00.000
OM 0 13:16:53.445 Ticks EURUSD: history ticks synchronized from 2016.09.01 to 2016.09.07
KE 0 13:16:53.953 History EURUSD,M15: history cache allocated for 42240 bars and contains 41334 bars from 2015.01.02 09:00 to 2016.08.31 23:45
RH 0 13:16:53.958 History EURUSD,M15: history begins from 2015.01.02 09:00
FR 0 13:16:53.959 Tester EURUSD,M15 (ForexTimeFXTM-MT5): generating based on real ticks
IM 0 13:16:53.960 Tester EURUSD,M15: testing of Experts\Test\test23.ex5 from 2016.09.01 00:00 to 2016.09.08 00:00 started
OR 0 13:16:53.979 test23 (EURUSD,M15) 2016.09.01 00:00:00 Double vor Normalize=9.733750000000001
LI 0 13:16:53.979 test23 (EURUSD,M15) 2016.09.01 00:00:00 Double nach Normalize=9.733750000000001
JH 3 13:16:54.029 Ticks EURUSD : 2016.09.01 23:59 - real ticks absent for 1 minutes out of 1437 total minute bars within a day
DF 3 13:16:54.029 Ticks EURUSD : 2016.09.01 23:59 - real ticks discarded for 1 minutes out of 1437 total minute bars within a day
EF 3 13:16:54.029 Ticks EURUSD : 2016.09.01 23:59 - 22 tick prices mismatch for 3 minute bars
CO 3 13:16:54.159 Ticks EURUSD : real ticks begin from 2016.09.01 00:00:00
LR 3 13:16:54.159 Ticks EURUSD : 2016.09.01 00:00 - 2016.09.08 00:00 real ticks absent for 1 minutes of 7179 total minute bars, every tick generation used
HL 3 13:16:54.159 Ticks EURUSD : 2016.09.01 00:00 - 2016.09.08 00:00 real ticks discarded for 1 minutes of 7179 total minute bars, every tick generation used
LJ 3 13:16:54.159 Ticks EURUSD : 2016.09.01 00:00 - 2016.09.08 00:00 tick volumes not matched for 2 minute bars
ER 3 13:16:54.159 Ticks EURUSD : 2016.09.01 00:00 - 2016.09.08 00:00 tick prices of 22 ticks not matched for 3 minute bars
GR 3 13:16:54.159 Ticks EURUSD : 2016.09.01 00:00 - 2016.09.08 00:00 last prices absent for 9 minute bars, bid prices used
LL 0 13:16:54.159 Trade 2016.09.01 00:00:01 exchange sell 1.00 EURUSD at 1.11571 sl: 9.73375 (1.11571 / 1.11574)
GN 0 13:16:54.159 Trades 2016.09.01 00:00:01 deal #2 sell 1.00 EURUSD at 1.11571 done (based on order #2)
DN 0 13:16:54.159 Trade 2016.09.01 00:00:01 deal performed [#2 sell 1.00 EURUSD at 1.11571]
CG 0 13:16:54.159 Trade 2016.09.01 00:00:01 order performed sell 1.00 at 1.11571 [#2 sell 1.00 EURUSD at 1.11571]
QG 0 13:16:54.163 test23 (EURUSD,M15) 2016.09.01 00:00:01 CTrade::OrderSend: exchange sell 1.00 EURUSD sl: 9.73375 [done]
HG 0 13:16:54.163 Trade 2016.09.01 00:00:01 position modified [#2 sell 1.00 EURUSD 1.11571 sl: 8.73375]
PK 0 13:16:54.163 test23 (EURUSD,M15) 2016.09.01 00:00:01 CTrade::OrderSend: modify position #2 EURUSD (sl: 8.73375, tp: 0.00000) [done]
JJ 0 13:16:55.650 Trade 2016.09.07 23:58:33 position closed due end of test at 1.12400 [#2 sell 1.00 EURUSD 1.11571 sl: 8.73375]
GJ 0 13:16:55.650 Trades 2016.09.07 23:58:33 deal #3 buy 1.00 EURUSD at 1.12400 done (based on order #3)
MI 0 13:16:55.650 Trade 2016.09.07 23:58:33 deal performed [#3 buy 1.00 EURUSD at 1.12400]
JR 0 13:16:55.650 Trade 2016.09.07 23:58:33 order performed buy 1.00 at 1.12400 [#3 buy 1.00 EURUSD at 1.12400]
ML 0 13:16:55.650 Tester final balance 2259.25 EUR
FD 0 13:16:55.650 Tester EURUSD,M15: 933866 ticks, 480 bars generated. Environment synchronized in 0:00:00.063. Test passed in 0:00:02.234 (including ticks preprocessing 0:00:00.188).
CP 0 13:16:55.650 Tester EURUSD,M15: total time from login to stop testing 0:00:02.297 (including 0:00:00.063 for history data synchronization)
HR 0 13:16:55.660 Tester 1 Mb memory used, 2 Mb of history data, 64 Mb of tick data
Somit ist das Problem nun gelöst. Frohes Fest weiterhin !
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Hallo Programmierer des MT5,
Gibt es Routinen oder Hilfen zum Setzen von SL und TP, wenn der gewünschte Wert vom double nicht genau dargestellt werden kann?
Natürlich versagt dann auch Normalizedouble, das ist mir klar und ausprobiert ...
Leider kein echtes Beispiel, aber: SL 9.02755, durchs Programm errechnet als richtiger Wert (Diff zum Price) könnte evtl. nicht genau von Double dargestellt werden, es erscheint statt dessen: 9.027549999999999 oder 9.02755000000001;
Solche Werte werden vom Handelssystem nicht akzeptiert, der Tradeupdate geht schief, neuer versuch bringt natürlich auch nichts.
Jetzt geht Raten und Rechnen los, nehme statt 9.02755 9.02756 und siehe da, es könnte klappen ...
Ich habe mir geholfen durch eine eigene, komplizierte Routine, welche funktioniert- aber ich denke mir - da gibt es bestimmt etwas fertiges und viel einfacheres.
Dank im Voraus!