A EA não funcionará em múltiplos pares, precisa de ajuda - página 4

 
whroeder1 2016.12.14 03:35| 74.162.37.113ban PT
Keith Watford: faça um loop através das ordens abertas e conte apenas os negócios que têm o número mágico da EA e o símbolo do gráfico
Exatamente, e não é isso que seu último posto faz.
 
Apaguei seu outro tópico, pois era o mesmo assunto que este. Copiei o comentário de WHRoeder e o colei aqui antes de excluí-lo.
 
Keith Watford:
Apaguei seu outro tópico, pois era o mesmo assunto que este. Copiei o comentário de WHRoeder e o colei aqui antes de excluí-lo.
Tudo bem, então para o laço, deve ser emoldurado de forma semelhante ao que tem para a ordem de fechamento, e se assim for, devo fazer com que o programa conte para cima ou para baixo as ordens?
 

   int buy_count=0;
   int sell_count=0;

   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS) && OrderMagicNumber()==MagicNumber && OrderSymbol()==Symbol())
        {
         if(OrderType()==OP_BUY)
           {
            buy_count++;
           }
         if(OrderType()==OP_SELL)
           {
            sell_count++;
           }
        }
     }

Algo parecido com isso

Sempre faço a contagem regressiva, a menos que tenha uma razão específica para não o fazer.

 
  1. Agora você tem um laço OrderSelect que filtra em MN e símbolo.
  2. Agora, com que MN você abre negócios?
 
Matt_Townsend:
Tudo bem, então para o laço, deve ser emoldurado de forma semelhante ao que tem para a ordem de fechamento, e se assim for, devo fazer com que o programa conte para cima ou para baixo as ordens?
Então agora tenho uma função de loop tanto na minha função de fechamento de ordem quanto na função de fechamento de ordem, mas ainda não está negociando independentemente. Embora ainda esteja abrindo negociações e fechando nos parâmetros definidos, como posso ver no testador de estratégia, embora não funcione em múltiplos gráficos em uma demonstração ao vivo.
 
Matt_Townsend:
Então agora eu tenho uma função de loop tanto na função de fechamento de ordem quanto na função de fechamento de ordem, mas ainda não está sendo negociada independentemente. Embora ainda esteja abrindo negociações e fechando nos parâmetros definidos, como posso ver no testador de estratégia, embora não funcione em múltiplos gráficos em uma demonstração ao vivo.

Cada EA tem um número mágico diferente?

Mostre seus loops que você está usando agora.

 
Keith Watford:

Cada EA tem um número mágico diferente?

Mostre seus loops que você está usando agora.

for(int i=OrdersTotal();i<=0;i--)
      {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true) break;
      if(OrderMagicNumber()==MagicNumber || OrderSymbol()==Symbol()) continue;
    //--- Check for buy order
       if(fastma > slowma)
        {
         if(OrderSend(Symbol(),OP_BUY,Lots,Ask,10,0,0,"",MagicNumber,0,Blue))
            Print("Buy order opened :", OrderOpenPrice());
         else
            Print("Order failed to open : ", GetLastError());      
         return(0);
        }
     //--- Check for sell order          
       if(fastma < slowma)
        {
         if(OrderSend(Symbol(),OP_SELL,Lots,Bid,10,0,0,"",MagicNumber,0,Red))
            Print("Order opened : ", OrderOpenPrice());                
         else
            Print("Order failed to open : ", GetLastError());
         return(0);        
        }
        break;
      }

Aqui está o laço de fim de pedido

Tão bem quanto eu tenho o MN como um int externo, assim eu posso mudá-lo em cada gráfico em que eu coloco o EA.
 
Primeiro você tem
      if(OrderSelect(i,SELECT_BY_POS) && OrderMagicNumber()==MagicNumber && OrderSymbol()==Symbol())
o que é correto
Mas você tem
         ticket = OrderSend(Symbol(),OP_BUY,Lots,Ask,10,0,0,"",0,0,Blue);
O que não foi. E você ignorou minha pergunta.


Então você silenciosamente muda o envio para
         if(OrderSend(Symbol(),OP_BUY,Lots,Ask,10,0,0,"",MagicNumber,0,Blue))
O que agora está correto.
Mas você silenciosamente quebra o laço selecionado.
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true) break;
      if(OrderMagicNumber()==MagicNumber || OrderSymbol()==Symbol()) continue;
O que não é verdade.

Na presença de múltiplas ordens (um gráfico de EA múltiplo, múltiplos EA's, negociação manual)
 
whroeder1:
Primeiro você tem
      if(OrderSelect(i,SELECT_BY_POS) && OrderMagicNumber()==MagicNumber && OrderSymbol()==Symbol())
o que é correto
Mas você tem
         ticket = OrderSend(Symbol(),OP_BUY,Lots,Ask,10,0,0,"",0,0,Blue);
O que não foi.

Então você muda silenciosamente o envio para
         if(OrderSend(Symbol(),OP_BUY,Lots,Ask,10,0,0,"",MagicNumber,0,Blue))
O que é correto
E quebrar o laço selecionado.
      if(OrderMagicNumber()==MagicNumber || OrderSymbol()==Symbol()) continue;
O que não é.
Então eu não deveria ter um Continue ou Break in the loop de maneira alguma?