Problème avec le montant total des ordres ouverts - page 5

 

Vous devez repenser votre code.

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

Ils seront toujours vrais si vous les mettez tous deux à zéro et ne les modifiez pas. Vous ne mettez pas le bloc de code suivant entre accolades {}.

Vous n'utilisez pas le GV pour vérifier quoi que ce soit et vous le nommez avec un entier. La vérification ne fait rien puisque vous n'affectez pas le bool retourné à une variable.

Vérifiez si l'envoi de commande échoue, et si c'est le cas, imprimez le code d'erreur.

 
GumRai:

Vous devez repenser votre code.

Ils seront toujours vrais si vous les mettez tous deux à zéro et ne les modifiez pas. Vous ne mettez pas le bloc de code suivant entre accolades {}.

Vous n'utilisez pas le GV pour vérifier quoi que ce soit et vous le nommez avec un entier. La vérification ne fait rien puisque vous n'affectez pas le bool retourné à une variable.

Vérifier si l'OrderSend échoue, et si c'est le cas, imprimer le code d'erreur.

Merci, je pense que je suis sur la bonne voie, mais maintenant il ouvrira plusieurs opérations de couverture même s'il est indiqué total<=1. Mon code ressemble maintenant à ceci :

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

Merci pour ce conseil. J'ai finalement trouvé la solution et cela fonctionne maintenant. Le bout de code ressemble à ceci :

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

Quel est l'intérêt de définir la GV puis de la supprimer immédiatement ?

 
GumRai:

Quel est l'intérêt de mettre le GV puis de l'effacer immédiatement ?

C'est logique, merci. Alors c'est mieux comme ça :

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:

C'est logique, merci. Alors, c'est mieux comme ça :

Non, ça n'a toujours aucun sens.

Il devrait y avoir une raison de supprimer le GV

 
GumRai:

Non, ça n'a toujours aucun sens.

Il devrait y avoir une raison de supprimer le GV

Merci encore. Que pensez-vous de ça ?

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:

Merci encore. Que pensez-vous de ça ?

Cela n'a toujours pas de sens

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

Le bloc de code n'est exécuté que si total==1, donc la vérification if(total<1) sera toujours fausse.

Raison: