Problema com a quantidade total de pedidos em aberto - página 3

 
Você precisa mostrar todo o seu código modificado.
 
Imprima suas variáveis antes e dentro de suas declarações e descubra por quê.
 
WHRoeder:
Imprima suas variáveis antes e dentro de suas declarações e descubra por quê.

Ok obrigado, farei isso e pesquisarei mais sobre isso. Também encontrei este pedaço de código que me intriga porque o SL e o TP estão separados da OrderSend.

ticket = OrderSend( Symbol(), OP_SELL, getPositionSize(), Bid, 3, 0, 0, "Basic CCI EA", magic, 0 , Red );
         OrderModify( ticket, OrderOpenPrice(), Bid + SL, Bid - TP, 0 );
 

Olá a todos

Resolvi a maioria dos meus problemas e o EA funciona bem no testador, mas ainda estou tendo problemas com o OrderTotal. No modo Demonstração, às vezes abre ambas as ordens pendentes Stop, mas na maioria das vezes apenas a compra ou a venda. Quero que ambas as ordens pendentes abram ao mesmo tempo (dentro de alguns segundos), mas apenas se nenhuma outra ordem ou ordem pendente estiver aberta. Acho que o que acontece é que às vezes abre ambas as ordens pendentes antes de ter a chance de calcular o número de ordens, e outras vezes realmente percebe que uma ordem pendente foi enviada, e não abre a outra. Eu pensei que se eu colocasse as ordens dentro de parênteses encaracolados ela excecutaria ambas quando a condição se cumprisse... Agora eu também sei que ela continuará a abrir ordens pendentes quando eu as apagar enquanto a última vela estiver sendo formada, ou seja, enquanto a variável Tempo corresponder à vela de Tempo[0], os carrapatos são irrelevantes.

Aqui está esse pedaço de código:

extern datetime StartTime1 = D'2016.03.15 15:05';
int start(){
int buy_ticket=0, sell_ticket=0, buystop_ticket=0, sellstop_ticket=0, total=0;
   for(int i= OrdersTotal()-1; i>= 0; i--)
      if(OrderSelect(i,SELECT_BY_POS) && OrderMagicNumber()==magic && OrderSymbol()==Symbol())
        {
         total++;
         if(OrderType()==OP_BUYSTOP) buystop_ticket=OrderTicket();
         if(OrderType()==OP_SELLSTOP) sellstop_ticket=OrderTicket();
         if(OrderType()==OP_BUY) buy_ticket=OrderTicket();
         if(OrderType()==OP_SELL) sell_ticket=OrderTicket();
        }

   if(total==0 && Time[0]==StartTime1)
     {
      buystop_ticket=OrderSend(Symbol(),OP_BUYSTOP,Lots,Ask+Price,30,Ask-SL,0,"Pending",magic,0,Lime);
      sellstop_ticket=OrderSend(Symbol(),OP_SELLSTOP,Lots,Bid-Price,30,Bid+SL,0,"Pending",magic,0,Red);
     }

Há uma maneira melhor ou mais fácil de eu fazer isso? Obrigado.

 
Trader3000:

Olá a todos

Resolvi a maioria dos meus problemas e o EA funciona bem no testador, mas ainda estou tendo problemas com o OrderTotal. No modo Demonstração, às vezes abre ambas as ordens pendentes Stop, mas na maioria das vezes apenas a compra ou a venda. Quero que ambas as ordens pendentes abram ao mesmo tempo (dentro de alguns segundos), mas apenas se nenhuma outra ordem ou ordem pendente estiver aberta. Acho que o que acontece é que às vezes abre ambas as ordens pendentes antes de ter a chance de calcular o número de ordens, e outras vezes realmente percebe que uma ordem pendente foi enviada, e não abre a outra. Eu pensei que se eu colocasse as ordens dentro de parênteses encaracolados ela excecutaria ambas quando a condição se cumprisse... Agora eu também sei que ela continuará a abrir ordens pendentes quando eu as apagar enquanto a última vela estiver sendo formada, ou seja, enquanto a variável Tempo corresponder à vela de Tempo[0], os carrapatos são irrelevantes.

Aqui está esse pedaço de código:

Há uma maneira melhor ou mais fácil de eu fazer isso? Obrigado.

Você está verificando o valor do buyystop_ticket e do selltop_ticket? Se houver apenas 1 aberto, o segundo nunca será aberto (a menos que você remova o primeiro manualmente).
 
Trader3000 Também encontrei este pedaço de código que me intriga porque o SL e o TP estão separados da OrderSend.
ticket = OrderSend( Symbol(), OP_SELL, getPositionSize(), Bid, 3, 0, 0, "Basic CCI EA", magic, 0 , Red );
         OrderModify( ticket, OrderOpenPrice(), Bid + SL, Bid - TP, 0 );
Quando os corretores ECN começaram, a OrderSend falharia com o conjunto SL/TP. A maioria corrigiu isso desde a construção do 600.
 
zirkoner:
Você está verificando o valor do buyystop_ticket e do selltop_ticket? Se houver apenas 1 aberto, o segundo nunca será aberto (a menos que você remova o primeiro manualmente).

Obrigado pela resposta. Na verdade, tanto os pedidos de compra como os de venda abrem cerca de 50% do tempo. Os outros 50% do tempo ou a compra ou a venda são enviados. Mas eu descobri algo. Eu pedi o último erro e nas ocorrências em que ambos são enviados, não há erros, mas quando apenas um abre, eu recebo o erro 130 no que não abriu. Então parece que minhas paradas são inválidas, mas eu não sei por quê. Aqui está o código para SL:

extern int StopLossOriginal=11;

int start(){
int stoplevel=(MarketInfo(Symbol(),MODE_STOPLEVEL))/10;
   if(StopLossOriginal<=stoplevel) StopLossOriginal=stoplevel;

double point=Point*10,
       Price=Pipmove*point,
       SL=(StopLossOriginal-Pipmove)*point;

 if(total==0 && (Time[0]==time1)
     {
      buystop_ticket=OrderSend(Symbol(),OP_BUYSTOP,Lots,Ask+Price,30,Ask-SL,0,"Pending",magic,0,Lime);
      Print("Buystop ticket =",buystop_ticket);
      sellstop_ticket=OrderSend(Symbol(),OP_SELLSTOP,Lots,Bid-Price,30,Bid+SL,0,"Pending",magic,0,Red);
      Print("Sellstop ticket =",sellstop_ticket);
     }

Também adicionei a função Imprimir. É isso que você quis dizer com "Você está verificando o valor de buyystop_ticket e selltop_ticket? "? Ele retorna dois valores, a saber:

2016.03.24 17:11:22.532 News_v10 GBPUSD,M1: Buystop ticket =-1

2016.03.24 17:11:23.227 News_v10 GBPUSD,M1: Compra de bilhete de loteria =49644335



 
WHRoeder:
Quando os corretores ECN começaram, a OrderSend falharia com o conjunto SL/TP. A maioria corrigiu isso desde a construção do 600.
Obrigado por sua resposta. Eu tentei isso também, mas não fez diferença. Estou na construção 950
 
Trader3000:

Obrigado pela resposta. Na verdade, tanto os pedidos de compra como os de venda abrem cerca de 50% do tempo. Os outros 50% do tempo ou a compra ou a venda são enviados. Mas eu descobri algo. Eu pedi o último erro e nas ocorrências em que ambos são enviados, não há erros, mas quando apenas um abre, eu recebo o erro 130 no que não abriu. Então parece que minhas paradas são inválidas, mas eu não sei por quê. Aqui está o código para SL:

Também adicionei a função Imprimir. É isso que você quis dizer com "Você está verificando o valor de buyystop_ticket e selltop_ticket? "? Ele retorna dois valores, a saber:

2016.03.24 17:11:22.532 News_v10 GBPUSD,M1: Buystop ticket =-1

2016.03.24 17:11:23.227 News_v10 GBPUSD,M1: Compra de bilhete de loteria =49644335



Você precisa adicionar RefreshRates() entre seus 2 OrderSend().
 
zirkoner:
Você precisa adicionar RefreshRates() entre seus 2 OrderSend().
Whoot Whoot! que funcionou. Muito obrigado