|
Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
Überprüfung ob "double Variable" ganze Zahl
Hallo zusammen,
ich hoffe mir kann da jemand helfen. Ich habe einen double Wert und möchte überprüfen ob es sich hier um eine ganze Zahl handelt oder nicht. Bitte um eure Hilfe. --- Leopold --- |
|
|||
Code:
if (Double_Wert - NormalizeDouble(Double_Wert, 0) != 0) { //Wert mit Kommastelle } else { //Wert ohne Kommastelle } x.0 ist. Sollte der wie manchmal x.00000000001 sein, dann wird das nicht gehen. Ach und übrigens, ein double Wert kann per se keine Ganzzahl sein, weil per Definiton der Double Wert immer eine Kommastelle hat, auch wenn sie Null ist. traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
Vielen Dank für die schnelle Antwort,
hab vermutet das ich es so machen muss, hatte gehofft es gibt eine fertige Funktion. Sollte aber mit "MathRound()" genau so funktionieren oda? Zur Definition: wie würde man sonst so eine Zahl bezeichnen? --- Leopold --- |
|
|||
Na ja, ne ganze Zahl oder Ganzzahl ist nun mal eine negative oder positive Zahl ohne Dezimalstelle.
Die Zahl x.0 ist somit keine Ganzzahl und bleibt eine Dezimalzahl. Aber man könnte diese Dezimalzahl in eine Integerzahl umwandeln und dann wäre es eine Ganzzahl. Mit Ganzzahl = (int)Doublezahl; wird einfach die Dezimalstelle abgeschnitten. traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
Das Problem der Fließkommaarithmetik ist das Vergleiche nicht funktionieren ohne Bedingungen mit einzubauen.
1 != 1.00000000000001 1 != 0.99999999999999 Obwohl die rechte Seite nahezu 1 entspricht wird dies vom Computer anderes gesehen. Auf die Schnelle als möglichen Lösungsweg würde ich prüfen ob die Gleitkommazahl ein bestimmten Abstand zur nächstgelegenen ganzen Zahl unterschreitet. 1. ermittle die nächstliegende ganze Zahl. 2. definiere Toleranzabstand zB 0.0000001 3. prüfe ob die Differenz zwischen Gleitkommazahl und nächstliegender ganzer Zahl den Toleranzabstand unterschreitet. Ist diese Bedingung erfüllt kann man sagen, der Wert liegt so nah an der ganzen Zahl, dass er als ganze Zahl gelten kann. Gibt sicherlich auch andere Wege, dies war das erste was mir dazu eingefallen ist. Beim Prüfen auf Gleichheit von zwei double-Werten arbeitet man oft mit solchen Toleranzwerten. Dies hier ist nichts anderes, nur dass man mit der nächstliegenden Ganzzahl vergleicht. C$D |
|
|||
Danke für diese Ergänzung.
Für die aktuelle Situation benötige ich das aber nicht, da die Berechnung wirklich genau 0 ergeben muss. Ich überprüfe nämlich ob der gewählte Timeframe zum Inputparameter passt. --- Leopold --- |
|
|||
... aber dabei fällt doch gar keine double Zahl an.
traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
Ich überprüfe den gewählten Timeframe indem ich den Parameter durch die Timeframe-Minuten teile.
Parameter/Timeframe(Period()) Das muss dann eine ganze Zahl ergeben. Der EA kann dann auf verschiedenen Timeframes angewand werden. --- Leopold --- |
|
|||
Also jetzt interessiert es mich vollständig.
Dieser Parameter wird in den Eigenschaften des EAs eingegeben. Hat dieser Parameter noch eine andere Funktion? Und warum gibt es nicht einfach eine string-Variable, in der alle TFs aufgelistet sind, auf die der EA laufen soll? traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
Hallo
Es handelt sich um ein Ausbruchssystem aus einer zeitlichen Range. Die Start- und Endzeit der Range werden über Parameter als Wert in Minuten ab Tagesbeginn eingegeben. Dadurch habe ich den Vorteil, dass ich beim Optimieren für z.B. die Startzeit nur den einen Parameter und nicht zwei Parameter (Stunden und Minuten) habe und diesen auch durchgehend aufwärts durchlaufen lassen kann und somit nur eine Datenreihe habe. Ich finde das ist für die Auswertung der Optimierung leichter. Für die Hoch- und Tiefbestimmung muss ich dann die Kerzen in dieser Range abfragen können. Außerdem lasse ich den Großteil des Programms nur durchlaufen wenn sich eine neue Kerze gebildet hat. Aus diesen Gründen muss der Parameter ein vielfaches des Timeframe sein. Zum einen müssen die Kerzen selektiert werden und zum anderen muss das Programm durchlaufen sobald die Range abgeschlossen ist. Feste Timeframes möchte ich nicht definieren, weil diese Parameter-abhängig sind. Hoffe des ist verständlich. Bin auch offen für bessere Lösungsvorschläge. --- Leopold --- |
Lesezeichen |
Stichworte |
double wert, double wert überprüfen, double zahl, ganze zahl, mql4, programmierung, programmierung metatrader, programmierung mql4 |
|
|