Precio por punto - página 9

 
gordon:

Mi definición pierde su significado original cuando se cita fuera de contexto. Para aclarar - la palabra "precio" en la definición de MODE_TICKSIZE se refiere a las posibles cotizaciones de precios reales, mientras que en la definición de Punto se refiere a cualquier precio.

- Gordon, mi definición tampoco es muy buena ( Punto = factor de multiplicación para el menor precio decimal ) y la analogía hexadecimal es tan cutre... Pero puede que tenga un ganador aquí...

Lógica :
El broker necesita establecer relaciones de precios entre pares que giren en torno a que MODE_LOTSE sea 100.000 unidades de moneda cotizada y MODE_TICKVALUE sea 10 unidades de moneda cotizada. Sólo por esta condición de igualdad de interrelación, el precio puede ser cotizado entre sí. Esto supongo que es la base de la construcción de precios de Forex.

Punto = MODE_LOTSIZE / Tickvalue en la moneda cotizada. p.ej:
GBPUSD 0.0001 = 100,000 / 10 USD
USDJPY 0.01 = 100,000 / 1,000 JPY <-- MathRound( MODE_TICKVALUE * último Bid de la divisa cotizada )
CHFJPY .... etc. si usted o alguien puede confirmarlo sería genial.

Todo esto no es posible si empezamos a hablar de contratos de futuros. Por ejemplo, FXPro tiene contratos de futuros en el formato casi normal #AAmy donde "my" es un código de vencimiento estándar como M0. EUR_JPY_fut suena como un extraño contrato sintético.

- Ok Jjc... Asumo que el futuro tiene diferentes precios y TICK_VALUE construyendo también. Así que esto definitivamente descartar todos los instrumentos no forex. Los prefijos y entre-fijos se consideran menos probables.

- CB Estaría muy interesado en escuchar su opinión sobre el cálculo anterior. Gracias por su opinión hasta ahora.

saludos
cameo

 
cameofx:

- Gordon, mi definición tampoco es muy buena ( Punto = factor multiplicador del precio menos decimal ) y la analogía hexadecimal es tan cutre... Pero puede que tenga un ganador aquí...

Lógica :
El broker necesita establecer relaciones de precios entre pares que giren en torno a que MODE_LOTSE sea 100.000 unidades de moneda cotizada y MODE_TICKVALUE sea 10 unidades de moneda cotizada. Sólo por esta condición de igualdad de interrelación, el precio puede ser cotizado entre sí. Esto supongo que es la base de la construcción de precios de Forex.

Punto = MODE_LOTSIZE / Tickvalue en la moneda cotizada. p.ej:
GBPUSD 0.0001 = 100,000 / 10 USD
USDJPY 0.01 = 100,000 / 1,000 JPY <-- MathRound( MODE_TICKVALUE * último Bid de la divisa cotizada )
CHFJPY .... etc. si usted o alguien puede confirmarlo sería genial.

- Ok Jjc... Asumo que el futuro tiene un edificio diferente de Price & TICK_VALUE también. Así que esto definitivamente descartar todos los instrumentos no forex. Los prefijos y entre-fijos se consideran menos probables.

- CB Estaría muy interesado en escuchar su opinión sobre el cálculo anterior. Gracias por su opinión hasta ahora.

saludos
cameo

¿Cambiaría la lógica si Dígitos = 5 o Dígitos = 3?
 

Por fin tengo conexión para publicar...

Would the logic change if Digits = 5 or Digits = 3?

No engcomp, la lógica no se supone que cambiar. Al menos eso es lo que estoy tratando de averiguar.

Estoy tratando de llegar al fondo de varias cosas, Los elencos son hasta ahora : Punto, MODE_TICKVALUE, MODE_TICKSIZE, Precio. Puede que acabe presentándolos sólo de una manera nueva pero si puedo explotar desde ahí entonces valdría la pena.

IMO, MODE_TICKVALUE convertido en moneda cotizada es muy importante . Así que para la discusión lo llamaré QUOTE_TICKVALUE. La ecuación anterior es al revés por cierto.

Para calcular si el Punto es efectivamente : QUOTE_TICKVALUE (TickValue en moneda cotizada) / MODE_LOTSIZE, tengo esto. (Se supone que Calc_Point debe coincidir con Point)

string Sym = Symbol();
double Calc_Point = QUOTE_TICKVALUE(Sym) / MarketInfo(Sym, MODE_LOTSIZE);
int QUOTE_TICKVALUE(string Sym)
{
   string quoted_currency_name = StringSubstr(Sym,3,3); double TV, QTV = 0.0;
   if (MarketInfo(StringConcatenate("USD", quoted_currency_name), MODE_LOTSIZE)) > 0)
   {
     TV = MarketInfo(Sym, MODE_TICKVALUE);
     QTV = MathRound(TV * MarketInfo(Sym, MODE_BID));
     return(QTV);
   }
   else if ((MarketInfo(StringConcatenate(quoted_currency_name, "USD"), MODE_LOTSIZE)) > 0)
   {
     TV = MarketInfo(Sym, MODE_TICKVALUE);
     QTV = MathRound(TV * MarketInfo(Sym, MODE_BID));
     return(QTV);
   }
}
Nota: para los pares cruzados que tienen como base la divisa cotizada en su forma USD (por ejemplo, EURGBP) habrá que modificar un poco lo anterior.

Así que en cualquier momento, cualquier precio dado:

USDJPY, GBPJPY, AUDJPY, XXXJPY............. tiene QUOTE_TICKVALUE de --> 1000 [JPY]
EURUSD, AUDUSD, GBPUSD, XXXUSD ........ tiene QUOTE_TICKVALUE de --> 10 [USD]
EURCHF, USDCHF, XXXCHF....................... tiene QUOTE_TICKVALUE de --> MathPow(10, x) [CHF]

Necesito subrayar que estoy 'extrayendo' QUOTE_TICKVALUE del TICK_VALUE flotante. Así que creo que lo que esto significa es que QUOTE_TICKVALUE está predeterminado por el broker y lo que es más importante es: que paralelamente será consistente entre cada una de las monedas que sirven como moneda cotizada. Así que mientras MODE_LOTSE = 100,000 y QUOTE_TICKVALUE = 10 podemos estar seguros de que los otros componentes del símbolo que sirven como moneda de cotización serán también consistentes (es decir, no puedes cambiar 10 USD a 1 USD sin dividir otros QUOTE_TICKVALUE-s con 10 también - esto creo que es donde podemos determinar mi Valid_Point en general). Espero que esté claro...

No puedo (por mi vida) tener net & MT4 al mismo tiempo estos días (es complicado..). Así que si alguien puede ayudar o verificar sería genial.

cameo

 

He encontrado lo que necesito, Valid_Point y aún más. Una comprensión más profunda a Point, TickValue, Ticksize, Symbol(), y el precio en general. Gracias a todos los que han compartido sus ideas y comentarios desde que LEHayes inició este hilo.

Saludos cordiales
cameo

 

Tío, mira todo el lío de ideas que he provocado. Espero que haya sido útil. No he tenido tiempo de seguir el hilo, pero espero tener la oportunidad de revisarlo.

Después de toda esta discusión y excelente trabajo, ¿hemos llegado a un punto en el que tenemos algún tipo de función estándar para generar lo que buscábamos? Esta pregunta pretende llevarnos a un resumen.

 

¿Tiene alguien experiencia con los consejos de cálculo anteriores en los metales u otros símbolos que crosscurrencies?

He encontrado este tema ya que estaba interesado en el cálculo del cambio de precio en la moneda de la cuenta de un movimiento de punto en el símbolo.

Mi teoría base era la siguiente

Precio por pip = Tamaño del contrato * Punto

Precio por pip en la moneda de la cuenta = Precio por pip * Tasa de cruce del contador de la cuenta,

donde

Tamaño del contrato = MarketInfo(Symbol(), MODE_LOTSIZE)

Punto = Punto = MarketInfo(Symbol(), MODE_POINT)

Account Counter Cross rate es el precio de la contra moneda del símbolo expresado en la moneda de la cuenta (CCCAAA bid rate donde AAA es la moneda de la cuenta y CCC es la contra moneda del símbolo).

He comprobado lo anterior con diferentes cuentas demo del broker (icm, insta, fxopen, fxopen ecn) contra las operaciones reales de 1.0 lotes en el Historial de la cuenta. También he comprobado el método de cálculo de tickvalue de cloudbreaker.

He encontrado lo siguiente:

- El precio del movimiento de un punto de un símbolo no es fácil de calcular con diferentes brokers y en el caso de los metales

- incluso la fórmula tickvalue * point / ticksize de cloudbreaker puede dar resultados falsos (insta - plata, icm - eurusd, fxopen - plata y oro)

- en el caso de icm - oro, incluso Contract size * Point conduce a un mal resultado (0,5 en lugar de 5,0 real, ¿es un error de datos del broker?)

Puede encontrar resultados detallados aquí: Preciopor pip.

Así que mi conclusión es que no hay un método 100% seguro de cálculo de Precio por pip.

 
Gracias por compartir este pequeño programa que has escrito. No puedo creer que sea tan fácil, me has ahorrado mucho tiempo :-)
engcomp:

Adjunto un pequeño script que he desarrollado y que podría responder a tu pregunta.

Como los scripts no tienen parámetros "externos", tienes que cambiarlos en el código y recompilar.

Sólo tienes que cargarlo en tu carpeta de expertos/scripts, compilarlo y adjuntarlo a un gráfico.

Hazme saber cómo va, Helmut

 
Comentarios sobre DE30
double  PointValuePerLot(string pair=""){
    /* Value in account currency of a Point of Symbol.
     * In tester I had a sale: open=1.35883 close=1.35736 (0.0147)
     * gain$=97.32/6.62 lots/147 points=$0.10/point or $1.00/pip.
     * IBFX demo/mini       EURUSD TICKVALUE=0.1 MAXLOT=50 LOTSIZE=10,000
     * IBFX demo/standard   EURUSD TICKVALUE=1.0 MAXLOT=50 LOTSIZE=100,000
     *                                  $1.00/point or $10.0/pip.
     *
     * https://forum.mql4.com/33975 CB: MODE_TICKSIZE will usually return the
     * same value as MODE_POINT (or Point for the current symbol), however, an
     * example of where to use MODE_TICKSIZE would be as part of a ratio with
     * MODE_TICKVALUE when performing money management calculations which need
     * to take account of the pair and the account currency. The reason I use
     * this ratio is that although TV and TS may constantly be returned as
     * something like 7.00 and 0.0001 respectively, I've seen this
     * (intermittently) change to 14.00 and 0.0002 respectively (just example
     * tick values to illustrate).
     * https://forum.mql4.com/43064#515262 zzuegg reports for non-currency DE30:
     * MarketInfo(Symbol(),MODE_TICKSIZE) returns 0.5
     * MarketInfo(Symbol(),MODE_DIGITS) return 1
     * Point = 0.1
     * Prices to open must be a multiple of ticksize */
    if (pair == "") pair = Symbol();
    return(  MarketInfo(pair, MODE_TICKVALUE)
           / MarketInfo(pair, MODE_TICKSIZE) ); // Not Point.
}
 
He estado intentando calcular el porcentaje de riesgo en símbolos no forex, sin embargo no he sido capaz de llegar a nada que sea remotamente fiable ya que la mayoría de los símbolos no forex se comportan de forma muy diferente. ¿Alguien tiene alguna pista sobre cómo calcular el pipvalue correcto en los símbolos no forex para calcular un porcentaje de riesgo correcto?
 
¿Cómo es que lo anterior NO funciona correctamente?