5-Stellen-Erkennung - Seite 6

 
cameofx 2010.07.29 10:52

I use below functions now, and it's usable across different brokers & instruments.

double vPoint; 
if(Digits == 2 || Digits == 4) vPoint = Point; else
if(Digits == 3 || Digits == 5) vPoint = Point*10; // I use this for my indies; call once on init() & use where Point supposed to be used in start() 

double Poin() 
{ 
   int d = Digits;
   switch(d){
   case 2 : {return(Point); break;}
   case 4 : {return(Point); break; }
   case 3 : {return(Point*10); break;}
   case 5 : {return(Point*10); break:}
   default : return;
} // I just come up with this. Untested but should be ok/robust. To be used to replace Point for trade parameters calculations. 

cheers, ~ cameo

Hier ist eine alternative Lösung für das Problem, das ich verwende...

int init()
  {
   double SymPoint;
   if (Point == 0.00001) SymPoint = 0.0001; //5 digits
   else if (Point == 0.001) SymPoint = 0.01; //3 digits
   else SymPoint = Point; //Normal
   
   return(0);
  }

Dann verwenden Sie einfach die Variable SymPoint anstelle der Variable Point. Sehr ähnlich wie bei Cameo

 

Nur um die Dinge ein wenig mehr zu verwirren, hat BrocoTrader Wertpapiere mit 0 bis 5 Ziffern für ihre verschiedenen Wertpapiere...

 
kennyhubbard:

Hallo 7bit,

Ich denke, Sie haben Recht, wenn Sie versuchen, einen kugelsicheren Code zu erstellen......., aber es wird immer Grenzen geben.

Man muss sich nur den Demo-Feed für The Collective FX ansehen, wo sie einen kombinierten unabhängigen Feed von verschiedenen Liquiditätsanbietern testen (im Gegensatz zu einem einzigen zusammengefassten Feed aus mehreren Quellen), jeder mit seinem eigenen Währungspaar-Suffix (haben wir endlich eine Verwendung für das Suffix gefunden?), um den Umfang des Problems zu erkennen. Das bedeutet, dass Sie innerhalb einer Plattform zwischen EURUSD_fx, EURUSDm oder EURUSD_dbfx wählen können. Dies allein wird ein gewaltiges Loch in Ihre Strategie reißen, da einige davon 4-stellige Preise und andere 5-stellige Preise sind.

Das "if (Digits == 3 || Digits == 5)" ist so allumfassend, wie Sie es nur finden können, da es auf der einfachen Prämisse beruht, dass es nur 2 Arten von Brokern gibt, d.h. solche, die ganze Pip-Feeds haben, und solche, die 1/10tel Pips-Feeds haben. Dieser Fall deckt die 2/3/4/5 Währungspaare und Makler.

Zu meiner eigenen Information, haben Sie einen Fall gesehen, der eine Ausnahme darstellt? Im Falle von Gold war die Notierung immer zweistellig, und die neuen Broker mit 1/10 Pips notieren dreistellig, so dass auch dieser Fall gut abgedeckt ist.

Ich würde vorschlagen, dass Sie alle Ausnahmen, die Sie finden, einfach als solche behandeln und dieses spezielle Problem vielleicht hart kodieren, anstatt zu versuchen, eine Pauschallösung zu finden.


Mir ist aufgefallen, dass bei diesem Thema immer von einem Suffix, aber nie von einem Präfix gesprochen wird. Es ist möglich, auch ein Präfix zu haben. Ich bin einem Makler begegnet, der ein Präfix hat.

Meine Gedanken dazu stimmen mit dem ursprünglichen Poster überein: Ich möchte für meine Kunden so solide Produkte wie möglich, und ich möchte nicht das Risiko eingehen, später noch mehr Code zu korrigieren. Mein gesamter Code könnte sich um diese eine Änderung drehen, und es könnte mich mehrere Entwicklerstunden kosten, Tausende von Codezeilen durchzugehen, um sie zu ändern. Wenn ich es also gleich beim ersten Mal richtig mache, verringert sich das Risiko und die Kosten für eine erneute Korrektur. Ich stimme auch zu, dass dies ein Fehler ist, aber nicht so sehr ein Fehler in unserem Code, sondern eher eine Schwäche von MQL.

Ich habe jedoch auch über eine Lösung nachgedacht. Eine meiner Lösungen war es, durch die Symbolliste zu gehen und EURUSD mit Hilfe von substring zu finden, um es zu erhalten. Dann bekomme ich den Geldwert des Symbols. Sobald ich den Geldwert hatte, konnte ich ein doubletostr tun, dann herausfinden, einen Weg, um die Zeichen in der Zeichenfolge, wie strlen oder etwas Ähnliches zu zählen. Das ist zwar mühsam, aber es könnte mir eine 4- oder 5-stellige Bestimmung liefern, die ziemlich zuverlässig wäre. Daraus könnte ich meine Grundlage für Merkwürdigkeiten wie Gold ableiten.

Dies ist nur eine Theorie, ich habe es noch nicht versucht. Ich bin zu sehr damit beschäftigt, mich um die aktuellen Projekte zu kümmern.

 

in meinem EA verwende ich diesen Code für die Berechnung von Pip - diese Pip verwende ich überall, wo ich mit externen bool in Pips wie SL, TP, TS eingegeben oder ich will sehen, Gewinn in Pips .. getestet auf 3 verschiedene Broker - kein Problem auf verschiedene Paare, DAX 1/2 Dezimalzahlen ... ja ich weiß, es sieht ähnlich wie in Beiträge vor, aber seine funktionale live ...


Pip = Point;
if(Digits==2 || Digits==4 || Digits==6) Pip = 100*Point;
else if( Digits==1 || Digits==3 || Digits==5) Pip = 10*Point; 

in meinen anderen Indizes versuche ich auch nach dem JPY Symbol zu suchen ... :-)

Tmp_int = StringFind(Symbol(), "JPY", 0);
if(Tmp_int<0) Pip = 10000;
else Pip = 100;
 
seic:

in meinem EA verwende ich diesen Code für die Berechnung von Pip - diese Pip verwende ich überall, wo ich mit externen bool in Pips wie SL, TP, TS eingegeben oder ich will sehen, Gewinn in Pips ... getestet auf 3 verschiedene Broker - kein Problem auf verschiedene Paare, DAX 1/2 Dezimalzahlen ... ja ich weiß, es sieht ähnlich wie in den Beiträgen vor, aber seine funktionale live ...


in meinen anderen Indizes versuche ich auch nach dem JPY Symbol zu suchen ... :-)

Anstatt nach JPY zu suchen, würde ich gerne den "Punkt" für jede Währung finden. Das habe ich versucht:

  ObjectSetText("pi_Pair01",MarketInfo(Pair01,MODE_POINT));

Die Erwartung wäre also, den entsprechenden Wert für das Paar, das in Pair01 gespeichert ist, zu erhalten. Dies liefert jedoch nur 0. Warum? Pari01 in meinem Beispiel ist "AUDCAD" und der Indikator ist mit einem EURUSD-Chart verbunden.

Bei weiteren Experimenten habe ich festgestellt, dass er für einige Währungen funktioniert, für andere jedoch nicht. Das ist ziemlich verwirrend. MODE_DIGITS scheint besser zu funktionieren. Wie kann das sein?

pi

 
seic:

in meinem EA verwende ich diesen Code für die Berechnung von Pip - diese Pip verwende ich überall, wo ich mit externen bool in Pips wie SL, TP, TS eingegeben oder ich will sehen, Gewinn in Pips .. getestet auf 3 diff Broker - kein Problem auf diff Paare, DAX 1/2 Dezimalzahlen ... ya ich weiß, es sieht ähnlich wie in Beiträge vor, aber seine funktionale live ...

if(Digits==2 || Digits==4 || Digits==6) Pip = 100*Point;

Nur weil Sie auf einem 5-stelligen Broker sind. Bei einem 4-stelligen Broker sind PIP und Point das gleiche.
Was ist ein TICK?-MQL4 und MetaTrader 4 - MQL4 Programmierforum

 

Und InstaForex hat 4 Ziffern für USDSEK und USDNOK, während 5 Ziffern für EURUSD.


So denke ich, dass Sie ein Array mit einer Einstellung für jede Kurswährung haben müssen, um die Menge der Pips und nicht Ticks zu erhalten.