EA no se ejecuta en múltiples pares, necesita ayuda - página 3

 
for(int i=0;i<OrdersTotal();i++)
      {
         if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
         if(OrderMagicNumber()==MagicNumber && OrderSymbol()==Symbol()) continue;
         //---Check Order Type
         if(OrderType()==OP_BUY)
         {
           if(fastma < slowma)
           {
             if(OrderClose(OrderTicket(),Lots,OrderClosePrice(),10,clrNONE))
               Print("Order Closed : ", OrderClosePrice());
             else
               Print("Error Closing order ", GetLastError());
              
           }
          
         }
      if(OrderType()==OP_SELL)
        {
          if(fastma > slowma)
          {
             if(OrderClose(OrderTicket(),Lots,OrderClosePrice(),10,clrNONE))
               Print("Order Closed : ", OrderClosePrice());
            else
               Print("Error Closing Order : ", GetLastError());
              
          }
          
        }
      }
    Sleep(300000);
    return(0);
}
Mi Ea no deja de abrir y cerrar órdenes, parece estar ignorando algo en mi código, ¿hay algo mal en mi función de cierre de órdenes?
 
Matt_Townsend:¿hay algún problema con mi función de cierre de órdenes?

Sí, hay que hacer una cuenta atrás cuando se cierran las órdenes:

for(int i=OrdersTotal()-1; i>=0; i--)
Puede leer por qué aquí
 
honest_knave:

Sí, hay que hacer una cuenta atrás al cerrar las órdenes:

for(int i=OrdersTotal()-1; i>=0; i--)
Puedes leer por qué aquí
Sigue abriendo y cerrando operaciones casi inmediatamente, ¿hay algo más que esté mal en el código?
 
Matt_Townsend ¿hay algo más que esté mal en el código?
Imprime tus variables y averigua por qué.
 
if(OrderMagicNumber()==MagicNumber && OrderSymbol()==Symbol()) continue;

¿Por qué continuar?

if(OrderMagicNumber()!= MagicNumber || OrderSymbol()!= Symbol()) continue;


tendría más sentido
 
Keith Watford:
if(OrderMagicNumber()==MagicNumber && OrderSymbol()==Symbol()) continue;

¿Por qué continuar?

if(OrderMagicNumber()!= MagicNumber || OrderSymbol()!= Symbol()) continue;


tendría más sentido
No cierra las órdenes si el código tiene ||, pero funciona mejor con el != allí
 
//+---------------------------------------------+
//|System start                                 |
//+---------------------------------------------+
int start()
{


    double fastma, slowma;
    int    ticket, total;
    //---define Ma's
    
    fastma = iMA(NULL,0,5,0,MODE_EMA,PRICE_CLOSE,0);
    slowma = iMA(NULL,0,8,0,MODE_SMA,PRICE_CLOSE,0);
    
    total = OrdersTotal();
    //---Start operations
    
    if(total < 1)
    {
       if(fastma > slowma)
        {
         ticket = OrderSend(Symbol(),OP_BUY,Lots,Ask,10,0,0,"",0,0,Blue);
         if(ticket > 0)
         {
            if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
            Print("Buy order opened : ", OrderOpenPrice());
         }
         else
           Print("Error opening order : ", GetLastError());
           return(0);
       }
       if(fastma < slowma)
       {
         ticket = OrderSend(Symbol(),OP_SELL,Lots,Bid,10,0,0,"",0,0,Red);
         if(ticket > 0)
         {
            if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
            Print("Sell order opened : ", OrderOpenPrice());
         }
         else
           Print("Error opening order : ", GetLastError());
           return(0);
       }
       return(0);
    }
  
      
    for(int i=OrdersTotal()-1;i>=0;i--)
      {
         if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
         if(OrderMagicNumber()!=MagicNumber && OrderSymbol()!=Symbol()) continue;
         //---Check Order Type
         if(OrderType()==OP_BUY)
         {
           if(fastma < slowma)
           {
             if(OrderClose(OrderTicket(),Lots,OrderClosePrice(),10,clrNONE))
               Print("Order Closed : ", OrderClosePrice());
             else
               Print("Error Closing order ", GetLastError());
           }
          
         }
      if(OrderType()==OP_SELL)
        {
          if(fastma > slowma)
          {
             if(OrderClose(OrderTicket(),Lots,OrderClosePrice(),10,clrNONE))
               Print("Order Closed : ", OrderClosePrice());
            else
               Print("Error Closing Order : ", GetLastError());
          }
          
        }
      }
    Sleep(300000);
    return(0);
}
Este es mi código tal y como está ahora, puede abrir operaciones en cualquier par que lo ponga, pero aleatoriamente tiene ciertas con operaciones abiertas. He estado tratando de conseguir el código para ejecutar esencialmente de forma independiente en cualquier par que lo puse en, pero por desgracia el código no se abrirá ningún comercio hasta que todos los otros oficios se cierran, y luego no se abren las operaciones en todos los pares que se establece en. ¿Hay alguna manera de tener el programa de hacer que, lo hace comprar y vender la forma que quiero.
 
Usted codifica
  for(int i=OrdersTotal()-1;i>=0;i--)
      {
         if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
         if(OrderMagicNumber()!=MagicNumber || OrderSymbol()!=Symbol()) continue;
         //---Check Order Type
         if(OrderType()==OP_BUY)
Simplificado
  for(int i=OrdersTotal()-1;i>=0;i--) if(
     OrderSelect(i,SELECT_BY_POS)
  && OrderMagicNumber() == MagicNumber
  && OrderSymbol()      == Symbol()
  ){
     //---Check Order Type
     if(OrderType()==OP_BUY)
 
whroeder1:
Usted codifica
  for(int i=OrdersTotal()-1;i>=0;i--)
      {
         if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
         if(OrderMagicNumber()!=MagicNumber && OrderSymbol()!=Symbol()) continue;
         //---Check Order Type
         if(OrderType()==OP_BUY)
Simplificado
  for(int i=OrdersTotal()-1;i>=0;i--) if(
     OrderSelect(i,SELECT_BY_POS)
  && OrderMagicNumber() == MagicNumber
  && OrderSymbol()      == Symbol()
  ){
     //---Check Order Type
     if(OrderType()==OP_BUY)

Cada gráfico sigue sin funcionar de forma independiente, ¿hay algo más que pueda hacer?

Y tal y como está codificado, ya no cierra las operaciones.

 
Keith Watford 2016.12.14 03:10| 122.155.43.228ban ES

    total = OrdersTotal();
    //---Start operations
    
    if(total <= 1)
bucle a través de las órdenes abiertas y sólo cuenta las operaciones que tienen el número mágico del EA y el símbolo del gráfico