¿Cómo ejecutar el EA para varios pares?

 
Hola
Soy nuevo en Forex y MetaTrader y tratando de averiguar algunos conceptos básicos.
Suponiendo que tienen una EA que se adjunta a un gráfico de EURUSD, pero quiero encontrar configuraciones en múltiples pares de esa EA. Pero EA sólo se ejecuta cuando la garrapata fresca para EURUSD viene. ¿Correcto? Ahora veo esto como una característica limitante de MT como mi EA puede procesar para muchos pares, pero se inicia sólo con la garrapata fresca del par adjunto (EURUSD en este caso). Esto probablemente resulta en ticks perdidos de pares no adjuntos. Por lo tanto, la siguiente pregunta -

¿Puede el EA ejecutarse para múltiples pares, sin adjuntarlos a un gráfico? Si no es así, ¿cuál es la solución para el problema anterior? Por favor, aconsejar.

Gracias
Pankaj
 

Es simplemente la forma en que funciona mt4. Creo que no hay ninguna solución para esto. Pero esta cosa vino a mi mente en este momento. Si obtienes el tick de EURUSD al menos 1-2 minutos antes de la nueva vela (digamos que es una vela H1) puedes ejecutar el bucle while para buscar nuevas velas en otros pares. En este caso, si el nuevo tick para el EURUSD no viene ni siquiera por 5 minutos o más, el bucle while ya se está ejecutando y obtienes todas las velas nuevas en otros pares. Espero que entiendas esto.

Pero la pregunta es, ¿por qué necesitas esto? Es mejor ejecutar el EA en diferentes gráficos como EA que se ejecuta en EURUSD no sería capaz de ejecutar un comercio en otro par.

 

Hola a todos,

¡Prefiero tener en cuenta que todavía estamos trabajando en el procesamiento en tiempo real, así que me olvido de usar el bucle while o la función de espera para mantener la mano en la comunicación!

Adjuntando su EA a un par como EURUSD le proporciona suficientes señales para manejar todos los otros pares, los ticks son muy frecuentes. No es una cuestión de minutos sino de segundos (ejecutar un bucle durante 2 minutos me parece una locura). Si no es una cuestión de segundo, sólo pensar por qué o ver con otro corredor.

si realmente necesitas más de lo que obtendrás al adjuntar tu EA al eurusd, piensa en ejecutar una instancia separada de tu EA adjunta a cada moneda. Lo siento pero tiendo a pensar "o repensar su sistema".

Lo siento si siento que este post es un poco brusco. Quería compartir con ustedes mi punto de vista.

Buena suerte.

 
wrm:

Es mejor ejecutar el EA en diferentes gráficos ya que el EA que se ejecuta en EURUSD no podría ejecutar una operación en otro par.

Eso no es correcto. La función OrderSend () puede ejecutarse para cualquier símbolo que especifique como primer parámetro, independientemente del gráfico.

Y puede recuperar los precios de compra y venta más recientes para 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 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)

 
cloudbreaker:

Eso no es correcto. La función OrderSend() puede ejecutarse para cualquier símbolo que especifique como primer parámetro, independientemente del gráfico.

Y puede recuperar los precios de compra y venta más recientes para 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 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)


Muy interesante. Gracias a todos ustedes. Me decantaré por la 2ª opción ya que coincide con lo que pensaba antes.


wrm: Quiero mantener las cosas lo menos posible. Si es técnicamente posible, entonces sólo mantendré un EA. La única razón para mantener un EA separado es en caso de que necesite trazar un gráfico, lo cual no necesito.


Por supuesto, voy a probar una vez que la EA está allí. Si no funciona de la manera que quiero entonces lo cambiará.

 
//+------------------------------------------------------------------+
//|                                                          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);
  }
//+------------------------------------------------------------------+
Aquí hay un código simple para abrir EURUSD y USDCHF en un gráfico. Incluso ea se añade en otro gráfico por lo que se abrirá EURUSD y USDCHF.
 
tigersoft:
Aquí es un código simple para abrir EURUSD y USDCHF en un gráfico. Incluso ea se añade en otro gráfico por lo que se abrirá EURUSD y USDCHF.

Bastante limpio. Gracias tigersoft

 
cloudbreaker:

Eso no es correcto. La función OrderSend() puede ejecutarse para cualquier símbolo que se especifique como primer parámetro, independientemente del gráfico.

Y puede recuperar los precios de compra y venta más recientes para 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 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)


Hola, ¿podría explicar la opción #3?


Y también, ¿cómo funcionaría el cálculo de precios/indicadores con símbolos no nativos usando la opción#2? Entiendo el envío de órdenes a los símbolos no nativos, pero no cómo comprobar las condiciones de entrada en los símbolos no nativos.

 
skyhr:

Hola, ¿podría explicar con más detalle la opción #3?


Y también, ¿cómo funcionaría el cálculo de precios/indicadores con símbolos no nativos usando la opción#2? Entiendo el envío de órdenes a los símbolos no nativos, pero no cómo comprobar las condiciones de entrada en los símbolos no nativos.

Utilice la función MarketInfo() para los símbolos no nativos. Es un amigo :)

 
skyhr:

Hola, ¿podría explicar con más detalle la opción #3?


Y también, ¿cómo funcionaría el cálculo de precios/indicadores con símbolos no nativos usando la opción#2? Entiendo el envío de órdenes a símbolos no nativos, pero no cómo comprobar las condiciones de entrada en símbolos no nativos.

Opción 3 - simplemente escriba un valor en un archivo desde un EA que monitoree un símbolo en particular. Haga que otro EA monitoree ese archivo y ejecute una pieza particular de lógica cuando ese valor esté presente.

Opción 2 - Utilizar la función MarketInfo() para recuperar los precios de compra y venta de los símbolos no nativos en lugar de utilizar las variables de compra y venta que sólo sirven para el símbolo nativo.

 
cloudbreaker:

Opción 3 - simplemente escriba un valor en un archivo desde un EA que monitoree un símbolo en particular. Haga que otro EA monitoree ese archivo y ejecute una pieza particular de lógica cuando ese valor esté presente.

Opción 2 - Utilizar la función MarketInfo() para recuperar los precios de compra y venta de los símbolos no nativos en lugar de utilizar las variables de compra y venta que sólo sirven para el símbolo nativo.

Creo que ambos enfoques son buenos.

Lo único que me gustaría añadir es que la opción #2 tiene un mérito de rendimiento debido a una menor sobrecarga. Todo estará en memoria, lo que obviamente es más rápido que la operación de archivos.

Una ventaja para la opción #3 es si usted quiere usar los datos del archivo para algo que MT4 no puede hacer.