Hacer que mi EA abra operaciones en varios símbolos

 

Buen día a todos!


Tengo un problema:


Necesito hacer que mi EA abra una operación solamente cuando no hay otra operación abierta en ese mismo símbolo, y deseo usar el mismo EA en varios símbolos.

if( (MarketInfo(Symbol(),MODE_SPREAD)<= MS) && (OrdersTotal()==0) ) AbrirOperacion();

Este es el filtro que coloqué para que abra operaciones, me funciona muy bien en 1 símbolo, pero cuando quiero que abra operaciones en varios símbolos no lo hace.


La función "AbrirOperacion()" contiene la estrategia de apertura, y también limito el Spread con el que abrirá la operación.


Me pueden ayudar por favor?

 

Yo haría lo siguiente (teniendo en cuenta la poca información de la que disponemos):

En primer lugar le digo al EA que cuente los trades abiertos. Para ello uso esta función:

int TradesCount(int type) //devuelve el número de operaciones abiertas por tipo de orden, símbolo actual y número mágico
  {
   int result = 0;
   int total = OrdersTotal();
   for(int i = 0; i < total; i++)
     {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == false) continue;
      if(OrderMagicNumber() != MagicNumber || OrderSymbol() != Symbol() || OrderType() != type) continue;
      result++;
     }
   return(result);
  }

Con esto, además del símbolo le estamos pidiendo referencias del número mágico.

Sabrás más que de sobra que el número mágico es el identificador de cada gráfico a ojos de un EA. 

De esta forma, evitaremos los problemas de que interfiera con otros gráficos.

Y para "integrar" ese código en la parte de envío de nuevas operaciones, yo lo sustituiría de esta forma:

if( (MarketInfo(Symbol(),MODE_SPREAD)<= MS) && (OrdersTotal()==0) ) AbrirOperacion();//Este es el código original
if( (MarketInfo(Symbol(),MODE_SPREAD)<= MS) && (TradesCount(OP_BUY) + TradesCount(OP_SELL) <= 0 ) AbrirOperacion();//Este es el código nuevo


Para futuras ocasiones, por favor, trata de añadir un poco más de código. Un saludo y espero que sea esto lo que buscabas

 
Enrique Enguix Vino:

Yo haría lo siguiente (teniendo en cuenta la poca información de la que disponemos):

En primer lugar le digo al EA que cuente los trades abiertos. Para ello uso esta función:

Con esto, además del símbolo le estamos pidiendo referencias del número mágico.

Sabrás más que de sobra que el número mágico es el identificador de cada gráfico a ojos de un EA. 

De esta forma, evitaremos los problemas de que interfiera con otros gráficos.

Y para "integrar" ese código en la parte de envío de nuevas operaciones, yo lo sustituiría de esta forma:


Para futuras ocasiones, por favor, trata de añadir un poco más de código. Un saludo y espero que sea esto lo que buscabas

Muchísimas gracias!


//+------------------------------------------------------------------+
//+   CONTAR OPERACIONES ABIERTAS EN CURRENT CHART                   +
//+------------------------------------------------------------------+

int OPENOP ()
   {
    int OpenOp = 0;
    
    for(int a=0; a<OrdersTotal(); a++)  //busca todas las operaciones abiertas de la cuenta, si las hay.
       {
        if(!OrderSelect(a,SELECT_BY_POS,MODE_TRADES))continue;   //selecciona las operaciones abiertas.
         
        if (OrderSymbol()==Symbol() && OrderMagicNumber()==magic)   //verifica si pertenecen al gráfico actual.
           {
            OpenOp++; //obtiene la cantidad de operaciones abiertas del gráfico actual.
           }
       } //Cierre de "for" "a".
       
     return(OpenOp);
   }

Al final quedó así, no había visto tu comentario sin embargo creo que llegamos a lo mismo jeje.

Ya lo probé y funcionó como necesitaba :)

Espero que podamos ayudar a alguien más con esta solución.


Nuevamente: muchas grácias!

 
Angel Antonio Martinez Velasquez:

Muchísimas gracias!


Al final quedó así, no había visto tu comentario sin embargo creo que llegamos a lo mismo jeje.

Ya lo probé y funcionó como necesitaba :)

Espero que podamos ayudar a alguien más con esta solución.


Nuevamente: muchas grácias!

Perfecto! Si, efectivamente hicimos lo mismo! ;)