Terminal
- Añadida la posibilidad de crear instrumentos
financieros propios. Ahora usted podrá crear cualquier instrumento,
establecer los ajustes necesarios para él, importar al mismo sus datos
de precio y visualizar gráficos sobre dicho instrumento.
Crando un símbolo personalizado
Abra la ventana de gestión de símbolos a través del menú contextual "Observación del mercado" y pulse "Crear un símbolo":
Hay multitud de parámetros disponibles para el ajuste. Podrá ver la lista de dichos parámetros en la documentación.
Usted tendrá la posibilidad de ajustar su propio instrumento: copie los
parámetros de cualquier instrumento semejante y después cambie lo que
necesite. Para ello, elija el instrumento del que ya disponga en el
campo "Copiar desde".
El nombre del símbolo personalizado no deberá
coincidir con los nombres de los símbolos retransmitidos por los
brókeres. Si usted se conecta al servidor y en este resulta haber un
símbolo que coincide con el símbolo personalizado, el símbolo
personalizado será eliminado.
Aquí mismo están los comandos de importación y exportación de los
ajustes. Podrá compartir fácilmente símbolos personalizados o
transferirlos entre sus terminales. Los ajustes se exportan a archivos
de texto del formato JSON.
Gestión de los símbolos personalizados
Todos los símbolos se representan en el grupo aparte Custom. Para
modificar o eliminar un símbolo, use el menú contextual en la lista:
Importando la historia de precios
Usted podrá importar
los datos de precio a un símbolo propio desde cualquier archivo de
texto. Elija el símbolo y pase a continuación a la pestaña "Barras".
En el diálogo de importación, indique la ruta al archivo con los datos y establezca la configuración:
- Separador — elemento separador en un archivo de texto.
- Omitir columnas y líneas — número de columnas (de izquierda a
derecha) y líneas (de arriba a abajo) que se pueden omitir al realizar
la importación.
- Desplazamiento — desplazamiento temporal por horas. Esta opción se usa al importar los datos guardados en otro huso horario.
- Usar solo las seleccionadas — esta opción permite importar
solo las líneas seleccionadas en la ventana de visualización. Las líneas
se pueden destacar con la ayuda del ratón, manteniendo las teclas
"Ctrl" o "Shift".
El archivo con las barras debe tener el formato: Fecha Hora Open High Low Close VolumendeTicks Spread. Ejemplo:
2016.06.27 00:01:00 1.10024 1.10136 1.10024 1.10070 18 54000000 44
2016.06.27 00:02:00 1.10070 1.10165 1.10070 1.10165 32 55575000 46
2016.06.27 00:03:00 1.10166 1.10166 1.10136 1.10163 13 13000000 46
2016.06.27 00:04:00 1.10163 1.10204 1.10155 1.10160 23 51000000 41
Para su propio símbolo usted podrá usar los datos de cualquier
otro instrumento existente. Expórtelos (esta posibilidad se añadió en la
anterior versión de la plataforma), y en caso necesario, modifíquelos e
impórtelos de vuelta.
En MetaTrader 5 la historia de precio se guarda
en forma de barras de minuto. El resto de los marcos temporales se crea
sobre su base. Al realizar la importación, usted podrá usar los datos
de marcos temporales mayores, pero hay que tener en cuenta que los
gráficos de los marcos temporales menores, en este caso, tendrán huecos.
Por ejemplo, al importar los datos de horas, en el gráfico de minutos
usted podrá ver una barra cada hora.
Los datos de precio de los símbolos de usuario se guardan en el
catálogo aparte Custom (fuera de los catálogos de servidores comerciales
concretos):
C:\Users\[windows account]\AppData\Roaming\MetaQuotes\Terminal\[instance id]\bases\Custom
Usando símbolos propios
El uso de símbolos propios
prácticamente no se diferencia del uso de aquellos que ofrece el bróker.
Estos también se muestran en la ventana de "Observación de mercado", es
posible abrir gráficos de ellos, y después colocar indicadores y
objetos analíticos sobre los mismos. Además, en este caso, no es posible
comerciar con los símbolos personalizados.
Simulación de estrategias usando símbolos propios
Los símbolos propios creados se pueden utilizar para poner a prueba los robots comerciales y los indicadores en el simulador de estrategias.
Esto permite optimizar las estrategias incluso para los instrumentos
financieros que el bróker no tiene disponibles en este momento. Basta
con importar correctamente la historia y configurar las propiedades del
símbolo personalizado.
Al calcular el margen y el beneficio, el simulador de estrategias
usa automáticamente los cursos cruzados disponibles. Por ejemplo, hemos
creado un símbolo AUDCAD.custom propio con un tipo de cálculo del margen
Fórex, y la divisa de nuestro depósito es USD. Entonces, basándose en el nombre del instrumento fórex, el simulador busca los símbolos necesarios en el siguiente orden:
- primero se buscan los símbolos AUDUSD.custom (para el
cálculo del margen) y USDCAD.custom (para el cálculo del beneficio de
las transacciones)
- a continuación, si alguno de dichos instrumentos no está
presente, se busca el primer símbolo cuyo nombre se corresponda con las
parejas de divisas necesarias, es decir, AUDUSD y USDCAD,
respectivamente. Por ejemplo, se han encontrado AUDUSD.b y NZDUSD.b,
esto significa que los cursos de estos instrumentos se usarán al
calcular el margen y el beneficio.
Los instrumentos con los demás tipos de cálculo de margen (Futures, Stock Exchange)
precisan de una pareja de divisas para convertir la divisa del
instrumento en la divisa del depósito. Por ejemplo, hemos creado nuestro
propio símbolo con una divisa de beneficio y una divisa de margen
expresadas en libras esterlinas (GBP), mientras que la divisa del
depósito es el franco suizo (CHF). Entonces, la búsqueda de instrumentos
para la simulación se realizará en el siguiente orden:
- Se comprueba la presencia del instrumento financiero que corresponde a la pareja GBPCHF (GBP vs CHF).
- Si no existe tal instrumento, entonces se busca el primer
instrumento financiero cuyo nombre se corresponda con la pareja de
divisas, por ejemplo, GBPCHF.b o GBPCHF.def.
Al realizar simulaciones con sus propios instrumentos, asegúrese
de que en la cuenta están disponibles todas las parejas de divisas
necesarias para los cálculos. De lo contrario, el cálculo de los
resultados financieros y de las exigencias de depósito durante la
simulación no serán posibles.
Más posibilidades en las siguientes versiones de la plataforma
El trabajo con los propios instrumentos aún no ha finalizado, en las
próximas versiones de la plataforma aparecerán nuevas funciones. Usted
podrá importar la historia a los símbolos personalizados directamente
desde los expertos, así como retransmitir datos sobre ellos (añadir
cotizaciones) en tiempo real.
- Añadido el filtrado de la banda de transacciones según el volumen.
Es posible ocultar de la banda las transacciones con un volumen menor
al indicado. De esta forma, en la banda permanecerán solo las
transacciones importantes, que influyen en el mercado.
Pulse
dos veces sobre la primera línea de la banda de transacciones, indique
el volumen mínimo en lotes, y a continuación pulse sobre cualquier otra
zona de la pantalla. Las transacciones serán filtradas, y el valor
actual del filtro aparecerá en el encabezamiento de la columna de
volumen.
También es posible indicar el volumen mínimo a través del menú contextual de la banda de transacciones.
- Añadida la posibilidad de vincular la profundidad de
mercado al gráfico activo. Cada vez que usted pase a la visualización
del gráfico de algún instrumento financiero, en la profundidad de
mercado se activará de forma automática exactamente el mismo
instrumento. No tendrá que abrir aparte la profundidad de mercado para
cada símbolo.
- Corregida la actualización de los paneles de instrumentos después de ocultar y desplegar la ventana del terminal.
- Corregida la formación de la historia comercial de las
posiciones al cruzarse los tickets de las transacciones y las
posiciones.
MQL5
- Añadida la posibilidad de perfilado de programas MQL5
sobre la historia de precios. Esto permitirá comprobar rápidamente la
productividad de los programas sin tener que esperar nuevos tickets.
Al perfilar con datos reales, el programa se inicia en el gráfico
habitual en el terminal. Muchos programas, en especial los indicadores,
ejecutan ciertos cálculos solo con la llegada de un nuevo tick (OnTick, OnCalculate).
De esta forma, para valorar la productividad debemos esperar la llegada
de nuevos ticks en tiempo real. Al realizar la simulación con datos
históricos, usted podrá indicar de inmediato la carga para el programa.
El perfilado se inicia en el simulador de estrategias en el modo visual,
después usted recibirá inmediatamente multitud de eventos de llegada de
un nuevo tick.
- Añadido el soporte de Unión (union).
Se trata de un tipo especial de datos que consta de varias variables
que comparten una misma zona de la memoria. Por consiguiente, la unión
proporciona la posibilidad de interpretar una misma secuencia de bits
con dos (o más) métodos diferentes. La declaración de una unión comienza
con la palabre clave union.
union LongDouble
{
long long_value;
double double_value;
};
A diferencia de la estructura, los diferentes miembros de una
unión se relacionan con una misma zona de la memoria. En este ejemplo se
ha declarado la unión LongDouble, en la que el valor del tipo long y el
valor del tipo double comparten la misma zona de la memoria. Es
importante comprender que no es posible hacer que la unión guarde al
mismo tiempo valores de tipo entero long y reales double (como sucedía
en la estructura), puesto que las variables long_value y double_value se
solapan (en la memoria) una sobre otra. Sin embargo, un programa MQL5
puede en cualquier momento procesar la información que se contiene en
esta unión como un valor entero (long) o como uno real (double). Por
consiguiente, la unión permite obtener dos (o más) variantes de
representación de una misma secuencia de datos.
Al declarar una
unión, el compilador delimita automáticamente una parte de la memoria
que sea suficiente para guardar en una unión las variables del tipo de
volumen más grande. Para acceder a un elemento de la unión, se usa la
misma sintaxis que para las estructuras: el operador "punto".
union LongDouble
{
long long_value;
double double_value;
};
void OnStart()
{
LongDouble lb;
lb.double_value=MathArcsin(2.0);
printf("1. double=%f integer=%I64X",lb.double_value,lb.long_value);
lb.long_value=0x7FEFFFFFFFFFFFFF;
printf("2. double=%.16e integer=%I64X",lb.double_value,lb.long_value);
lb.long_value=0x0010000000000000;
printf("3. double=%.16e integer=%.16I64X",lb.double_value,lb.long_value);
}
- Añadida la generación automática del operador implícito de
copiado para los objetos de estructuras y clases. Ahora el compilador
crea de forma automática operadores de copadio, lo que permite escribir
para los objetos las entradas sencillas del tipo b=a:
class Foo
{
int value;
public:
string Description(void){return IntegerToString(value);};
Foo(void){value=-1;};
Foo(int v){value=v;};
};
struct MyStruct
{
string s;
Foo foo;
};
void OnStart()
{
MyStruct a,b;
Foo an_foo(5);
a.s="test";
a.foo=an_foo;
Print("a.s=",a.s," a.foo.Description()=",a.foo.Description());
Print("b.s=",b.s," b.foo.Description()=",b.foo.Description());
Print("b=a");
b=a;
Print("a.s=",a.s," a.foo.Description()=",a.foo.Description());
Print("b.s=",b.s," b.foo.Description()=",b.foo.Description());
}
En el operador implícito se realiza el copiado por miembros de los objetos.
- Si el miembro es un objeto, se llama al operador de copiado correspondiente para este objeto.
- Si el miembro es una matriz de objetos, entonces, antes de
llamar el operador de copiado correspondiente para cada elemento, la
matriz receptora aumenta o disminuye hasta el tamaño necesario a través
de ArrayResize.
- Si el miembro es una matriz de tipos simples, para copiar se usa la función ArrayCopy.
- Si el miembro es un puntero a un objeto, se copia el propio puntero, y no el objeto al que señala.
En caso necesario, podemos redefinir el comportamiento, y en lugar
de un operador implícito de copiado, crear nuestra propia variedad con
la ayuda de la sobrecarga.
- Optimizada la utilización de la memoria al recurrir a la historia de precios desde los expertos con la ayuda de funciones Copy*. Al trabajar con grandes volúmenes de datos, el uso de la memoria se reducirá varias veces.
- Ahora la función TimeToStruct retorna un valor booleano, permitiendo comprobar el éxito de la conversión de datetime a MqlDateTime.
- Añadida la prohibición del uso de las funciones FileWriteStruct y FileReadStruct para las estructuras que contengan líneas, matrices dinámicas, objetos y punteros.
- Añadidos los códigos de respuesta:
- TRADE_RETCODE_REJECT_CANCEL — la solicitud de activación de
una orden pendiente ha sido rechezada, y la propia orden ha sido
cancelada
- TRADE_RETCODE_LONG_ONLY — la solicitud ha sido rechazada,
puesto que en el símbolo se ha establecido la norma "Solo se permiten
posiciones largas"
- TRADE_RETCODE_SHORT_ONLY — la solicitud ha sido rechazada,
puesto que en el símbolo se ha establecido la norma "Solo se permiten
posiciones cortas"
- TRADE_RETCODE_CLOSE_ONLY — la solicitud ha sido rechazada,
puesto que en el símbolo se ha establecido la norma "Solo se permite
cerrar las posiciones existentes"
- Añadido un nuevo valor, devuelto por la función SymbolInfoInteger con el parámetro SYMBOL_ORDER_MODE. SYMBOL_ORDER_CLOSEBY — bandera sobre la posibilidad de colocar órdenes de cierre de posición con una opuesta (Close By).
- A la enumeración ENUM_SYMBOL_INFO_INTEGER se ha añadido la
propiedad boleana SYMBOL_CUSTOM. Permite saber si el símbolo es un
símbolo personalizado. Para obtener la propiedad, use la función SymbolInfoInteger.
- Ahora es posible averiguar el motivo de la creación de una orden, transacción y posición.
Nuevas propiedades
Motivos de la creación de una orden, transacción y posición
Para averiguar los motivos de la creación de las operaciones comerciales se han añadido tres enumeraciones:
ENUM_POSITION_REASON |
ENUM_DEAL_REASON |
ENUM_ORDER_REASON |
Descripción de las causas |
POSITION_REASON_CLIENT |
DEAL_REASON_CLIENT |
ORDER_REASON_CLIENT |
La operación se ha ejecutado como resultado de la activación de una orden colocada desde el terminal de escritorio |
POSITION_REASON_MOBILE |
DEAL_REASON_MOBILE |
ORDER_REASON_MOBILE |
La operación se ha ejecutado como resultado de una orden colocada desde el terminal móvil |
POSITION_REASON_WEB |
DEAL_REASON_WEB |
ORDER_REASON_WEB |
La operación se ha ejecutado como resultado de la activación de una orden colocada desde la plataforma web |
POSITION_REASON_EXPERT |
DEAL_REASON_EXPERT |
ORDER_REASON_EXPERT |
La operación se ha ejecutado como resultado de la activación de una orden colocada desde un programa MQL5: un asesor o script |
- |
DEAL_REASON_SL |
ORDER_REASON_SL |
La operación se ha ejecutado como resultado de la activación de un Stop Loss |
- |
DEAL_REASON_TP |
ORDER_REASON_TP |
La operación se ha ejecutado como resultado de la activación de un Take Profit |
- |
DEAL_REASON_SO |
ORDER_REASON_SO |
La operación se ha ejecutado como resultado del evento Stop Out |
- |
DEAL_REASON_ROLLOVER |
- |
La transacción se ha ejecutado a causa del traslado de una posición
|
- |
DEAL_REASON_VMARGIN |
- |
La transacción se ha ejecutado después de abonarse/retirarse el margen de variación |
- |
DEAL_REASON_SPLIT |
- |
La transacción se ha ejecutado a causa del
fraccionamiento (reducción del precio) de una acción u otro activo que
tenía una posición abierta en el momento del anuncio del fraccionamiento |
- Optimizada la sincronización y el acceso a la historia de ticks.
- Corregido el retorno de ticks a la matriz estática en la función CopyTicksRange. En este caso, antes simepre se retornaban 0 ticks.
- Introducidas diferentes correcciones en la biblioteca de lógica difusa Fuzzy.
Signals
- Corregida la apertura de una señal desde la página web cuando no hay conexión con la cuenta comercial.
Tester
- Se ha optimizado y acelerado considerablemente el
funcionamiento de la historia de órdenes y transacciones. Al trabajar
con un gran volumen de datos (decenas de miles de entradas en la
historia y más), la velocidad del funcionamiento aumenta varias veces.
- Corregido el cálculo del tiempo de mantenimiento de la posición en el informe de simulación.
MetaEditor
- En el depurador se ha corregido la representación del contenido de las matrices-miembros estáticas de la clase.
- Añadida la lista de puntos de interrupción en el
programa depurado. Para pasar a ella, use el menú contextual de la
pestaña "Depuración":
Para pasar a cualquiera de los puntos, pulse dos veces sobre él.
Actualización de la documentación.
Lea las noticias anteriores, por favor: