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.

Login
Benutzername:
Kennwort:


Statistik
Themen: 4973
Beiträge: 43248
Benutzer: 7.220
Aktive Benutzer: 82
Links: 84
Wir begrüßen unseren neuesten Benutzer: JosephTK
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 22:38).
Neue Benutzer:
vor 2 Stunden
- JosephTK
vor 2 Tagen
- Hopfen&Mal...
vor 2 Tagen
- frankmicha...
vor einer Woche
- DFeck
vor einer Woche
- bb1107

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

Empfehlungen

Like Tree1Likes
Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 22.02.18
Premium Mitglied
 
Registriert seit: Jun 2016
Ort: Österreich
Beiträge: 362
Leopold befindet sich auf einem aufstrebenden Ast
Standard Ü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 ---
  #2 (permalink)  
Alt 22.02.18
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.733
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Code:
if (Double_Wert - NormalizeDouble(Double_Wert, 0) != 0) {
   //Wert mit Kommastelle
} else {
   //Wert ohne Kommastelle
}
Das funktioniert aber nur, wenn der Double_Wert auch tatsächlich
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.
  #3 (permalink)  
Alt 22.02.18
Premium Mitglied
 
Registriert seit: Jun 2016
Ort: Österreich
Beiträge: 362
Leopold befindet sich auf einem aufstrebenden Ast
Standard

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 ---
  #4 (permalink)  
Alt 22.02.18
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.733
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

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
Leopold likes this.
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #5 (permalink)  
Alt 23.02.18
Premium Mitglied
 
Registriert seit: Jun 2013
Beiträge: 364
Ca$hDigger befindet sich auf einem aufstrebenden Ast
Standard

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
  #6 (permalink)  
Alt 23.02.18
Premium Mitglied
 
Registriert seit: Jun 2016
Ort: Österreich
Beiträge: 362
Leopold befindet sich auf einem aufstrebenden Ast
Standard

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 ---
  #7 (permalink)  
Alt 23.02.18
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.733
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

... 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.
  #8 (permalink)  
Alt 23.02.18
Premium Mitglied
 
Registriert seit: Jun 2016
Ort: Österreich
Beiträge: 362
Leopold befindet sich auf einem aufstrebenden Ast
Standard

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 ---
  #9 (permalink)  
Alt 23.02.18
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.733
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

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.
  #10 (permalink)  
Alt 24.02.18
Premium Mitglied
 
Registriert seit: Jun 2016
Ort: Österreich
Beiträge: 362
Leopold befindet sich auf einem aufstrebenden Ast
Standard

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 ---
Thema geschlossen

Lesezeichen

Stichworte
double wert, double wert überprüfen, double zahl, ganze zahl, mql4, programmierung, programmierung metatrader, programmierung mql4

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 00:37 Uhr.





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