Problema con la cantidad total de órdenes abiertas - página 5

 

Tienes que repensar tu código.

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

Estos siempre serán verdaderos ya que los pones a cero y no los cambias. No encierras el siguiente bloque de código entre llaves {}

No usas el GV para comprobar nada y lo nombras con un entero. La comprobación no hace nada ya que no asignas el bool devuelto a ninguna variable.

Comprueba si el OrderSend falla, y si lo hace, imprime el código de error.

 
GumRai:

Tienes que repensar tu código.

Estos siempre serán verdaderos ya que los pones a cero y no los cambias. No encierras el siguiente bloque de código entre llaves {}

No usas el GV para comprobar nada y lo nombras con un entero. La comprobación no hace nada ya que no asignas el bool devuelto a ninguna variable.

Comprobar si el OrderSend falla, y si lo hace, imprimir el código de error.

Gracias, creo que voy por el buen camino, pero ahora abrirá múltiples operaciones de cobertura aunque indique total<=1. Mi código ahora es así:

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;}
              }
            }
 

Gracias por estos consejos, por fin lo he solucionado y ahora funciona. El trozo de código es así:

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");

¿Qué sentido tiene establecer la GV y luego borrarla inmediatamente?

 
GumRai:

¿Qué sentido tiene fijar la GV y luego borrarla inmediatamente?

Tiene sentido, gracias. ¿Entonces es mejor así?

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:

Tiene sentido, gracias. ¿Entonces es mejor así?

No, sigue sin tener ningún sentido.

Debería haber una razón para eliminar el GV

 
GumRai:

No, sigue sin tener ningún sentido.

Debería haber una razón para borrar el GV

Gracias de nuevo. ¿Qué tal esto?

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:

Gracias de nuevo. ¿Qué te parece esto?

Sigue sin tener 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);
           }
         }

El bloque de código sólo se ejecuta si total==1, por lo que la comprobación if(total<1) siempre será falsa.