Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools

Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools (http://www.expert-advisor.com/forum/index.php)
-   Programmierung MQL4 (http://www.expert-advisor.com/forum/forumdisplay.php?f=220)
-   -   Bug beim Umrechnen?? (http://www.expert-advisor.com/forum/showthread.php?t=6135)

Trader6666 10.06.18 17:35

Bug beim Umrechnen??
 
Liste der Anhänge anzeigen (Anzahl: 1)
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);
    }
}

so hab ich das früher jedenfalls gemacht, nur dummerweise funzt das nicht mehr und ich frage mich warum????????????:confused::confused::confused:

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 .

traderdoc 10.06.18 20:11

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

Trader6666 10.06.18 22:19

Zitat:

Zitat von traderdoc (Beitrag 41102)
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

??? OK anscheinend fehlen mir da die Mathe-Kenntnisse oder wir reden aneinander vorbei....

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

traderdoc 10.06.18 22:44

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

MA-EA 11.06.18 11:32

Lass diese E- Werte weg und benutz double. Oder soll da irgendwas weit über 2.000.000.000 sein? :confused:

traderdoc 11.06.18 19:18

Zitat:

Zitat von MA-EA (Beitrag 41105)
Lass diese E- Werte weg und benutz double. Oder soll da irgendwas weit über 2.000.000.000 sein? :confused:

Was hat denn diese ursächliche Problematik mit double zu tun?

traderdoc

MA-EA 11.06.18 19:51

Er benutzt anscheinend exponential-Werte. Oder wies heißt. Ist das nötig? Reicht double nicht? :confused:



https://de.wikipedia.org/wiki/Exponentialfunktion



Zitat:

Zitat von Trader6666 (Beitrag 41103)
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?


traderdoc 11.06.18 20:04

Ja und was ändert das an den Zahlen?:
0,00254
0,000000254
0,0000000254

traderdoc

Trader6666 11.06.18 20:43

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);
    }
}

was ich möchte ist, wenn die Posi über oder gleich BE_LEVEL ist, dass die Order auf Break Even gezogen wird. BE_LEVEL wird in ganzen Punkten(dennoch double) als Wert hinterlegt. Wie gesagt bis 9 Punkte zeigt er mir auch an das er 9.0 Punkte/Pips im Plus ist. Wenn er 10 Punkte im Plus ist dann wird mir das nicht als 10.0 angezeigt sondern als 1.0

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....

traderdoc 11.06.18 21:44

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);
    }

Die Funktion OrderModify wird nie aufgerufen!
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);
    }

Mal davon abgesehen, dass OrderSelect() und OrderModify() einen bool-Wert zurückgeben und keinen int-Wert (das spielt jedoch bei Dir jetzt nicht die Rolle, sollte aber korrekterweise beachtet werden).

traderdoc


Alle Zeitangaben in WEZ +2. Es ist jetzt 22:55 Uhr.

Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.1
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum