A EA não funcionará em múltiplos pares, precisa de ajuda - 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);
}
Meu Ea não vai parar de abrir e fechar ordens, parece estar ignorando algo em meu código, há algo de errado com minha função de fechar ordens?
 
Matt_Townsend: há algo de errado com minha função de fechamento de ordens?

Sim - você deve fazer uma contagem regressiva ao fechar os pedidos:

for(int i=OrdersTotal()-1; i>=0; i--)
Você pode ler para cima porque aqui
 
honest_knave:

Sim - você deve fazer uma contagem regressiva ao fechar os pedidos:

for(int i=OrdersTotal()-1; i>=0; i--)
Você pode ler o porquê aqui
Ainda é apenas abrir e fechar negócios quase imediatamente, há algo mais errado com o código?
 
Matt_Townsend há algo mais errado com o código?
Imprima suas variáveis e descubra o porquê.
 
if(OrderMagicNumber()==MagicNumber && OrderSymbol()==Symbol()) continue;

Por que você continuaria?

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


faria mais sentido
 
Keith Watford:
if(OrderMagicNumber()==MagicNumber && OrderSymbol()==Symbol()) continue;

Por que você continuaria?

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


faria mais sentido
Não fecha ordens se o código tem |||, mas funciona melhor com o != lá dentro
 
//+---------------------------------------------+
//|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);
}
Aqui está meu código tal como ele está agora, ele pode abrir negócios em qualquer par que eu o coloque, mas aleatoriamente tem alguns com negócios abertos. Tenho tentado fazer com que o código funcione essencialmente de forma independente em qualquer par que eu o coloque, mas infelizmente o código não abrirá nenhuma negociação até que todas as outras negociações sejam fechadas, e então não abrirá negociações em todos os pares em que estiver colocado. De qualquer forma, existe a possibilidade de fazer o programa fazer isso, ele compra e vende da maneira que eu quero.
 
Você 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:
Você 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 ainda não está funcionando independentemente, há mais alguma coisa que eu possa fazer?

E da maneira que é codificada, não fecha mais os negócios.

 
Keith Watford 2016.12.14 03:10| 122.155.43.228ban PT

    total = OrdersTotal();
    //---Start operations
    
    if(total <= 1)
loop through the open orders and only count trades that have the magic number and chart symbol of EA
Razão: