- Crear y eliminar símbolos personalizados
- Propiedades de símbolos personalizados
- Fijación de coeficientes de margen
- Configurar sesiones de cotización y trading
- Añadir, sustituir y suprimir cotizaciones
- Añadir, sustituir y eliminar ticks
- Conversión de los cambios en el libro de órdenes
- Particularidades del trading con símbolos personalizados
Propiedades de símbolos personalizados
Los símbolos personalizados tienen las mismas propiedades que los símbolos proporcionados por el bróker. Las propiedades son leídas por las funciones estándar que abordamos en el capítulo sobre instrumentos financieros.
Las propiedades de los símbolos personalizados pueden establecerse mediante un grupo especial de funciones CustomSymbolSet, una función para cada tipo fundamental (número entero, real, cadena).
bool CustomSymbolSetInteger(const string name, ENUM_SYMBOL_INFO_INTEGER property, long value)
bool CustomSymbolSetDouble(const string name, ENUM_SYMBOL_INFO_DOUBLE property, double value)
bool CustomSymbolSetString(const string name, ENUM_SYMBOL_INFO_STRING property, string value)
Las funciones establecidas para un símbolo personalizado denominaron name a un valor de property a value. Todas las propiedades existentes se agrupan en las enumeraciones ENUM_SYMBOL_INFO_INTEGER, ENUM_SYMBOL_INFO_DOUBLE, ENUM_SYMBOL_INFO_STRING, que se consideraron elemento por elemento en las secciones del capítulo mencionado.
Las funciones devuelven una indicación de éxito (true) o de error (false). Un posible problema para los errores es que no todas las propiedades pueden cambiar. Al intentar establecer una propiedad de sólo lectura, obtenemos el error CUSTOM_SYMBOL_PROPERTY_WRONG (5307). Si intenta escribir un valor no válido en la propiedad, obtendrá un error CUSTOM_SYMBOL_PARAMETER_ERROR (5308).
Tenga en cuenta que el historial de minutos y ticks de un símbolo personalizado se borra por completo si se modifica alguna de las siguientes propiedades en la especificación del símbolo:
- SYMBOL_CHART_MODE - tipo de precio utilizado para construir barras (Bid o Last)
- SYMBOL_DIGITS - número de decimales en los valores de precios
- SYMBOL_POINT - valor de un punto
- SYMBOL_TRADE_TICK_SIZE - el valor de un tick, el mínimo cambio de precio permitido.
- SYMBOL_TRADE_TICK_VALUE - costo de cambio de precio por tick (véase también SYMBOL_TRADE_TICK_VALUE_PROFIT, SYMBOL_TRADE_TICK_VALUE_LOSS)
- SYMBOL_FORMULA - fórmula para el cálculo del precio
Si un símbolo personalizado se calcula mediante una fórmula, después de borrar su historial el terminal intentará crear automáticamente un nuevo historial utilizando las propiedades actualizadas. No obstante, para los símbolos generados mediante programación, el propio programa MQL debe encargarse del recálculo.
La edición de propiedades individuales está más solicitada para modificar símbolos personalizados creados anteriormente (después de especificar el tercer parámetro origin en la función CustomSymbolCreate).
En otros casos, cambiar las propiedades en bloque puede causar efectos sutiles. La cuestión es que las propiedades están vinculadas internamente y cambiar una de ellas puede requerir un cierto estado de otras propiedades para que la operación se complete con éxito. Además, la configuración de algunas propiedades provoca cambios automáticos en otras.
En el ejemplo más sencillo, después de establecer la propiedad SYMBOL_DIGITS, verá que la propiedad SYMBOL_POINT también ha cambiado. Este es el caso menos obvio: asignar SYMBOL_CURRENCY_MARGIN o SYMBOL_CURRENCY_PROFIT no tiene ningún efecto sobre los símbolos Forex, ya que el sistema asume que los nombres de las divisas ocupan las 3 primeras y las 3 siguientes letras del nombre («XXXYYY[sufijo]»), respectivamente. Tenga en cuenta que inmediatamente después de la creación de un símbolo «vacío», por defecto se considera un símbolo Forex, y por lo tanto estas propiedades no se pueden establecer para él sin cambiar primero el mercado.
Al copiar o configurar las propiedades de los símbolos, tenga en cuenta que la plataforma implica algunas particularidades. En concreto, la propiedad SYMBOL_TRADE_CALC_MODE tiene un valor por defecto de 0 (inmediatamente después de que se cree el símbolo, pero antes de que se establezca cualquier propiedad), mientras que 0 en la enumeración ENUM_SYMBOL_CALC_MODE corresponde al miembro SYMBOL_CALC_MODE_FOREX. Al mismo tiempo, se aplican normas de denominación especiales para los símbolos de divisas de la forma XXXYYY (donde XXX e YYY son códigos de divisas) más un sufijo opcional. Por lo tanto, si no cambia SYMBOL_TRADE_CALC_MODE a otro modo requerido por adelantado, las subcadenas del nombre del símbolo especificado (el primer y segundo triple de símbolos) caerán automáticamente en las propiedades de la divisa base (SYMBOL_CURRENCY_BASE) y la divisa de los beneficios (SYMBOL_CURRENCY_PROFIT). Por ejemplo, si especifica el nombre «Dummy», se dividirá en 2 pseudodivisas: «Dum» y «my».
Otro matiz es que, antes de establecer el valor de SYMBOL_POINT con una precisión de N decimales, hay que asegurarse de que SYMBOL_DIGITS sea al menos N.
El libro incluye el script CustomSymbolProperties.mq5, que permite experimentar con la creación de copias del símbolo del gráfico actual y estudiar en la práctica los efectos resultantes. En concreto, puede elegir el nombre del símbolo, su ruta y la dirección de derivación (ajuste) de todas las propiedades admitidas, directas o inversas en términos de numeración de propiedades en el idioma. El script utiliza una clase especial CustomSymbolMonitor, que es un envoltorio para las funciones integradas anteriores: la describiremos más adelante.