¿Cómo ejecutar el EA para varios pares? - página 3

 

Jacques, Agradezco su continuo interés en este hilo. Todavía estoy depurando mi EA para su primera moneda, pero la intención de utilizarlo en varios si se encuentra para ser adecuado. Sobre esa premisa, he estado contemplando una estrategia sobre cómo implementar esa noción. Por lo tanto, mi interés en este hilo.


De acuerdo con su solicitud, preparé gráficos para tres pares más, y al hacerlo descubrí que dos de los pares tenían más de 32.000 ticks en un período de 24 horas (el límite de datos de gráficos en Excel). Como resultado, tuve que dividir el gráfico en dos periodos (primeras 12 horas y segundas 12 horas). Para mantener las cosas relativamente consistentes, dividí los tres pares en períodos de 12 horas.


Una cosa a tener en cuenta, la escala vertical en estos gráficos es proporcional entre las líneas horizontales, pero la escala horizontal NO es proporcional al tiempo (es decir, no se puede asumir que 1/12 de los ticks representa una hora)


Creo que lo más importante de estos gráficos es que todos los pares tienen periodos en un periodo de 24 horas en los que hay intervalos significativos entre los ticks. Como resultado, si usted combina múltiples pares en un EA creo que sería prudente emplear un bucle "While". La referencia de StraightTrader a https://book.mql4.com/special/index titulada "Características generales de los programas complejos" tiene una buena discusión de esta técnica y un gráfico en la sección inicial de este artículo.


GBPJPY 44,834 ticks en 24 horas

EURJPY 37.140 ticks en 24 horas

GBPUSD 29.313 ticks en 24 horas

EURUSD 22.627 ticks en 24 horas













¡Salud!

 
FXtrader2008:

Como resultado, si usted combina múltiples pares en un EA creo que sería prudente emplear un bucle "While". La referencia de StraightTrader a https://book.mql4.com/special/index titulada "Características generales de los programas complejos" tiene una buena discusión de esta técnica y un gráfico en la sección inicial de este artículo.

Este es exactamente el caso. Múltiples pares en un EA -> utilizar el enfoque de bucle mientras en lugar de iniciar la activación de la función por incomming ticks.


Me gustaría estar en oposición a un par de divisas para un EA.

Mi enfoque a largo temr es UNA MULTICURRENCY MULTISTRATEGY EA. Preparé hace algún tiempo esquema Universal Expert Advisor, que implementa algunas de estas ideas.

Más tarde, no incluido en mi post seguí por el desarrollo de este código y comenzó el proyecto de código de Google llamado Universaltrader. Este proyecto podría fullfill sus expectativas. La única cosa que no se implementa allí se observa Mientras que el enfoque del ciclo (fácil de implementar).


Algunas de las ventajas de MULTICURRENCY MULTISTRATEGY EA:

  • todas las estrategias juntas
  • es posible ajustar/configurar todas las estrategias juntas y también de forma independiente
  • Posibilidad de activar/desactivar diferentes estrategias/pares de divisas
  • Estoy seguro de que hay muchas más ventajas

desventajas:

  • posibilidad de hacer backtest sólo un par de divisas a la vez - tienes que ejecutar backtest tantas veces como pares de divisas estés negociando, con otros pares desactivados
  • problema de rendimiento - He notado el problema de rendimiento sólo en backtest, pero estoy seguro de que en el comercio real también es relevante - depende de la complejidad de las estrategias implementadas y el número de ellos.

Este proyecto necesita ser mejorado todavía, así que si alguien tiene un interés puedo invitarlo a este proyecto de código de Google


El script actual se adjunta aquí:

Archivos adjuntos:
 
FXtrader2008 wrote >>

Jacques, Agradezco su continuo interés en este hilo. Todavía estoy depurando mi EA para su primera moneda, pero la intención de utilizarlo en varios si se encuentra para ser adecuado. Sobre esa premisa, he estado contemplando una estrategia sobre cómo implementar esa noción. Por lo tanto, mi interés en este hilo.

De acuerdo con su solicitud, preparé gráficos para tres pares más, y al hacerlo descubrí que dos de los pares tenían más de 32.000 ticks en un período de 24 horas (el límite de datos de gráficos en Excel). Como resultado, tuve que dividir el gráfico en dos periodos (primeras 12 horas y segundas 12 horas). Para mantener las cosas relativamente consistentes, dividí los tres pares en períodos de 12 horas.

Una cosa a tener en cuenta, la escala vertical en estos gráficos es proporcional entre las líneas horizontales, pero la escala horizontal NO es proporcional al tiempo (es decir, no se puede asumir que 1/12 de los ticks representa una hora)

Creo que lo más importante de estos gráficos es que todos los pares tienen periodos en un periodo de 24 horas en los que hay intervalos significativos entre los ticks. Como resultado, si usted combina múltiples pares en un EA creo que sería prudente emplear un bucle "While". La referencia de StraightTrader a https://book.mql4.com/special/index titulada "Características generales de los programas complejos" tiene una buena discusión de esta técnica y un gráfico en la sección inicial de este artículo.

GBPJPY 44,834 ticks en 24 horas

EURJPY 37.140 ticks en 24 horas

GBPUSD 29.313 ticks en 24 horas

EURUSD 22.627 ticks en 24 horas

Gracias.

Muchas gracias por tus gráficos.

Vamos a optar por un bucle en lugar de una activación de ejecución de ticks, será más científico para aquellos que necesitan precisión de minutos y no es un gran problema para implementar. Otra ventaja es que puedes adjuntar el EA al par de divisas que quieras (es útil cuando dibuja el objeto en el gráfico).

Saludos

 
cloudbreaker wrote >>

Y puede recuperar los precios de compra y venta más recientes para los símbolos fuera del gráfico actual utilizando la función MarketInfo().

Así que tiene las siguientes opciones

- Tener el mismo EA adjunto a muchos gráficos y operando para el símbolo nativo de cada gráfico (usando las variables incorporadas de Ask y Bid)

- Tener un EA adjunto a un gráfico específico que se ejecuta para todos los símbolos elegidos (con la función MarketInfo() para los símbolos no nativos) - sólo utilizando los ticks del símbolo nativo como dispositivo de activación

- Tener EAs maestros y esclavos adjuntos a diferentes gráficos donde uno es activado por el otro (por ejemplo, uno escribe un valor en un archivo, el otro lee constantemente el archivo hasta que encuentra estos datos y luego negocia)

En este momento, estoy utilizando la más simple de estas estrategias - Tengo un EA en tres marcos de tiempo de cuatro monedas, por lo que doce en total. Todos ellos están configurados para ejecutarse en el primer tick del marco de tiempo. Sin embargo, estoy teniendo un problema en que MT4 no siempre ejecuta todos los EA. Puse una declaración de impresión justo después de la función de inicio sólo para ver lo que estaba sucediendo, y sólo estaba llegando a tres de los cuatro EA de H1, por ejemplo, pero estaba faltando diferentes pares diferentes veces, y la EA era idéntica a excepción de los ajustes de las optimizaciones para cada par.

Pregunta - ¿MT4 en sólo ejecuta un EA a la vez cuando varios EA's están configurados para ejecutarse simultáneamente? ¿La ejecución de un EA depende de alguna manera de la de otro (aparte de que el contexto comercial esté ocupado), o son completamente independientes?

Si es así, podría utilizar la segunda opción, sólo estoy tratando de mantener el EA lo más simple posible, porque para mí al menos, cuanto más complejidad escribo, más errores cometo.

 
joetrader:

En este momento, estoy utilizando la más simple de estas estrategias - Tengo un EA en tres marcos de tiempo de cuatro monedas, por lo que doce en total. Todos ellos están configurados para ejecutarse en el primer tick del marco de tiempo. Sin embargo, estoy teniendo un problema en que MT4 no siempre ejecuta todos los EA. Puse una declaración de impresión justo después de la función de inicio sólo para ver lo que estaba sucediendo, y sólo estaba llegando a tres de los cuatro EA de H1, por ejemplo, pero estaba faltando diferentes pares diferentes veces, y la EA era idéntica a excepción de los ajustes de las optimizaciones para cada par.

Pregunta - ¿MT4 en sólo ejecuta un EA a la vez cuando varios EA's están configurados para ejecutarse simultáneamente? ¿La ejecución de un EA depende de alguna manera de la de otro (aparte de que el contexto comercial esté ocupado), o son completamente independientes?

Si es así, podría utilizar la segunda opción, sólo estoy tratando de mantener el EA lo más simple posible, porque para mí, al menos, la mayor complejidad que escribo en, más errores que hago.

Tengo múltiples EA's corriendo en los gráficos sin problemas de este tipo. Por lo que puedo decir, se ejecutan simultáneamente, el único momento en que se notan unos a otros es cuando el contexto comercial es utilizado por uno de ellos. En cuanto a la EA en sí es completamente independiente - cada uno tiene su propia copia de las variables, etc. A ver si lo entiendo: ¿estás ejecutando 12 EAs conectados a 12 gráficos? ¿Tal vez tienes problemas de memoria?

 
gordon wrote >>

Tengo múltiples EA's corriendo en los gráficos sin problemas de este tipo. Por lo que puedo decir, se ejecutan simultáneamente, el único momento en que se notan unos a otros es cuando el contexto comercial es utilizado por uno de ellos. En cuanto a la EA en sí es completamente independiente - cada uno tiene su propia copia de las variables, etc. A ver si lo entiendo: ¿estás ejecutando 12 EAs conectados a 12 gráficos? ¿Tal vez usted tiene problemas de memoria?

Sí. 12 EA's en 12 gráficos. Un ordenador bastante nuevo con 6GB de memoria, así que no creo que sea la memoria, pero vale la pena considerarlo, y no lo descartaré. Pero has respondido a mi pregunta - Si se supone que los EA's pueden ejecutarse simultáneamente, entonces tal vez estoy haciendo algo mal. ¡No es la primera vez! Revisaré el código y estudiaré un poco más. Gracias por tu ayuda.

 
¿Está ejecutando los gráficos en instancias separadas del cliente MT4? Si está abriendo todos los gráficos en una instancia, entonces compartirán un único contexto de negociación y tendrá que codificar la lógica para compartir ese contexto, si el comportamiento de sus EAs significa que más de uno puede estar realizando una operación de negociación al mismo tiempo. CB
 
cloudbreaker wrote >>
¿Está ejecutando los gráficos en instancias separadas del cliente MT4? Si está abriendo todos los gráficos en una sola instancia, entonces compartirán un único contexto de negociación y tendrá que codificar la lógica para compartir ese contexto, si el comportamiento de sus EAs significa que más de uno puede estar realizando una operación de negociación al mismo tiempo. CB

Sí, los estoy ejecutando en el mismo cliente MT4. Pero estoy usando una de las soluciones de contexto de comercio ocupado de este artículo https://www.mql5.com/en/articles/1412 y no tengo ningún error de contexto de comercio ocupado.

No parece ni siquiera llegar al punto en el que se intenta abrir una posición. Parece que no inicia el EA en absoluto para algunos. Lo digo porque puse una declaración de impresión al principio de mi función de inicio.

Aquí está mi función de inicio:

void start()
{
//---- ir a operar sólo para los primeros ticks de la nueva barra
if(Volume[0]>1) return;
Print("Tick Check");

if(CalculateCurrentOrders(Symbol())==0) CheckForOpen();
else CheckForClose();
}

Estoy operando en CADJPY,EURCHF,GBPUSD, & USDJPY

Y me sale esto

2010.01.22 8:59:45 [EAName]USDJPY,H1: Tick Check

2010.01.22 8:59:45 [EAName]CADJPY,H1: Tick Check

2010.01.22 8:59:45 [EAName]GBPUSD,H1: Comprobación de garrapatas

2010.01.22 9:59:45 [EAName]EURCHF,H1: Comprobación de garrapatas

2010.01.22 9:59:46 [EAName]GBPUSD,H1: Comprobación de garrapatas

2010.01.22 9:59:46 [EAName]CADJPY,H1: Comprobación de garrapatas

Algunas horas se negocian las cuatro, otras sólo tres. Si se trata de una hora para el comercio de los H4, tres de ellos podría el comercio, pero por lo general no todos los cuatro, junto con tres o cuatro de los H1.

He creado una solución en la que aumento el volumen a 3 o 4 ticks para asegurarme de que todo se negocia, pero estoy tratando de entender mejor MetaTrader para poder solucionar el problema de raíz.

Así que mi pregunta es - ya que mi EA tiene sólo una garrapata para ejecutar, ¿seejecuta cada EA simultáneamente, y tal vez es por eso que no están todos corriendo? Tengo un bucle en mi EA que compara hasta 1500 de los fractales pasado para encontrar un stoploss, por lo que podría tomar algún tiempo.

De nuevo, puede que haya un problema en mi código en alguna parte.

 
Supongo que tienes un problema con tu código y esto no tiene nada que ver con el tema de los EA múltiples. Tienes que localizar el problema de los que no arrancan utilizando los métodos estándar Print()/Alert() para ver qué es lo que no funciona.
 
tigersoft:
Aquí hay un código simple para abrir EURUSD y USDCHF en un gráfico. Incluso ea se agrega en otro gráfico por lo que se abrirá EURUSD y USDCHF.

//+------------------------------------------------------------------+
//|                                                          jkh.mq4 |
//|                      Copyright © 2009, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

bool wannaBuy = true;
bool wannaBuy1 = true;
extern double LotSize = 0.01;
extern string symbol1 = "EURUSD";
extern string symbol2 = "USDCHF";
extern int MaxDifference = 6;
extern int Slippage = 3;
extern int Magicnumber1 = 786;
extern int Magicnumber2 = 123;
int sendticket = 3;
string pairs[18];

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
pairs[0] = symbol1;
pairs[1] = symbol2;
wannaBuy = true;
wannaBuy1 = true;

//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
   // Send order for EURUSD & USDCHF
   if (wannaBuy) {   
   int ticket1;
   RefreshRates();
   ticket1 = OrderSend(symbol1, OP_BUY, LotSize, MarketInfo(symbol1,MODE_ASK), Slippage, 0, 0, 0,0,Magicnumber1,0) & OrderSend(symbol2, OP_BUY, LotSize, MarketInfo(symbol2,MODE_ASK), Slippage, 0, 0, 0,0,Magicnumber2,0);
   if (ticket1 <0 )
   {
   Print ("OrderSend failed with error #", GetLastError());
   return(0);
   }
   wannaBuy = false;
   }

//----
   return(0);
  }
//+------------------------------------------------------------------+

no funciona?

para la prueba de espalda
Tengo el error 4106 de ordersend

Nombre de símbolo desconocido para USDCHF para la función de envío de órdenes

Ordersend funciona para EURUSD si elijo el símbolo EURUSD para la configuración o el gráfico EURUSD.

Si cambio a otro gráfico, obtendré un símbolo desconocido tanto para el EURUSD como para el USDCHF

Gracias de antemano