Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools
Zurück   Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools > Metatrader 4 > Programmierung MQL4

Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4.


Portalsuche


Werbung

Login
Benutzername:
Kennwort:


Statistik
Themen: 3824
Beiträge: 36911
Benutzer: 6.077
Aktive Benutzer: 493
Links: 80
Wir begrüßen unseren neuesten Benutzer: Batangenyo
Mit 483 Benutzern waren die meisten Benutzer gleichzeitig online (21.04.16 um 17:12).
Neue Benutzer:
vor 15 Stunden
- Batangenyo
vor einem Tag
- Spitzmaus
vor einem Tag
- juleslesqu...
vor 2 Tagen
- hmf44
vor 2 Tagen
- Crossa

Onlineuser
'Wer ist online' anzeigen Benutzer: 0
Gäste: 38
Gesamt: 38
Team: 0
Team:  
Benutzer:  
Freunde anzeigen

Empfehlungen

Werbung

Like Tree1Likes
Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 26.01.15
Benutzerbild von markusrgb
Mitglied
 
Registriert seit: Jan 2015
Beiträge: 34
markusrgb befindet sich auf einem aufstrebenden Ast
Standard Erweitertes Nachkomma Stellen Problem

Hallo Zusammen,

Bin schon ne ganze weile am googeln aber finde nichts zu meinem Spezielen Problem und das ich noch Anfänger auf dem Gebiet MT Programmierung bin macht es auch nicht leichter

Mit dem Befehl "Digits" kann ich ja soweit ich das Richtig verstanden habe, die Nachkommastellen je nach Broker auf die richtige Anzahl Nachkommastellen Reduzieren.

Jetzt ist es aber so dass mein Broker im Falle des DAX die Daten in 0,25er Schritten ... (0,25 - 0,5 - 0,75 - 0,00) z.B. 10744.75 ... 10744.00 ... 10745.25
liefert

Als SL oder TP werden aber häufig Werte errechnet, die als Nachkommastelle keine 0, 0,25, 0,50 oder 0,75 haben
sondern so sachen wie : 10744.43 oder 10745.77

Code:
TakeProfit = NormalizeDouble(OrderOpenPrice()*(1+(TP_Prozent/100)),Digits);
und das akzeptiert der Broker eben nicht und verweigert das OrderModify().

Jetzt ist meine Frage welche Möglichkeit es gibt diesen Berechneten "NormalizeDouble" Wert in 0,25 oder gerne auch 0,5 er schritten zu Runden?

Soll also z.B. aus 10744.43 --> 10744.50 machen


Code:
// TP bei Long Deals setzen
if (OrderSelect(LongOrder,SELECT_BY_TICKET)==true)
{
    if(OrderCloseTime()==0 && OrderTakeProfit()==0)
      {
      TakeProfit = NormalizeDouble(OrderOpenPrice()*(1+(TP_Prozent/100)),Digits);
      OrderAngepasst = OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),TakeProfit,0,Orange);
      }
}

// TP bei Short Deals setzen
if (OrderSelect(ShortOrder,SELECT_BY_TICKET)==true)
{
    if(OrderCloseTime()==0 && OrderTakeProfit()==0)
      {
      TakeProfit = NormalizeDouble(OrderOpenPrice()/(1+(TP_Prozent/100)),Digits);
      OrderAngepasst = OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),TakeProfit,0,Orange);
      }
}
  #2 (permalink)  
Alt 26.01.15
Mitglied
 
Registriert seit: Sep 2012
Beiträge: 224
pako befindet sich auf einem aufstrebenden Ast
Standard

Code:
TakeProfit = NormalizeDouble(OrderOpenPrice()*(1+(TP_Prozent/100)),1);
  #3 (permalink)  
Alt 26.01.15
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 1.875
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

TakeProfit = NormalizeDouble(10744,75*(1+(10/100)),1);
TakeProfit = 11819,2

11819,2 ??

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #4 (permalink)  
Alt 26.01.15
Mitglied
 
Registriert seit: Sep 2012
Beiträge: 224
pako befindet sich auf einem aufstrebenden Ast
Standard

Code:
void OnStart()
  {
//---
   double TakeProfit = NormalizeDouble(10744.75*(1+(10/100)),1);
   Alert(DoubleToString(TakeProfit,3));
   Print(DoubleToString(TakeProfit,3));
  }
//+------------------------------------------------------------------+
Angehängte Grafiken
Dateityp: jpg Unbenannt.jpg (298,6 KB, 8x aufgerufen)
  #5 (permalink)  
Alt 26.01.15
Benutzerbild von markusrgb
Mitglied
 
Registriert seit: Jan 2015
Beiträge: 34
markusrgb befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von traderdoc Beitrag anzeigen
TakeProfit = NormalizeDouble(10744,75*(1+(10/100)),1);
TakeProfit = 11819,2

11819,2 ??

traderdoc
die letzte 1 im code .......(1+(10/100)),1); reduziert das ganze dann wohl auf 1 nachkommastelle

ich kann das jetzt im moment nicht testen, aber ich nehm mal an dass das auch wieder einen fehler Produziert?

da es nicht mit 0,25 - 0,5 - 0,75 - 0,00 endet?
  #6 (permalink)  
Alt 26.01.15
Mitglied
 
Registriert seit: Sep 2012
Beiträge: 224
pako befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von traderdoc Beitrag anzeigen
TakeProfit = NormalizeDouble(10744,75*(1+(10/100)),1);
TakeProfit = 11819,2

11819,2 ??

traderdoc
falsch 10744,75
  #7 (permalink)  
Alt 26.01.15
Mitglied
 
Registriert seit: Sep 2012
Beiträge: 224
pako befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von markusrgb Beitrag anzeigen
die letzte 1 im code .......(1+(10/100)),1); reduziert das ganze dann wohl auf 1 nachkommastelle
NormalizeDouble
Rounding floating point number to a specified accuracy.
  #8 (permalink)  
Alt 26.01.15
Mitglied
 
Registriert seit: Sep 2012
Beiträge: 224
pako befindet sich auf einem aufstrebenden Ast
Standard

Code:
void OnStart()
  {
//---
   double TakeProfit0 = NormalizeDouble(10744.75,1);
   double TakeProfit1 = MathCeil(10744.75);
   double TakeProfit2 = MathFloor(10744.75);
   double TakeProfit3 = MathRound(10744.75);
   Alert(DoubleToString(TakeProfit0,3)," -:- ",DoubleToString(TakeProfit1,3)," -:-  ",DoubleToString(TakeProfit2,3)," -:-  ",DoubleToString(TakeProfit3,3));
   Print(DoubleToString(TakeProfit0,3)," -:- ",DoubleToString(TakeProfit1,3)," -:-  ",DoubleToString(TakeProfit2,3)," -:-  ",DoubleToString(TakeProfit3,3));
  }
//+------------------------------------------------------------------+
  #9 (permalink)  
Alt 26.01.15
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 1.875
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

void OnStart()
{
//---
double TakeProfit = NormalizeDouble(10744.75*(1+(10/100)),1);
Alert(DoubleToString(TakeProfit,3));
Print(DoubleToString(TakeProfit,3));
}
//+------------------------------------------------------------------+

Auch falsch: ergibt dann 10744,8

Er braucht aber .25 oder .5 oder .75 oder .0

und wenn dann double TakeProfit = NormalizeDouble(10744.75*(1+(10.0/100.0)),1);
TakeProfit = 11819.2
Das wäre aber auch nicht das, was er braucht!

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.

Geändert von traderdoc (26.01.15 um 20:38 Uhr)
  #10 (permalink)  
Alt 26.01.15
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 1.875
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Auf die Schnelle mal eine Hilfslösung:

Code:
double TP_Prozent = 10.0;
double TakeProfit = NormalizeDouble(OrderOpenPrice()*(1+(TP_Prozent/100.0)),2);
   
int TP = TakeProfit;
double Nachkomma = TakeProfit - TP;
if (Nachkomma <= 0.12) TakeProfit = TP;
if (Nachkomma > 0.12 && Nachkomma <= 0.37) TakeProfit = TP + 0.25;
if (Nachkomma > 0.37 && Nachkomma <= 0.62) TakeProfit = TP + 0.5;
if (Nachkomma > 0.62 && Nachkomma <= 0.87) TakeProfit = TP + 0.75;
if (Nachkomma > 0.87) TakeProfit = TP + 1.0;
traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
Thema geschlossen

Lesezeichen

Stichworte
digits, digits problem, mql4, nachkomma stellen, nachkomma stellen problem, nachkommastellen, programmierung, programmierung metatrader


Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus




Alle Zeitangaben in WEZ +1. Es ist jetzt 08:06 Uhr.



Der Wavesnode - Spam Firewall
-----------------------------------------------------------------------------------------------------------------------------
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Powered by vBCMS® 2.7.0 ©2002 - 2017 vbdesigns.de
SEO by vBSEO 3.6.1
Copyright ©2009 - 2017 by Expert-Advisor.com - Das Metatrader Forum
MetaTrader bzw. MetaTrader 4 und MetaTrader 5 sind eingetragene Marken der MetaQuotes Software Corp.
-----------------------------------------------------------------------------------------------------------------------------