3 || 5 Digits ; _Point ;

 

Hi,
ich programmiere gerade einen EA und möchte, dass er auf FX und CFD läuft.
Ich möchte auch, dass er bei verschiedenen Brokern läuft (zB GKFX und AdmiralMarkets).

Bisher habe ich zB für SL, TP, usw. immer Wert*_Point genommen.
Jetzt habe ich aber das Problem, dass die Broker unterschiedliche Nachkommastellen usw. haben.

Wie / womit kann ich denn die Berechnung korrigieren?
Wenn ich zB einen SL von 200 Pkt setzen möchte... bei dem einen Broker ist das eine andere "Einheit" wie bei dem anderen

Hängt diese (fehlerhafte) Berechnung mit _Point oder _MODE_DIGITS oder ... zusammen?

Ich hoffe ich werde nicht gesteinigt... ABER... ich verstehe den Zusammenhang zwischen Nachkommastelle, Kontraktgröße nicht so richtig


ps. Nutze MQL4

 

Also Nachkommastellen und _Point korrelieren: 5 Dez.Stellen _Point = 0.00001 und 3 Dez.Stellen _Point = 0.001.

Kontraktgröße ist dann jetzt aber etwas anderes. Schau Dir die Spezifikationen im Terminal an: Marktübersicht => rechter Mausklick über einem Symbol => Spezifikationen.

 
Markus Wilhelm:

Hi,
ich programmiere gerade einen EA und möchte, dass er auf FX und CFD läuft.
Ich möchte auch, dass er bei verschiedenen Brokern läuft (zB GKFX und AdmiralMarkets).

Bisher habe ich zB für SL, TP, usw. immer Wert*_Point genommen.
Jetzt habe ich aber das Problem, dass die Broker unterschiedliche Nachkommastellen usw. haben.

Wie / womit kann ich denn die Berechnung korrigieren?
Wenn ich zB einen SL von 200 Pkt setzen möchte... bei dem einen Broker ist das eine andere "Einheit" wie bei dem anderen

Hängt diese (fehlerhafte) Berechnung mit _Point oder _MODE_DIGITS oder ... zusammen?

Ich hoffe ich werde nicht gesteinigt... ABER... ich verstehe den Zusammenhang zwischen Nachkommastelle, Kontraktgröße nicht so richtig


ps. Nutze MQL4

ein Point ist immer ein Point

das mit 3 oder 5 Nachkommastellen hat sich längst überholt, früher gab es broker, die hatten bei EURUSD als Beispiel nut 4 Kommastellen, bei USDJPY nur 2

das gibts eigentlich eh nicht mehr. alle haben 3 oder 5 Nachkommastellen

und ein Point ist immer die letzte Nachkommastelle, egal wieviele es gibt

 
amando:

ein Point ist immer ein Point

das mit 3 oder 5 Nachkommastellen hat sich längst überholt, früher gab es broker, die hatten bei EURUSD als Beispiel nut 4 Kommastellen, bei USDJPY nur 2

das gibts eigentlich eh nicht mehr. alle haben 3 oder 5 Nachkommastellen

und ein Point ist immer die letzte Nachkommastelle, egal wieviele es gibt


Und wie verhält sich das dann bei zB dem DAX30 in meinem EA?

Bsp.:

Kontraktgröße --> GKFX und Admiral haben beide die gleiche Kontraktgröße = 100.000

Mode_DIGITS --> GKFX hat 1.0  ; Admiral hat 2.0

folglich ist _Point --> GKFX 0.1 ; Admiral 0.01


Wenn ich also beim DAX30 beispielhaft die Differenz von 13.400 zu 13.500 ermitteln möchte, sind es bei GKFX 1.000 _Point und bei Admiral 10.000 _Point

Ich meine das ist ja eigentlich logisch da _Point sich auf eine andere Anzahl NK Stellen bezieht.... aber gedanklich hängt bei mir drin, dass es ja "nur" 100 Pkt Differenz sind

Ist mein Fehler dass ich hier Punkte, Pips, Ticks usw. durcheinander werfe?

 
Markus Wilhelm:


Und wie verhält sich das dann bei zB dem DAX30 in meinem EA?

Bsp.:

Kontraktgröße --> GKFX und Admiral haben beide die gleiche Kontraktgröße = 100.000

Mode_DIGITS --> GKFX hat 1.0  ; Admiral hat 2.0

folglich ist _Point --> GKFX 0.1 ; Admiral 0.01


Wenn ich also beim DAX30 beispielhaft die Differenz von 13.400 zu 13.500 ermitteln möchte, sind es bei GKFX 1.000 _Point und bei Admiral 10.000 _Point

Ich meine das ist ja eigentlich logisch da _Point sich auf eine andere Anzahl NK Stellen bezieht.... aber gedanklich hängt bei mir drin, dass es ja "nur" 100 Pkt Differenz sind

Ist mein Fehler dass ich hier Punkte, Pips, Ticks usw. durcheinander werfe?

genau das ist der Grund, warum man immer mit Point arbeiten soll. Ein Point ist immer die letzte Kommastelle.

das Arbeiten mit Pips ist was ewig gestriges.


ein Point beim Dax ist genauso die letzte Kommastelle wie beim EURUSD

 
amando:

genau das ist der Grund, warum man immer mit Point arbeiten soll. Ein Point ist immer die letzte Kommastelle.

das Arbeiten mit Pips ist was ewig gestriges.


ein Point beim Dax ist genauso die letzte Kommastelle wie beim EURUSD


ich habe im EA immer * _Point genutzt...

deswegen bin ich verwirrt warum er dann bei den beiden Brokern auf unterschiedliche Levels (SL,TP, usw.) kommt. Muss ich irgendwo noch vorgeben, wenn MODE_DIGITS ==1 oder ==2 , dann mach das so und so?

oder vorgeben wenn es FX ist oder CFD dass er _Point anders berechnet?

Man sagt doch immer, der DAX ist zB um 100 Pkt gestiegen... eben von 13.400 auf 13.500... das ist dann aber das nicht das korrekte wenn man einen EA macht, oder?


Ist das der Moment, wo man dann mit dem adjustieren der Pkt anfangen muss?

if (Digits == 5 || Digits == 3)  ....
 
Markus Wilhelm:


ich habe im EA immer * _Point genutzt...

deswegen bin ich verwirrt warum er dann bei den beiden Brokern auf unterschiedliche Levels (SL,TP, usw.) kommt. Muss ich irgendwo noch vorgeben, wenn MODE_DIGITS ==1 oder ==2 , dann mach das so und so?

oder vorgeben wenn es FX ist oder CFD dass er _Point anders berechnet?

Man sagt doch immer, der DAX ist zB um 100 Pkt gestiegen... eben von 13.400 auf 13.500... das ist dann aber das nicht das korrekte wenn man einen EA macht, oder?


Ist das der Moment, wo man dann mit dem adjustieren der Pkt anfangen muss?

wenn man im Fernsehen sagt das der Dax um 100 Punkte gestiegen ist, dann stimmt deine Aussage so

aber im Metatrader sind das dann nur

bei einstelligen Brokern

13.410.0

bei zweistelligen brokern

13.401.00


siehst Du den Unterschied? Darum immer Point verwenden und keine Unterscheidung. 

Die Abfrage ob 3 oder 5 Stellen würde ja auch nur Forex betreffen, auf die restlichen CFD hat das 0 Auswirkung

das kommt daher, das früher UJ nur 2 Kommastellen hatte und EU nur 4

da gab es dann die Umstellung und es gab dann in vielen EA die Abfrage wieviele Kommastellen es gibt, damit man SL und TP immer in Pips eingegeben kann.

Nachdem es keine 2/4 Digit Broker mehr gibt, und falls doch, dann Hände weg, ist die Abfrage sinnlos und es ist immer Besser gleich in Point zu rechnen.

Wo ist der Unterschied ob ich beim SL 10 Pips oder 100 Point als sl eingebe?

 
amando:

wenn man im Fernsehen sagt das der Dax um 100 Punkte gestiegen ist, dann stimmt deine Aussage so

aber im Metatrader sind das dann nur

bei einstelligen Brokern

13.410.0

bei zweistelligen brokern

13.401.00


siehst Du den Unterschied? Darum immer Point verwenden und keine Unterscheidung. 

Die Abfrage ob 3 oder 5 Stellen würde ja auch nur Forex betreffen, auf die restlichen CFD hat das 0 Auswirkung

das kommt daher, das früher UJ nur 2 Kommastellen hatte und EU nur 4

da gab es dann die Umstellung und es gab dann in vielen EA die Abfrage wieviele Kommastellen es gibt, damit man SL und TP immer in Pips eingegeben kann.

Nachdem es keine 2/4 Digit Broker mehr gibt, und falls doch, dann Hände weg, ist die Abfrage sinnlos und es ist immer Besser gleich in Point zu rechnen.

Wo ist der Unterschied ob ich beim SL 10 Pips oder 100 Point als sl eingebe?


Ja also bei FX ist es bei den Brokern gleich, mir geht's darum, dass ich den EA auch auf CFD laufen lassen möchte, der Einfachheit-Halber aber dort dann auch zB SL = 200 eingeben möchte.

Ich hab das jetzt mal so gelöst (siehe unten)... was denkst du / ihr darüber? Gut oder Schlecht?

double                                                                                    Points = _Point;
if(MarketInfo(Symbol(),MODE_PROFITCALCMODE)==0)                                           Points = _Point;        //Forex
if(MarketInfo(Symbol(),MODE_PROFITCALCMODE)==1 && MarketInfo(Symbol(),MODE_DIGITS)==1)    Points = _Point*10;     //CFD mit 1 NK Stelle
if(MarketInfo(Symbol(),MODE_PROFITCALCMODE)==1 && MarketInfo(Symbol(),MODE_DIGITS)==2)    Points = _Point*100;    //CFD mit 2 NK Stellen
 
Markus Wilhelm:


Ja also bei FX ist es bei den Brokern gleich, mir geht's darum, dass ich den EA auch auf CFD laufen lassen möchte, der Einfachheit-Halber aber dort dann auch zB SL = 200 eingeben möchte.

Du musst den SL ja sowieso immer an dein Symbol anpassen

wenn du jetzt einen broker hast, der 2 Kommastellen am dax bietet und du hast einen Kurs von

13400,00

und du willst long gehen, mit 200 echten punkten als stop, dann musst du 20000 eingeben, dann setzt er dir den Stop auf 

13200,00

wenn du einen mit einer kommastelle hast, dann musst du den stop auf 2000 eingeben damit du auf 13200,0 kommst


da hat die Abfrage, ob du 3 oder 5 Kommastellen hast genau 0 sinn

wie gesagt, die Abfrage war für Forex früher

angenommen du hattest einen 4 digits broker und der Kurs war 1,3000 mit 100 Pips stop, dann war der Stop auf 1,2900, jetzt hast du den selben EA auf einem 5 Digits Broker

der Kurs war dann logischerweise 1,30000 und du hast 100 Pips stop dann hast du mit der Abfrage, 

_Digits == 5

einfach den 

SL = _Pips *10 gerechnet und du warst wieder dort

nachdem es diese Broker meines Wissens eh nicht mehr gibt, was nur 4 Kommastellen auf EURUSD anbieten, ist die Abfrage Sinnlos und ich geb gleich alles in Point ein

demzufolge geb ich gleich 1000 Point als stop ein und es passt dabei


Für Future CFD kann das nie passen

ich hab einen Broker, der bietet Dax mit 2 Kommastellen und DaxCash mit einer an

da kann das sowieso nie hinkommen

 
Neben _Point sind auch SYMBOL_TRADE_TICK_SIZE  und SYMBOL_TRADE_TICK_VALUE zu berücksichtigen. Meist, aber eben nicht immer, sind _Point und SYMBOL_TRADE_TICK_SIZE gleich. Siehe https://www.mql5.com/de/docs/constants/environment_state/marketinfoconstants#enum_symbol_info_double
Dokumentation zu MQL5: Konstanten, Enumerationen und Strukturen / Medium Zustand / Information über das Symbol
Dokumentation zu MQL5: Konstanten, Enumerationen und Strukturen / Medium Zustand / Information über das Symbol
  • www.mql5.com
Information über das Symbol - Medium Zustand - Konstanten, Enumerationen und Strukturen - Nachschlagewerk MQL5 - Nachschlagewerk über die Sprache des algothitmischen/automatischen Handels für MetaTrader 5