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

 

Você precisa repensar seu código.

buy_hedge==0 && sell_hedge==0 && OrderOpenPrice()>Bid+Hedge*Pip)

Estes serão sempre verdadeiros, pois você os coloca a zero e não os altera. Você não inclui o seguinte bloco de código em braceletes encaracolados {}

Você não usa o GV para verificar nada e o nomeia com um número inteiro. O cheque não faz nada, pois você não atribui o bool devolvido a nenhuma variável.

Verifique se a OrderSend falha e, se falha, imprima o código de erro.

 
GumRai:

Você precisa repensar seu código.

Estes serão sempre verdadeiros, pois você os coloca a zero e não os altera. Você não inclui o seguinte bloco de código em braceletes encaracolados {}

Você não usa o GV para verificar nada e o nomeia com um número inteiro. O cheque não faz nada, pois você não atribui o bool devolvido a nenhuma variável.

Verifique se o OrderSend falhou, e se falhar, imprima o código de erro.

Obrigado. Acho que estou no caminho certo, mas agora ele abrirá múltiplos negócios de hedge mesmo que declare total<==1. Meu código agora se parece com isto:

if(total<=1 && OrderOpenPrice()>Bid+Hedge*Pip){
               GlobalVariableCheck(ticket);
               sell_hedge=OrderSend(Symbol(),OP_SELL,HedgeLots,Bid,3,Bid+StopLossHedge*Pip,0,"Hedge",0,0,Blue);
               sell_hedge=GlobalVariableGet(ticket);
               sell_hedge=sell_hedge+1;
               GlobalVariableSet(ticket,sell_hedge);
               int New_SellHedge=GlobalVariableGet(ticket);
               if(sell_hedge!=New_SellHedge) {sell_hedge=New_SellHedge;}
              }
            }
 

Obrigado por este conselho. Finalmente descobri e agora funciona. O pedaço de código se parece com isto:

if(GlobalVariableCheck("InTrade")){
      }
      else if(OrderOpenPrice()>Bid+Hedge*point){
         sell_ticket=OrderSend(Symbol(),OP_SELL,HedgeLots,Bid,3,Bid+StopLossHedge*point,0,"Hedge",magic,0,Blue);{
         GlobalVariableSet("InTrade",1);
         GlobalVariableDel("InTrade");
         return(0);
        }
     }
   }
 
         GlobalVariableSet("InTrade",1);
         GlobalVariableDel("InTrade");

De que adianta fixar o GV e depois apagá-lo imediatamente?

 
GumRai:

Para que serve fixar o GV e depois apagá-lo imediatamente?

Faz sentido agradecer. Assim, é melhor assim:

if(GlobalVariableCheck("InTrade")){
  }
   else if(OrderOpenPrice()>Bid+Hedge*Pip){
      sell_ticket=OrderSend(Symbol(),OP_SELL,HedgeLots,Bid,3,Bid+StopLossHedge*Pip,0,"Hedge",magic,0,Blue);{
         GlobalVariableSet("InTrade",1);
         return(0);
        }
      }
    }
GlobalVariableDel("InTrade");
 
Trader3000:

Faz sentido agradecer. Assim, é melhor assim:

Não, isso ainda não faz sentido algum.

Deve haver um motivo para excluir o GV

 
GumRai:

Não, isso ainda não faz sentido algum.

Deve haver um motivo para apagar o GV

Mais uma vez, obrigado. Que tal isto?

int total=0;
   for(int i=OrdersTotal()-1; i>=0; i--)
      if(OrderSelect(i,SELECT_BY_POS) && OrderMagicNumber()==0 && OrderSymbol()==
         total++;
        }
if(GlobalVariableCheck("InTrade")){
  }
   else if(total==1 && OrderOpenPrice()>Bid+Hedge*Pip){
      sell_ticket=OrderSend(Symbol(),OP_SELL,HedgeLots,Bid,3,Bid+StopLossHedge*Pip,0,"Hedge",magic,0,Blue);{
         GlobalVariableSet("InTrade",1);
            if(total<1) GlobalVariableDel("InTrade");
            return(0);
           }
         }
       }
 
Trader3000:

Mais uma vez, obrigado. Que tal isto?

Ainda não faz sentido

   else if(total==1 && OrderOpenPrice()>Bid+Hedge*Pip){
      sell_ticket=OrderSend(Symbol(),OP_SELL,HedgeLots,Bid,3,Bid+StopLossHedge*Pip,0,"Hedge",magic,0,Blue);{
         GlobalVariableSet("InTrade",1);
            if(total<1) GlobalVariableDel("InTrade");
            return(0);
           }
         }

O bloco de código só é executado se total===1, portanto a verificação se(total<1) será sempre falsa.