Detección de 5 dígitos - página 2

 
7bit:
Estoy tratando de escribir un código a prueba de tontos que no se rompa.

Si lo que buscas es un código a prueba de errores, yo no apostaría por la estructura de archivos symbols.raw. Es una estructura de archivos "interna" y no documentada. No hay garantías de que no cambie en futuras versiones.

 

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 la demo de The Collective FX, donde están probando un feed combinado independiente 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 cualquier excepción que encuentres como tal y tal vez codificar ese tema en particular en lugar de tratar de encontrar una solución de retención.

 
kennyhubbard:


En el caso del Oro, siempre ha sido una cotización de 2 dígitos y los nuevos brokers de 1/10 pip lo cotizan a 3 dígitos, por lo que incluso este caso está bien cubierto.

He visto cotizar el ORO con 1 dígito en un broker de 4 dígitos. No sé el nombre del broker porque esto fue cuando estábamos probando mi generador de señales IRC en algún canal IRC, pero uno de mis probadores hizo operaciones con ORO y las cotizaciones salieron con 1 dígito. Le pregunté y me dijo que su broker era de 4 dígitos.

Este fue el momento exacto en el que decidí que el enfoque "3 o 5" debe ser fundamentalmente defectuoso y empecé a buscar algo mejor.
 
7bit:
He visto cotizar el ORO con 1 dígito en un broker de 4 dígitos. [...] Este fue el momento exacto en el que decidí que el enfoque de "3 o 5" debe ser fundamentalmente defectuoso y empecé a buscar algo mejor.

En Alpari UK, que generalmente es un broker de 3/5 dígitos, el oro se cotiza a 2DP con un tamaño de tick de 0,05. He visto una referencia en algún lugar de este foro a alguien que operaba con bonos del Tesoro de EE.UU. que cotizaban a 3DP. Sin embargo, en ese caso el tamaño del tick no habría sido de 0,001.

Una posible vía es comprobar que la precisión de un símbolo es de 3/5 dígitos y también que el tamaño del tick es de 0,001/0,00001. Alternativamente, dependiendo de lo que esté tratando de lograr, podría intentar detectar los pares de div isas comprobando que los primeros seis caracteres consisten en dos símbolos de divisas conocidos (es decir, utilizando una lista de divisas reconocidas). También podría utilizar MODE_PROFITCALCMODE como una forma de detectar los símbolos de divisas, en contraposición a los futuros / acciones / etc, pero sospecho que podría no ser fiable a través de los corredores.

 
En algún lugar entre LotSize, TickSize, TickValue, Punto, Margen, etc... puede haber una relación para resolver esto..
Estoy demasiado ADD en este momento para averiguar esto :)), pero si alguien está interesado aquí es algunos enlaces que me refiero a

- de Ais : LotSize,
- de fbj : Apalancamiento, margen, etc.
 
La teoría para la solución se encuentra al final de la página 1, a menos que todos piensen que es tan estúpida que no se molestaron en comentar.
 
Ruptor:
La teoría para la solución se encuentra en la parte inferior de la página 1 a menos que todos ustedes piensan que es tan estúpido que no se molestó en comentar.

A título personal, no he entendido tu post anterior. Creo que la pregunta original de 7bit está preguntando cómo manejar escenarios como el siguiente: "Hay un parámetro externo donde el usuario introduce un valor en pips. En algunos casos, el tamaño del pip que el usuario tiene en mente es diferente al MODE_TICKSIZE reportado por el broker - por ejemplo, el broker tiene un tamaño de tick de 0.00001 pero el usuario está llamando a un pip 0.0001. ¿Existe una forma fiable de leer la mente del usuario y averiguar cuándo debe ajustarse el valor del pip que ha introducido, y en qué medida?" No hay una respuesta puramente matemática a esto en la línea que parece sugerir. Es una cuestión de una convención semi-arbitraria de que un pip en, por ejemplo, EURUSD se considera generalmente como 0,0001 a pesar de que la mayoría de los corredores citan el símbolo a 5DP.

EDIT: ...por eso el oro, etc., es tan complicado, porque hay menos convención acordada. En Alpari UK, el oro se mueve en incrementos de 0,05. Si se hiciera una encuesta entre los operadores y se preguntara cuántos puntos representa eso, creo que se obtendría un número razonable de votos para cada una de las cuatro respuestas siguientes: 5, 1, 0,5 y 0,05.

 
Ruptor:
¿No es sólo una simple (quizás no tan simple en términos matemáticos) cuestión de calcular lo que es un punto en relación con un precio dado y luego decidir en qué dígito se encuentra en comparación con los dígitos del precio?
Una forma sencilla de conseguirlo podría ser tomar un precio, añadir un punto y compararlo con su multiplicador + el mismo precio, si el resultado no es el mismo, aumentar su multiplicador en un bucle hasta que coincidan.

Ruptor,

Lo has puesto tan sutil que creo que no lo entendí la primera vez que lo leí. Todavía no lo hago :)). ¿Podrías explicarlo mejor?

Algunos brokers como GCI también listan símbolos futuros como S&P 500, IBM, Intel incluso Disney... ¿cómo se aplicaría esto entonces?

 
Hola cameofx
Una imagen vale más que mil palabras o que un código en este caso. pipx es lo que tienes que multiplicar por Punto para obtener 1/10000 th por un punto que es el valor habitual para operar.
   double tmpx=MathCeil((Ask/10000)/Point);
   double pipx=1;
   while (tmpx>=10.0){
      pipx*=10;
      tmpx/=10;
   }
Todavía no es a prueba de tontos si la moneda se mueve hacia arriba o hacia abajo 10 veces su valor en contra de su par, pero es impermeable a los dígitos del corredor en forex creo.
 
Ruptor:
[...] Todavía no es a prueba de tontos si la moneda se mueve hacia arriba o hacia abajo 10 veces su valor contra su par, pero es impermeable a los dígitos del corredor en forex creo.

Estoy francamente desconcertado por esto. Por ejemplo, si el precio del USDJPY cayera por debajo de 90 entonces este código comenzaría a reportar diferentes valores de pipx en un broker 3/5DP.

En este momento, con el USDJPY en alrededor de 92,5, y con un broker 3/5DP donde Punto = 0,001, entonces tmpx/pipx se evalúan de la siguiente manera:

  • 92.5 / 10000 = 0.00925
  • 0.00925 / 0.001 = 9.25
  • MathCeil() redondea tmpx a 10
  • pipx se fija en 10

Si el precio del USDJPY cayera por debajo de 90 (por ejemplo, 89,5), entonces la evaluación sería la siguiente:

  • 89.5 / 10000 = 0.00895
  • 0.00895 / 0.001 = 8.95
  • MathCeil() redondea tmpx hasta 9
  • pipx se queda en 1, no en 10

En otras palabras, por razones que no entiendo completamente, la definición de este código de un pip es sensible a los cambios de precio, y su multiplicador cambia de un orden de magnitud a otro basado en el precio, no (sólo) basado en la configuración del broker. Habría dado resultados diferentes en distintos momentos de la semana pasada. En un broker de 2/4DP, el pipx se mantendría en 1 durante todo el tiempo, en lugar de variar entre 1 y 10.