Problema con la quantità totale di ordini aperti - pagina 5

 

Dovete ripensare il vostro codice.

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

Questi saranno sempre veri perché li hai impostati entrambi a zero e non li cambi. Non racchiudete il seguente blocco di codice tra parentesi graffe {}

Non usate il GV per controllare qualcosa e lo nominate con un intero. Il controllo non fa nulla perché non si assegna il bool restituito a nessuna variabile.

Controlla se OrderSend fallisce, e se fallisce, stampa il codice di errore.

 
GumRai:

Dovete ripensare il vostro codice.

Questi saranno sempre veri perché li hai impostati entrambi a zero e non li cambi. Non racchiudete il seguente blocco di codice tra parentesi graffe {}

Non usate il GV per controllare qualcosa e lo nominate con un intero. Il controllo non fa nulla perché non assegnate il bool restituito a nessuna variabile.

Controlla se OrderSend fallisce, e se lo fa, stampa il codice di errore.

Grazie, penso di essere sulla strada giusta, ma ora aprirà più operazioni di copertura anche se dichiara totale<=1. Il mio codice ora assomiglia a questo:

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

Grazie per questo consiglio, finalmente l'ho capito e ora funziona. Il pezzo di codice assomiglia a questo:

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

Che senso ha impostare il GV e poi cancellarlo immediatamente?

 
GumRai:

Che senso ha impostare il GV e poi cancellarlo immediatamente?

Ha senso grazie, quindi è meglio così:

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:

Ha senso, grazie. Quindi è meglio così:

No, non ha ancora alcun senso.

Ci dovrebbe essere un motivo per cancellare il GV

 
GumRai:

No, non ha ancora alcun senso.

Ci dovrebbe essere un motivo per cancellare il GV

Grazie ancora, che ne dite di questo?

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:

Grazie ancora, che ne dici di questo?

Non ha ancora senso

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

Il blocco di codice viene eseguito solo se total==1, quindi il controllo if(total<1) sarà sempre falso.

Motivazione: