Características del lenguaje mql5, sutilezas y técnicas - página 8

 

En la Ayuda se dice

ENUM_SYMBOL_CALC_MODE

Identificador

Descripción

Fórmula

SYMBOL_CALC_MODE_FOREX

Modo Forex - cálculo de beneficios y márgenes para Forex

Margen: Lotes*Tamaño_del_contrato/Levante

Beneficio: (precio_cerrado-precio_abierto)*Tamaño_del_contrato*Lotes

SYMBOL_CALC_MODE_FUTURES

Modo Futuros - calcular el margen y el beneficio de los futuros

Margen: Lotes *MargenInicial*Porcentaje/100

Beneficio: (precio_cierre-precio_abierto)*PrecioTick/TamañoTick*Lotes

SYMBOL_CALC_MODE_CFD

Modo CFD: cálculo del margen y del beneficio para CFD

Margen: Lotes *Tamaño del contrato*Precio de mercado*Porcentaje/100

Beneficio: (precio_cerrado-precio_abierto)*Tamaño_del_contrato*Lotes

SYMBOL_CALC_MODE_CFDINDEX

Modo de índice CFD: cálculo del margen y del beneficio para los índices CFD

Margen: (Lotes*Tamaño del contrato*Precio del mercado)*Precio del tick/Tamaño del tick

Beneficio: (precio_cerrado-precio_abierto)*Tamaño_del_contrato*Lotes

SYMBOL_CALC_MODE_CFDLEVERAGE

Modo de apalancamiento de CFD: cálculo del margen y el beneficio de los CFD cuando se opera con apalancamiento

Margen: (Lotes*Tamaño del contrato*Precio de mercado*Porcentaje)/Levante

Beneficio: (precio_cerrado-precio_abierto)*Tamaño_del_contrato*Lotes

SYMBOL_CALC_MODE_EXCH_STOCKS

Modo de intercambio: cálculo del margen y del beneficio para la negociación de valores en bolsa

Margen: Lotes*Tamaño del contrato*Precio abierto

Beneficio: (precio_cerrado-precio_abierto)*Tamaño_del_contrato*Lotes

SYMBOL_CALC_MODE_EXCH_FUTURES

Modo de futuros: cálculo del margen y del beneficio para la negociación de contratos de futuros en la bolsa

Margen: Lotes*Margen inicial o Lotes*Margen de mantenimiento

Beneficio: (precio_cerrado-precio_abierto)*Lotes*PrecioTick/TamañoTick

SYMBOL_CALC_MODE_EXCH_FUTURES_FORTS

Modo de Futuros FORTS - cálculo del margen y del beneficio para negociar contratos de futuros en FORTS. El tamaño del margen puede ser disminuido por el valor MarginDiscount de acuerdo con las siguientes reglas:

1. Si el precio de una posición larga (orden de compra) es inferior al precio calculado, MarginDiscount = Lots*((PriceSettle-PriceOrder)*TickPrice/TickSize)

2. Si el precio de una posición corta (orden de venta) es superior al precio de liquidación, entonces MarginDiscount = Lots*((PriceOrder-PriceSettle)*TickPrice/TickSize)

donde:

    • PriceSettle - precio de liquidación (compensación) de la sesión anterior;
    • PriceOrder - precio medio ponderado de una posición o precio de apertura especificado en la orden (pedido);
    • TickPrice - precio del tick (coste del cambio de precio en un punto);
    • TickSize - tamaño del tick (paso mínimo de cambio de precio)

Margen: Lotes*Margen inicial o Lotes*Margen de mantenimiento

Beneficio: (precio_cerrado-precio_abierto)*Lotes*PrecioTick/TamañoTick

SYMBOL_CALC_MODE_SERV_COLLATERAL

Modo de garantía: el instrumento se utiliza como activo no comercial en la cuenta de operaciones. El valor de mercado de la posición abierta se calcula en función del volumen, el precio de mercado actual, el tamaño del contrato y el coeficiente de liquidez. El valor se contabiliza en el Activo, que se suma al Patrimonio. Por lo tanto, las posiciones abiertas en dicho instrumento aumentan el Margen Libre y sirven como garantía adicional para las posiciones abiertas en instrumentos negociados

Margen: no

Beneficio: no

Valor de mercado: Lotes*Tamaño del contrato*Precio de mercado*Tasa de liquidez

 
fxsaber:

Lo dice la Ayuda.

Con todo el respeto, tengo la intención de llevarte de vuelta a la lectura

P.D.

Puede conseguirlo, pero si utilizamos AUDCAD, obtendremos el margen en moneda AUD, mientras que la cuenta está denominada en dólares. Si utiliza el precio del AUDUSD, obtendrá la cantidad requerida de margen, pero no es universal y malo, porque hay cuentas con prefijos y sufijos, y aquí comienza toda una historia. Además, es posible que no haya pares abiertos en la visión general del mercado y que el cálculo sea un callejón sin salida.

Un programa que funciona con dinero (según los desarrolladores) no puede calcularlo. El viejo, malo y lento mt4 podía trabajar con dinero, pero el nuevo y elegante mt5 no. ¿Cómo es eso?

 
fxsaber

Utiliza esta fórmula del enlace:

Por ejemplo, si calculamos la garantía para CADJPY, obtendremos la garantía en CAD

SymbolInfoDouble("CADJPY",SYMBOL_TRADE_CONTRACT_SIZE) / AccountInfoInteger(ACCOUNT_LEVERAGE)*0.7625 // СADUSD

Puedo ver0,7625, es el precio del CADUSD pero el terminal ni siquiera tiene tal par en sus cálculos.

¿Es tan difícil transferir la función"MODE_MARGINREQUIRED" a mt5 utilizando el método "copypaste", facilitando así la vida de los desarrolladores?

 
Artyom Trishkin:
Me gustaría que el cálculo fuera independiente del tipo de programa.
Los desarrolladores piensan que el cálculo de márgenes (y algunas otras funciones de información) es una función comercial y debería estar prohibida en los indicadores. He iniciado un hilo serio sobre este tema - sus moderadores lo han cortado inmediatamente, de forma anónima como siempre. Ahora no me importa, publicó un indicador castrado sin margen en KB.
 
Vitaly Muzichenko:

Con el debido respeto, tengo la intención de llevarte de vuelta a tu lectura

Lo admito, estaba desatento. De alguna manera, siempre he considerado innecesario el cálculo de los márgenes. Especialmente en los indicadores. ¿Dónde puede ser necesario en los indicadores?

Creo que la solución es muy sencilla. Cuando esté libre, lo pensaré.

 
Vitaly Muzichenko:

Puede conseguirlo, pero si utiliza AUDCAD, obtendrá el margen en la moneda AUD, y la cuenta está denominada en dólares. Si usamos el precio del AUDUSD, obtenemos el margen requerido, pero no es universal y malo, porque hay cuentas con prefijos y sufijos y aquí empieza toda una historia. Además, puede que simplemente no haya ningún par abierto en la visión general del mercado y el cálculo se vaya al garete.

¿Y cuál será el rendimiento de los cuatro si el AUDUSD no está en el panorama del mercado?

Para la tarea específica de reflexión del margen en el indicador es posible construir una muletilla, teniendo en cuenta los prefijos y sufijos (o utilizando un asesor auxiliar). Hay de todo para el comercio.

 
Andrey Khatimlianskii:

¿Y cuál será el rendimiento de los cuatro si el AUDUSD no está en el panorama del mercado?

Para la tarea específica de visualización del margen en el indicador, se puede construir una muleta que tenga en cuenta los prefijos y los sufijos (o utilizar un EA auxiliar). Y para el comercio, todo parece estar ahí.

Cuatro devolverá"MODE_MARGINREQUIRED" )

Alexey Volchanskiy:
Creo que el cálculo del margen (y algo más de las funciones informativas) es una función comercial y debería estar prohibida en los indicadores. He iniciado un hilo serio sobre este tema - sus moderadores lo han cortado inmediatamente, de forma anónima como siempre. Ahora no me importa, publicó un indicador castrado sin margen en KB.

¿Es realmente el comercio? ))) Aunque sí, no está prohibido recocer. Me pregunto qué negocia, si abre o cierra, o sólo modifica las órdenes.

fxsaber:

Lo admito, estaba desatento. Siempre he necesitado el cálculo de márgenes. Además, no es necesario en los indicadores. ¿Dónde puede ser necesario en los indicadores?

Creo que la solución es muy sencilla. Cuando sea libre, lo inventaré.

Además de la MA y los estocásticos, hay indicadores informativos. Por ejemplo, el indicador de información para conocer el depósito antes de realizar una operación (observar MM), calcular el lote y ver si se ajusta a las condiciones de su TS o no para entrar en la operación y esperar otra señal. Y esto es sólo un ejemplo de su uso.

 
fxsaber:

Creo que la solución es muy sencilla. Lo resolveré cuando esté libre.

La solución llegó inmediatamente.
// Размер свободных средств, необходимых для открытия 1 лота на покупку
double GetMarginRequired( const string Symb )
{
  MqlTick Tick;

  return(SymbolInfoTick(Symb, Tick) ? Tick.ask * SymbolInfoDouble(Symb, SYMBOL_TRADE_TICK_VALUE) /
        (SymbolInfoDouble(Symb, SYMBOL_TRADE_TICK_SIZE) * AccountInfoInteger(ACCOUNT_LEVERAGE)) : 0);
}
Este es un cálculo para FOREX. El resto es por analogía.
 
fxsaber:
La solución llegó enseguida.
// Размер свободных средств, необходимых для открытия 1 лота на покупку
double GetMarginRequired( const string Symb )
{
  MqlTick Tick;

  return(SymbolInfoTick(Symb, Tick) ? Tick.ask * SymbolInfoDouble(Symb, SYMBOL_TRADE_TICK_VALUE) * SymbolInfoDouble(Symb, SYMBOL_TRADE_CONTRACT_SIZE) *
         SymbolInfoDouble(Symb, SYMBOL_POINT) / (SymbolInfoDouble(Symb, SYMBOL_TRADE_TICK_SIZE) * AccountInfoInteger(ACCOUNT_LEVERAGE)) : 0);
}
Este es el cálculo para FOREX. El resto es similar.
Muchas gracias, todavía hay un error con los pares de yenes
 
Vitaly Muzichenko:
Muchas gracias, todavía hay un error con los pares de yenes
Sí, me he equivocado un poco. Ahora es correcto.