Discusión sobre el artículo "Experto comercial universal: Las estrategias de usuario y las clases comerciales auxiliares (Parte 3)"

 

Artículo publicado Experto comercial universal: Las estrategias de usuario y las clases comerciales auxiliares (Parte 3):

En este artículo continuamos con la descripción de los algoritmos del motor comercial CStrategy. En la tercera parte de esta serie de artículos se analizan con detalle ejemplos de escritura de estrategias comerciales específicas que utilizan este enfoque. Además, se presta gran atención a los algoritmos auxiliares: el sistema de registro y el acceso a los datos bursátiles con la ayuda de un indexador convencional (Close[1], Open[0], etc.).

En esta parte de la serie de artículos continuaremos familiarizándonos con el motor comercial CStrategy. Recordemos brevemente el contenido de sus partes anteriores. En la primera parte, "Experto comercial universal: Los modos comerciales de las estrategias" se analizaron con detalle los modos comerciales, gracias a los que se puede configurar de forma flexible la lógica de funcionamiento de un experto, dependiendo de la hora y día de la semana. En el segundo artículo "Experto comercial universal: Modelo de eventos y prototipo de estrategia comercial" analizamos con detalle un modelo de eventos que toma como base el procesamiento centralizado de eventos, así como los algoritmos principales de la clase básica CStrategy, que constituyen los cimientos del experto de usuario.

En la tercera parte de la serie, describiremos con detalle ejemplos de asesores basados en el motor comercial ​​CStrategy, así como algunos algoritmos auxiliares que pueden ser necesarios para el desarrollo del asesor. Se prestará especial atención al procedimiento de registro. En realidad, el proceso de registro, a pesar de su función profundamente auxiliar, es un elemento muy importante en cualquier sistema más o menos complejo. Con la ayuda de un buen registrador, es posible comprender de forma rápida las causas de los fallos y encontrar el sitio donde ha tenido lugar dicho fallo. Este registrador se ha escrito usando una técnica de programación especial llamada patrón de "Single" (Singleton). Su análisis será interesante para aquellos que están interesados ​​no sólo en la organización del proceso comercial, sino también en la creación de algoritmos para resolver problemas no estándar.

Además, en este artículo se describen los algoritmos que permiten acceder a los datos de mercado a través de un índice cómodo e intuitivo. De hecho, para mucha gente, trabajar con datos a través de índices como Close[1] o High[0] es su peculiaridad de funcionamiento favorita en MetaTrader 4. Entonces, ¿por qué renunciar a ella, si se la puede utilizar exactamente igual en MetaTrader 5? Este artículo explica cómo hacerlo, y describe al detalle los algoritmos que implementan dicha posibilidad.

Los métodos a redefinir por parte del experto de usuario

En el primer artículo "Experto comercial universal: Los modos comerciales de las estrategias" examinamos con detalle los modos comerciales de la estrategia y sus métodos básicos que deben ser redefinidos. Ahora es el momento de pasar a la práctica.

Cada experto creado con la ayuda del motor comercial CStrategy debe redefinir los métodos virtuales responsables de algunas propiedades y del comportamiento del propio experto. Vamos a enumerar estos métodos redefinidos con un recuadro que consta de tres columnas. En la primera de ellas se muestra el nombre del método virtual, en la segunda, el evento o acción que se debe seguir o ejecutar. En la tercera se da una descripción del uso de este método. Aquí está el recuadro:

Método virtual Evento/acción Utilidad
OnSymbolChanged Se invoca cuando cambia el nombre del instrumento comercial En caso de cambiar el instrumento comercial, los indicadores del experto deben ser reinicializados. Este evento permite llevar a cabo una reinicialización de los indicadores del experto.
OnTimeframeChanged Cambio del marco temporal de trabajo En caso de cambiar el marco temporal de trabajo, los indicadores del experto deberán ser reinicializados. Este evento permite llevar a cabo una reinicialización de los indicadores del experto.
ParseXmlParams Análisis de los parámetros de usuario de la estrategia, descargados a través de un archivo XML La estrategia debe reconocer de forma autónoma los parámetros XML pasados ​​a este método, y configurar sus ajustes en consecuencia.
ExpertNameFull Retorna el nombre completo del experto El nombre completo del experto consta del nombre de estrategia y, por regla general, del conjunto único de parámetros de la estrategia misma. El ejemplar de la estrategia debe determinar el nombre completo para sí mismo de forma independiente. Este nombre también se utiliza en el panel visual, en la lista emergente Agent.
OnTradeTransaction Surge en el caso de que aparezca un evento comercial Para funcionar, algunas estrategias necesitan analizar los eventos comerciales. Este evento permite enviar el evento comercial al experto final, así como analizarlo.
InitBuy Inicializa la compra Uno de los métodos básicos que deben ser redefinidos. En este método, se debe realizar la compra, si se forman las condiciones comerciales adecuadas para ella.
InitSell Inicializa la venta Uno de los métodos básicos que deben ser redefinidos. En este método, es necesario realizar la venta, si se forman las condiciones comerciales adecuadas para ello.
SupportBuy Acompaña una posición larga abierta previamente La posición abierta larga anteriormente debe ser acompañada. Por ejemplo, ponerle una parada defensiva Stop Loss o cerrar la posición en caso de que aparezca una señal de salida de la posición. Todas estas acciones se deben ejecutar en este método.
SupportSell Acompaña una posición corta abierta con anterioridad La posición corta abierta anteriormente debe ser acompañada. Por ejemplo, ponerle una parada defensiva Stop Loss o cerrar la posición en caso de que aparezca una señal de salida de la posición. Todas estas acciones se deben ejecutar en este método.

 Recuadro 1. Los métodos virtuales y su designación

Los métodos más importantes a redefinir son InitBuy, InitSell, SupportBuy y SupportSell. En el recuadro están destacados en negrita. Si, por ejemplo, olvidamos redefinir el método InitBuy, la estrategia de usuario no realizará compras. Si no se redefine uno de los métodos Support, entonces la posición abierta podría no poderse cerrar nunca. Por lo tanto, al crear un experto, proceda a la redefinición de estos métodos con mucho cuidado.

Autor: Vasiliy Sokolov

 
Muy interesante. Efectivamente, es posible acelerar y simplificar el proceso de desarrollo. Usted utiliza métodos de la biblioteca estándar para abrir una posición, pero ¿qué pasa con otras clases estándar - gestión de dinero, trailing stop. ¿Es posible añadirlas a su motor?
 
hftech:
Muy interesante. Efectivamente, es posible acelerar y simplificar el proceso de desarrollo. Usted utiliza métodos de la biblioteca estándar para abrir una posición, pero ¿qué pasa con otras clases estándar - gestión de dinero, trailing stop. ¿Es posible añadirlas a su motor?

Puede utilizar otras clases estándar mediante adaptadores especiales. Sin embargo, la dificultad aquí es que estas clases fueron diseñadas para MetaTrader 5 y son dependientes de la plataforma, mientras que el motor CStrategy no lo es. El lector atento probablemente ya ha notado que el motor envuelve todo en capas OOP y lo hace a propósito.

Ahora tenemos una super tarea - para portar CStrategy a MetaTrader 4. Entonces la estrategia escrita con la ayuda del motor se compilará y se ejecutará en ambas plataformas al mismo tiempo.

P.D. De hecho, el motor no utiliza la clase estándar de comercio CTrade, pero abre posiciones utilizando un cierto CTradeControl, que se parece mucho a CTrade e incluso hereda de ella, pero no es CTrade. En el futuro ayudará a portarlo a MT4, lo que hará CStrategy realmente independiente de la plataforma.

 
Vasiliy Sokolov:

También puede utilizar otras clases estándar a través de adaptadores especiales. Sin embargo, la dificultad aquí es que estas clases fueron diseñadas para MetaTrader 5 y son dependientes de la plataforma, mientras que el motor CStrategy no lo es. El lector atento probablemente ya ha notado que el motor envuelve todo en capas OOP a propósito, y se hace a propósito.

Ahora tenemos una tarea super - para portar CStrategy a MetaTrader 4. Entonces la estrategia escrita con la ayuda del motor será compilada y ejecutada en ambas plataformas al mismo tiempo.

P.D. De hecho, el motor no utiliza la clase estándar de comercio CTrade, pero abre posiciones utilizando un cierto CTradeControl, que se parece mucho a CTrade e incluso hereda de ella, pero no es CTrade. En el futuro ayudará a portarlo a MT4, haciendo CStrategy verdaderamente independiente de la plataforma.

Usted dice que en el futuro, ¿cómo serán las actualizaciones? ¿Publicarán nuevas versiones de las librerías de forma regular? ¿Qué tan seguro puede estar de que el código actual no va a cambiar, de lo contrario se descarga una nueva versión y algo se caerá en los desarrollos actuales.


Puedes utilizar otras clases estándar a través de adaptadores especiales.

Sería interesante leer un ejemplo de un adaptador de este tipo.

P.D. De hecho, el motor no utiliza la clase estándar de trading CTrade, sino que abre posiciones utilizando algún CTradeControl, que se parece mucho a CTrade e incluso hereda de él, pero no es él. En el futuro ayudará a portarlo a MT4, que hará CStrategy verdaderamente independiente de la plataforma.

Sí, veo métodos CTrade similares en CTradeCustom, pero se siguen utilizando las librerías estándar:

#include <Trade\SymbolInfo.mqh>
#include <Trade\OrderInfo.mqh>
#include <Trade\HistoryOrderInfo.mqh>
#include <Trade\PositionInfo.mqh>
#include <Trade\DealInfo.mqh>
 

En cuanto a la independencia de las plataformas, el concepto es ciertamente interesante, pero quién la necesita realmente en la práctica. En mi opinión, hace tiempo que cada uno ha hecho su elección. MT5 es interesante sobre todo para los que trabajan en bolsa. MT4 es perfecto para Forex y CFD. Normalmente, los que trabajan en Forex no trabajan en bolsa y viceversa. ¿Quién necesita escribir una estrategia e implementarla en ambas plataformas? Sólo los vendedores de robots. Pero esta es mi opinión privada, tal vez estoy equivocado.

Como alguien que trabaja exclusivamente en MT5, me interesaría ampliar la funcionalidad del mismo CTradeControl. Por ejemplo, para abrir una posición sólo a través de órdenes limitadas y el uso de enfoques interesantes que tengan en cuenta, por ejemplo, la volatilidad actual y la oferta / demanda en la pila.

 
hftech:

Usted dice que en el futuro, pero ¿cómo se producirán las actualizaciones? ¿Publicarán nuevas versiones de las bibliotecas con regularidad? ¿Cómo puedes estar seguro de que el código actual no cambiará, o descargarás una nueva versión y algo se caerá en los desarrollos actuales?

Desgraciadamente, no hay garantías. Si es necesario hacer un cambio que mejore significativamente la simplicidad/fiabilidad/infraestructura del motor - tal cambio se hará, al menos en las primeras etapas de formación de su base de código.

Sin embargo, usted no debe preocuparse mucho acerca de estos cambios potenciales, porque en primer lugar, lo más probable, si se van a hacer, se harán en la estructura interna del motor, y los usuarios no sentirán estos cambios. En segundo lugar, los algoritmos que se dan son probados por muchos años de práctica y en otras plataformas. Funcionan de verdad. Y hasta ahora no he inventado nada mejor, y he probado más de unos cuantos: modelos basados en autómatas finitos y otras plantillas, como la que ofrece Wealth-Lab.

En cuanto a nuevas versiones, ya veremos. Hay algunos aspectos más que no se han cubierto (independencia de plataforma y trabajo con órdenes pendientes). Voy a encontrar fuerzas para terminar el motor, - entonces habrá una nueva versión extendida, y la correspondiente documentación para estas características en forma de artículos.

 
hftech:

En cuanto a la independencia de las plataformas, el concepto es ciertamente interesante, pero quién la necesita realmente en la práctica. En mi opinión, hace tiempo que cada uno ha hecho su elección. MT5 es interesante sobre todo para los que trabajan en bolsa. MT4 es perfecto para Forex y CFD. Normalmente, los que trabajan en Forex no trabajan en bolsa y viceversa. ¿Quién necesita escribir una estrategia e implementarla en ambas plataformas? Sólo los vendedores de robots. Pero esta es mi opinión privada, tal vez estoy equivocado.

Como alguien que trabaja exclusivamente en MT5, me interesaría ampliar la funcionalidad del mismo CTradeControl. Por ejemplo, para abrir una posición sólo a través de órdenes limitadas y el uso de enfoques interesantes que tengan en cuenta, por ejemplo, la volatilidad actual y la oferta / demanda en la pila.

En la práctica, muchos tienen que trabajar con dos plataformas a la vez. Por ejemplo, en MT4 hacen pruebas con sus propios datos, y en MT5 operan (hasta que MT5 no tenga sus propios feeds de datos, la situación no cambiará). Y aquí es muy importante tener la misma implementación del algoritmo para ambas plataformas al mismo tiempo. De lo contrario, es posible que se produzcan sorpresas desagradables.

También es muy conveniente para los vendedores y freelancers escribir para dos plataformas al mismo tiempo sin preocuparse por la notoria incompatibilidad. Por cierto, se equivoca al relegarlos a un segundo plano. Los autónomos escriben una gran cantidad de código y están muy ocupados. No tienen tiempo para desarrollar diferentes conceptos y motores. Por eso es importante darles una herramienta y una descripción clara de la misma. A muchas personas, incluso a las que no están familiarizadas con la programación, les hará la vida mucho más fácil y les ayudará a formular los TOR (en las reglas del motor) con mayor claridad.

 
Vasiliy Sokolov:

En la práctica, muchos tienen que trabajar con dos plataformas a la vez. Por ejemplo, en MT4 prueban con sus propios datos, y en MT5 operan (hasta que MT5 no tenga sus propios feeds de datos, la situación no cambiará). Y aquí es muy importante tener la misma implementación del algoritmo para ambas plataformas al mismo tiempo. De lo contrario, es posible que se produzcan sorpresas desagradables.

También es muy conveniente para los vendedores y freelancers escribir para dos plataformas al mismo tiempo sin preocuparse por la notoria incompatibilidad. Por cierto, se equivoca al relegarlos a un segundo plano. Los autónomos escriben una gran cantidad de código y están muy ocupados. No tienen tiempo para desarrollar diferentes conceptos y motores. Por eso es importante darles una herramienta y una descripción clara de la misma. A muchas personas, incluso no familiarizadas con la programación, les hará la vida mucho más fácil y les ayudará a formular los TOR de forma más clara (en las reglas del motor).

Gracias por los artículos, ¡gran idea! Esperamos la continuación.

Creo que pronto escribirás clases shell adicionales para portar Cstrategy a mt4 y una simple línea como Trade.Buy(MM.GetLotFixed(), ExpertSymbol(), "");

compilará igualmente en ambas plataformas.

Pero hasta ahora resulta que el Asesor Experto universal es independiente de la plataforma sólo en la etapa de compilación?

1) ¿Será posible lograr la misma apertura de posiciones en mt4 tester y mt5 real/demo account? Que sea con el uso de sus datos en mt4 y por supuesto su motor. OHLC entre el tester y la cuenta real puede ser diferente, por lo que las lecturas de los indicadores serán diferentes, y por lo tanto la disponibilidad de los oficios.

2) También hay que pensar en la divergencia de los conceptos de órdenes y operaciones entre plataformas. Es decir, aquí es necesario excluir la posibilidad de abrir posiciones multidireccionales en mt4 adhiriéndose a la lógica de mt5.

¿Cómo va a resolver estas dos cuestiones? O el usuario final puede hacer frente por sí mismo)?

Gracias

 
Arnold Bobrinskiy:

2) También hay que pensar en la divergencia de los conceptos de órdenes y operaciones entre plataformas. Es decir, es necesario excluir la posibilidad de abrir posiciones multidireccionales en mt4, ciñéndonos a la lógica de mt5.

Puedo responder a la segunda pregunta de inmediato: el motor no tiene restricciones en la apertura de posiciones multidireccionales. Al contrario, fue escrito originalmente para gestionar posiciones multidireccionales. Es decir, todo no será menos estándar en MT4 que en MT5.
 
Vasiliy Sokolov:
Puedo responder a la segunda pregunta de inmediato: el motor no tiene restricciones para abrir posiciones multidireccionales. Al contrario, fue escrito originalmente para gestionar posiciones multidireccionales. Es decir, todo no será menos estándar en MT4 que en MT5.
Pero entonces, ¿cómo el Asesor Experto repetirá la lógica de la misma manera? Por ejemplo, en mt5 se abre una posición de compra con 0,2 lote, después del comando vender 0,2 la posición debe ser cerrada. En mt4 en este caso habrá 2 posiciones multidireccionales, mientras que en mt5 no habrá más posiciones abiertas.
 
Arnold Bobrinskiy:
Entonces, ¿cómo el Asesor Experto repite la lógica de la misma manera? Por ejemplo, en mt5 se abre una posición de compra con 0,2 lote, después del comando vender 0,2 la posición debe cerrarse. En mt4 en este caso habrá 2 posiciones multidireccionales, mientras que en mt5 no habrá más posiciones abiertas.

Simplemente en MT5 el Asesor Experto tendrá una y sólo una posición que gestionar. En MT4 el Asesor Experto recibirá varias posiciones secuencialmente. Si realiza una operación de conversión en MT5 sin comprobar la posición actual (comprar cuando hay una posición de venta y vender cuando hay una posición de compra), la posición se cerrará y en la siguiente llamada el Asesor Experto simplemente no llamará al módulo de mantenimiento de posiciones.

La compatibilidad descendente también es obvia: los Asesores Expertos escritos para MT5 y que operan una sola posición en una dirección funcionarán normalmente en MT4. Los Asesores Expertos que operan varias posiciones a la vez en MT4 no podrán aplicar la misma lógica en MT5. Pero si una posición se negocia en una sola dirección, no debería haber problemas en MT5.