Discusión sobre el artículo "Desarrollamos un Asesor Experto multidivisas (Parte 2): Transición a posiciones virtuales de estrategias comerciales"
Aún no he terminado de leerlo. Las entradas son un buen ejemplo.
1.
input string symbol_ = "EURGBP"; // Instrumento de negociación (símbolo) input ENUM_TIMEFRAMES timeframe_ = PERIOD_H1; // Período de programación input group "=== Parámetros de la señal de apertura" input int signalPeriod_ = 13; // Número de velas para promediar el volumen input double signalDeviation_ = 0.3; // Desviación relativa de la media para la apertura de la primera orden input double signaAddlDeviation_ = 1.0; // Desviación relativa de la media en la apertura de la segunda orden y siguientes input group "=== Parámetros de órdenes pendientes." input int openDistance_ = 0; // Distancia del precio a la orden pendiente input double stopLevel_ = 10500; // Stop Loss (en puntos) input double takeLevel_ = 465; // Take Profit (en pips) input int ordersExpiration_ = 1000; // Hora de vencimiento de las órdenes pendientes (en minutos) input group "=== Opciones de gestión del capital" input int maxCountOfOrders_ = 3; // Número máximo de órdenes abiertas simultáneamente
int OnInit() { expert = new CAdvisor(new CVolumeReceiver(magic_)); expert.Add(new CSimpleVolumesStrategy( symbol_, timeframe_, fixedLot_, signalPeriod_, signalDeviation_, signaAddlDeviation_, openDistance_, stopLevel_, takeLevel_, ordersExpiration_, maxCountOfOrders_) ); // Añadir una instancia de la estrategia return(INIT_SUCCEEDED); }
class CSimpleVolumesStrategy : public CStrategy { private: //--- Parámetros de la señal de apertura int m_signalPeriod; // Número de velas para promediar el volumen double m_signalDeviation; // Desviación relativa de la media para la apertura de la primera orden double m_signaAddlDeviation; // Desviación relativa de la media en la apertura de la segunda orden y siguientes //--- Parámetros de órdenes pendientes int m_openDistance; // Distancia del precio a la orden pendiente double m_stopLevel; // Stop Loss (en puntos) double m_takeLevel; // Take Profit (en pips) int m_ordersExpiration; // Hora de vencimiento de las órdenes pendientes (en minutos) //--- Parámetros de gestión del capital int m_maxCountOfOrders; // Número máximo de órdenes abiertas simultáneamente
4.
public: //--- Métodos públicos CSimpleVolumesStrategy( string p_symbol, ENUM_TIMEFRAMES p_timeframe, double p_fixedLot, int p_signalPeriod, double p_signalDeviation, double p_signaAddlDeviation, int p_openDistance, double p_stopLevel, double p_takeLevel, int p_ordersExpiration, int p_maxCountOfOrders );
5-6.
//+------------------------------------------------------------------+ //| Constructor| //+------------------------------------------------------------------+ CSimpleVolumesStrategy::CSimpleVolumesStrategy( string p_symbol, ENUM_TIMEFRAMES p_timeframe, double p_fixedLot, int p_signalPeriod, double p_signalDeviation, double p_signaAddlDeviation, int p_openDistance, double p_stopLevel, double p_takeLevel, int p_ordersExpiration, int p_maxCountOfOrders) : // Lista de inicialización CStrategy(p_symbol, p_timeframe, p_fixedLot), // Llamar al constructor de la clase base m_signalPeriod(p_signalPeriod), m_signalDeviation(p_signalDeviation), m_signaAddlDeviation(p_signaAddlDeviation), m_openDistance(p_openDistance), m_stopLevel(p_stopLevel), m_takeLevel(p_takeLevel), m_ordersExpiration(p_ordersExpiration), m_maxCountOfOrders(p_maxCountOfOrders) { ArrayResize(m_orders, m_maxCountOfOrders); // Cargar el indicador para obtener volúmenes de ticks iVolumesHandle = iVolumes(m_symbol, m_timeframe, VOLUME_TICK); // Establecer el tamaño del array-receptor de volúmenes tick y el direccionamiento requerido ArrayResize(volumes, m_signalPeriod); ArraySetAsSeries(volumes, true); }
Cada parámetro de entrada debe prescribirse cinco o seis veces.
Lea el artículo. Gracias al autor, buen sondeo, en qué direcciones podemos movernos.
Una observación poderosa, después de la cual no tiene sentido criticar, sino ir directamente a la parte constructiva: sugerir.
El artículo analiza el concepto de negociación virtual seguido de la sincronización unidireccional de la negociación virtual con la real. Como ejemplo para el Probador, servirá. Pero sólo como ejemplo.
En la práctica, dicha cartera TS se construye a partir de EX5 (de forma gratuita para el Probador) - ejecutar, obtener tst-archivos de ejecuciones individuales, hacer una sola ejecución conjunta con cualquier regla MM de ellos.
Para el Probador, se necesita velocidad. Intente estimar cuánto cambia la velocidad de optimización para la variante con y sin virtualización.
El concepto en sí es bueno para el comercio real. Pero para el sincronizador tendrá que mantener el historial de comercio virtual. Hay muchas cosas. Una forma seria, por decirlo suavemente.
Desde el punto de vista arquitectónico, la virtualización se separaría del ST. Sólo tengo la fuente actual de virtualización 350 Kb. Y crecerá.
Enfoque cuidadosamente la elección de la API de comercio para el comercio virtual. Elegir entre las disponibles. Es lógico dar preferencia a la API, en la que es tan fácil como sea posible para programar el TS. Realmente no entiendo la práctica común de todas las plataformas de comercio de inventar su propia bicicleta - API de comercio. Dotarla de OOP-entidades "out of the box", etc. En este sentido, MQ tomó un buen camino - todas las API sin OOP.
Antes de leer este tipo de artículos, siempre miro los resultados de las pruebas. Al menos en el probador. ¡Cuando vi 19% de ganancia durante 5 años, me sentí ligero y feliz! ¡Esto es mucho más que el autor de 75 artículos sobre redes neuronales! ))
Pero ahora está claro cómo hacer dinero garantizado en Forex. Yo solía pensar sólo para enseñar a los tontos en las ondas de Elliot, pero resulta que todavía hay una gran manera )).
Pero ahora está claro cómo hacer dinero garantizado en Forex. Yo solía pensar sólo para enseñar a los tontos en las ondas de Elliot, pero resulta que todavía hay una gran manera )).
No me puedo resistir a señalar aquí que el 19% de los beneficios durante cinco años en la prueba fueron hechas por un lote constante en las condiciones de reducción de menos de $ 1000, es decir, 1%. Si se centra en la reducción máxima de incluso el 10% y utiliza un lote variable, los resultados serán aún más interesantes.
//+------------------------------------------------------------------+ //|SimpleVolumesExpertSingle.mq5 //|Copyright 2024, Yuriy Bykov | //| https://www.mql5.com/es/users/antekov | //+------------------------------------------------------------------+ #property copyright "Copyright 2024, Yuriy Bykov" #property link "https://www.mql5.com/es/articles/14107" #property description "La orden pendiente del Asesor Experto en el momento en que el volumen de ticks de la vela supera el volumen medio". #property description "en la dirección de la vela actual." #property description "Si las órdenes aún no se han convertido en posiciones, se eliminan a la hora de vencimiento". #property description "Las posiciones abiertas sólo se cierran en SL o TP". #include "Advisor.mqh" #include "SimpleVolumesStartegy.mqh"
Un error tipográfico.
En la práctica, una cartera de TS de este tipo se construye a partir de EX5 (de forma gratuita desde el Mercado para el Probador) - ejecutar, obtener tst-files de pases individuales, a partir de ellos hacer una ejecución única conjunta con cualquier regla de MM.
Todavía no he considerado esta opción, tendré en cuenta que también es posible. Sin embargo, si me las arreglo para encontrar un buen conjunto de Asesores Expertos listos en el mercado, ¿cómo puedo utilizarlos juntos? ¿Simplemente ejecuto todo el conjunto con los parámetros de MM seleccionados?
Para el probador necesitas velocidad. Intenta estimar cuánto cambia la velocidad de optimización para la variante con y sin virtualización.
Lo intentaré, pero parece que la ganancia será notable cuando el número de estrategias que se ejecutan simultáneamente sea de decenas o cientos de instancias.
Tengo la intención de entrar en más detalles sobre el uso de su biblioteca virtual para acelerar las pruebas, pero no he llegado a hacerlo todavía. La razón principal es que estoy acostumbrado a las funciones de trading de MT5, aunque cuando tuve que rediseñar mis Expert Advisors de MT4 a MT5, hubo un montón de inconvenientes relacionados con ello, y aprendí sobre Virtual más tarde.
Ahora estoy considerando hacer una clase hija de CReceiver, que utilizará el entorno Virtual.
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Usted acepta la política del sitio web y las condiciones de uso
Artículo publicado Desarrollamos un Asesor Experto multidivisas (Parte 2): Transición a posiciones virtuales de estrategias comerciales:
Hoy continuaremos con el desarrollo de un asesor multidivisa con varias estrategias funcionando en paralelo. Intentaremos transferir todo el trabajo relacionado con la apertura de posiciones de mercado desde el nivel de las estrategias al nivel de un experto que gestiona estas. Las propias estrategias solo negociarán virtualmente, sin abrir posiciones de mercado.
En el último artículo empezamos a desarrollar un asesor multidivisa que trabaja simultáneamente con diferentes estrategias comerciales. En la primera fase, solo había dos estrategias diferentes. Estas representaban la realización de la misma idea comercial, trabajaban con el mismo instrumento (símbolo) comercial y el mismo periodo del gráfico (marco temporal). Solo se diferenciaban entre sí por los valores numéricos de los parámetros.
También determinamos el tamaño óptimo de las posiciones abiertas según el nivel máximo de reducción deseado (10% del depósito). Lo hicimos para cada estrategia por separado. Al combinar las dos estrategias, tuvimos que reducir el tamaño de las posiciones abiertas para mantener el nivel de reducción establecido. En el caso de dos estrategias, la disminución era pequeña, pero, ¿y si queremos fusionar docenas o cientos de ejemplares de estrategias? Puede ocurrir que para algunas estrategias sea necesario reducir el tamaño de la posición a un valor inferior a las posiciones abiertas mínimas permitidas por el bróker. En este caso, dichas estrategias simplemente no podrán participar en la negociación. Entonces, ¿cómo conseguir que funcionen después de todo?
Para ello, privaremos a las estrategias del derecho a abrir posiciones y colocar órdenes pendientes por sí mismas. Las estrategias solo tendrán que negociar virtualmente, es decir, memorizar en qué niveles deben abrirse posiciones de un determinado tamaño y, a petición, informar sobre qué volumen debe abrirse ahora. Así, abriremos posiciones reales en el mercado solo después de haber estudiado todas las estrategias y calculado el volumen total necesario, considerando el escalado para soportar la reducción especificada.
Ahora solo nos interesa comprobar si dicho planteamiento resulta idóneo, no si su aplicación es eficaz. Por consiguiente, en este artículo trataremos de escribir al menos alguna implementación funcional de este enfoque, lo cual nos ayudará aún más a construir una implementación más bella desde el punto de vista de la arquitectura. Nos será de ayuda, no en el sentido de que mejoraremos una implementación que ya tengamos, sino en el sentido de que podremos darnos cuenta de que debemos hacerla de otra manera que será mejor.
Autor: Yuriy Bykov