|
Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
Bug beim Umrechnen??
Hi Zusammen,
versuch grad ne einfache BE Funktion hinzuklatschen like: Code:
void BE_Check( int i)//zuvor wird die Ordernummer ermitteln und durch i weitergegeben { int n=OrderSelect(i,SELECT_BY_POS,MODE_TRADES); Comment("1: "+ DoubleToString((Bid-OrderOpenPrice()),Digits)+ "\n2: "+ (Bid-OrderOpenPrice())*10.0*Point+ "\n3: "+ (Bid-OrderOpenPrice())*Point ); if( (Bid-OrderOpenPrice())*10*Point >= BE_LEVEL) { int a = OrderModify(i,OrderOpenPrice(),OrderOpenPrice(),OrderTakeProfit(),0,clrDarkTurquoise); } } Im Anhang seht ihr was ausgegeben wird : 1: Zeigt in Digitform das die Posi 25,4 Punkte vorne liegt 2 und 3 versetzt jeweils eine Kommastelle nach vorne,wenn es über 10 Punkte im Positiven Bereich geht. Kann mir das mal bitte einer erklären??? Is das ein Bug? Wenn ja wie is der zu umgehen?? Build 1090 is meine aktuelle Plattform . |
|
|||
Wieso, stimmt doch.
1. 2,54*10-3 2. 2,54*10-7, weil 1. * 10 * 10-5 3. 2.54*10-8, weil 1. * 10-5 Alles ok. traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
Zitat:
1 . Gibt den Wert Aktueller Kurs - Einstiegskurs wieder und ist 25,4 Punkte im Plus und wird mit 0.00254 wiedergegeben 2. Gibt den Wert Aktueller Kurs - Einstiegskurs * 10 wieder und wird mit 2.5399....987e-07 3. Gibt den Wert Aktueller Kurs - Einstiegskurs * Point wieder,Punktwert und wird mit 2.5399....987e-08 wieder gegeben unter 10 Punkte im Plusberiech bekomm ich bei 2 und 3 auch die korrekten Punkte im Plus angezeigt, sobald es über 9 Punkte geht, eben die mir 2.5399....987e-07 oder-08 , anscheinend versteh ich die Darstellung nicht korrekt, wenn du sagt " Es ist alles Ok" . was ist denn mit e-07/e-08 gemeint? Ich brauche 25.4 als Rückgabewert. Hab den MT4 gewechselt, meint Code hat bei anderen Versionen geklappt. Wäre klasse wenn du das kurz erläutern könntest |
|
|||
Ich habe keine Ahnung, wo das Problem liegt?
Besser wäre es, wenn Du mal ein paar Beispiele bringen würdest, was richtig und was falsch wäre. traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
Lass diese E- Werte weg und benutz double. Oder soll da irgendwas weit über 2.000.000.000 sein?
|
|
|||
Zitat:
traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
Er benutzt anscheinend exponential-Werte. Oder wies heißt. Ist das nötig? Reicht double nicht?
https://de.wikipedia.org/wiki/Exponentialfunktion Zitat:
|
|
|||
Ja und was ändert das an den Zahlen?:
0,00254 0,000000254 0,0000000254 traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
ok hier ist der ganze Code, natürlich hab ich double benutzt das reicht ja locker als Datentyp aus.... 1 2 und 3 habe ich rein gehauen um zu schauen was er mir eben wieder gibt.
Code:
extern double BE_LEVEL = 20.0; void BE_Check( int i) { int n=OrderSelect(i,SELECT_BY_POS,MODE_TRADES); Comment("1: "+ DoubleToString((Bid-OrderOpenPrice()),Digits)+ "\n2: "+ (Bid-OrderOpenPrice())*10.0*Point+ "\n3: "+ (Bid-OrderOpenPrice())*Point ); if( (Bid-OrderOpenPrice())*10*Point >= BE_LEVEL) { int a = OrderModify(i,OrderOpenPrice(),OrderOpenPrice(),OrderTakeProfit(),0,clrDarkTurquoise); } } Dadurch erfüllt meine If niemals die Bedingung. Warum werden mit 25.4 Punkte nicht genauso angezeigt?? ich bekomme anstatt dessen 2.54....... genau das is mein Problem , ich hoffe jetzt ist es verständlich.... |
|
|||
Das sehe ich erst jetzt!
Code:
extern double BE_LEVEL = 20.0; ... if( (Bid-OrderOpenPrice())*10*Point >= BE_LEVEL) { int a = OrderModify(i,OrderOpenPrice(),OrderOpenPrice(),OrderTakeProfit(),0,clrDarkTurquoise); } Warum? Weil die if- Abfrage nie true ergibt. Warum? Weil der linke Teil immer viel!! < 1 und der rechte immer >= 1 sein wird. Stattdessen müsste das lauten: Code:
if( (Bid-OrderOpenPrice())/10/Point >= BE_LEVEL) { int a = OrderModify(i,OrderOpenPrice(),OrderOpenPrice(),OrderTakeProfit(),0,clrDarkTurquoise); } traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
Lesezeichen |
Stichworte |
bug, fehler, mql4, programmierung, programmierung metatrader, programmierung mql4, umrechung, umrechung bug, umrechung fehler |
|
|