Detección de 5 dígitos - página 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

Aquí hay una solución alternativa al problema que yo uso...

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);
  }

Entonces sólo hay que utilizar la variable SymPoint en lugar de la variable Point. Muy similar a Cameo

 

Sólo para confundir un poco más las cosas, BrocoTrader tiene valores con 0 a 5 dígitos para sus diversos valores...

 
kennyhubbard:

Hola 7bit,

Creo que tienes razón al intentar crear un código a prueba de balas ....... pero siempre va a haber límites.

Sólo tienes que mirar el feed de demostración de The Collective FX, donde están probando un feed independiente combinado de diferentes proveedores de liquidez (en lugar de un único feed acordado de múltiples fuentes), cada uno con su propio sufijo de par de divisas (¿hemos encontrado un uso para el sufijo por fin?), para darse cuenta del alcance del problema. Esto significa que dentro de una plataforma podrá elegir entre EURUSD_fx o EURUSDm o EURUSD_dbfx, según desee. Esto por sí solo va a conducir un agujero masivo en su estrategia, ya que algunos de estos son los precios de 4 dígitos y otros 5 dígitos.

El "si (Dígitos == 3 || Dígitos == 5)" es lo más completo que va a encontrar, ya que funciona con la simple premisa de que sólo hay 2 tipos de corredores, es decir, los que tienen feeds de pips enteros y los que tienen feeds de 1/10 de pips. Este caso cubre los pares de divisas 2/3/4/5 y los corredores.

Para mi información, ¿has visto algún caso que sea una excepción? En el caso del Oro, siempre ha sido una cotización de 2 dígitos y los nuevos brokers de 1/10 pips lo cotizan a 3 dígitos, por lo que incluso este caso está bien cubierto.

Yo sugeriría simplemente tratar las excepciones que encuentres como tales y tal vez codificar ese tema en particular en lugar de tratar de encontrar una solución de retención.


Una cosa que he notado cuando surge esta conversación es que la gente habla de un sufijo, pero nunca de un prefijo. También es posible tener un prefijo. Me he encontrado con un corredor que tiene un prefijo.

Mis pensamientos sobre esto están de acuerdo con el cartel original aquí, quiero productos tan sólidos como sea posible para mis clientes, no me importa arriesgar más codificación para arreglar más tarde. Todo mi código podría estar envuelto alrededor de ese cambio y me puede costar varias horas de desarrollador para ir a través de miles de líneas de código para modificarlo. Así que hacerlo bien la primera vez reduce el riesgo y el gasto de tener que volver a arreglarlo. También estoy de acuerdo en que esto es un error, pero no un error en nuestro código tanto como una debilidad en MQL.

Sin embargo, también he estado contemplando una solución. Una de mis soluciones era ir a través de la lista de símbolos y encontrar EURUSD utilizando subcadena para llegar a ella. A continuación, obtener el valor de la oferta de la misma. Una vez que tenía el valor de la oferta, yo podría hacer un doubletostr, a continuación, encontrar una manera de contar los caracteres en la cadena, como strlen o algo así. Es un dolor de cabeza, pero podría darme la determinación de 4 o 5 dígitos, lo que sería bastante sólido. A partir de eso podría establecer mi base para rarezas como Gold.

Esto es sólo una teoría, todavía no lo he intentado. Estoy demasiado ocupado tratando de resolver los proyectos actuales.

 

en mi EA utilizo este código para el cálculo del Pip - este Pip lo utilizo en todos los lugares en los que trato con bool externo introducido en pips como SL, TP, TS o quiero ver el beneficio en pips ... probado en 3 brokers diferentes - sin problemas en diferentes pares, DAX 1/2 números decimales ... ya sé que se ve similar como en los mensajes antes, pero su funcional en vivo ...


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

en mis otros indis trato de buscar el símbolo JPY también ... :-)

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

en mi EA utilizo este código para el cálculo del Pip - este Pip lo utilizo en todos los lugares en los que trato con bool externo introducido en pips como SL, TP, TS o quiero ver el beneficio en pips ... probado en 3 brokers diferentes - sin problemas en diferentes pares, DAX 1/2 números decimales ... ya sé que se ve similar como en los mensajes antes, pero su funcional en vivo ...


en mis otros indis trato de buscar el símbolo JPY también ... :-)

En lugar de buscar JPY me gustaría encontrar el "Punto" para cada moneda. Esto es lo que he intentado:

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

Así que la expectativa sería dar el valor respectivo para el par almacenado en Pair01. Sin embargo, esto sólo devuelve 0. ¿Por qué eso? Pari01 en mi ejemplo es "AUDCAD" y el indicador se adjunta a un gráfico EURUSD.

Experimentando más, ahora veo que funciona para algunas monedas, pero no para otras. Esto es bastante confuso. MODE_DIGITS parece funcionar mejor. ¿Cómo puede ser?

pi

 
seic:

en mi EA utilizo este código para el cálculo del Pip - este Pip lo utilizo en todos los lugares en los que trato con bool externo introducido en pips como SL, TP, TS o quiero ver el beneficio en pips .. probado en 3 brokers diferentes - sin problemas en diferentes pares, DAX 1/2 números decimales ... ya sé que se ve similar como en los mensajes antes, pero su funcional en vivo ...

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

Sólo porque usted está en un corredor de 5 dígitos. En un broker de 4 dígitos PIP y Point son lo mismo.
¿Qué es un TICK?-MQL4 y MetaTrader 4 - Foro de programación MQL4

 

Y InstaForex tiene 4 dígitos para USDSEK y USDNOK, mientras que 5 para EURUSD.


Así que creo que usted necesita tener una matriz con un ajuste para cada moneda de cotización para obtener la cantidad de pips y no ticks.