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

 

Sì, dovete riselezionare l'ordine

   int buy_ticket=0;
   total=0;
   for(i = OrdersTotal()-1; i >= 0 ; i--)
   if ( OrderSelect(i, SELECT_BY_POS)                
    &&  OrderMagicNumber()  == magicNumber            
    &&  OrderSymbol()       == Symbol())
    {             
      total++;
      if(OrderType()==OP_BUY)
         buy_ticket=OrderTicket();
    }
    
   if(buy_ticket>0 && OrderSelect(buy_ticket,SELECT_BY_TICKET))
     {
     //Do stuff
     }

Con il codice di cui sopra, si crea una nuova variabile per memorizzare il numero del biglietto, poi si può selezionare l'ordine per il suo numero di biglietto

 
GumRai:

Sì, dovete riselezionare l'ordine

Con il codice di cui sopra, si crea una nuova variabile per memorizzare il numero del biglietto, poi si può selezionare l'ordine per il suo numero di biglietto

Awesome!!!!!! Grazie mille per questo, dopo molte settimane ora funziona tutto, ho imparato molto, grazie a tutti!!!
 
Trader3000:
Awesome!!!!!! Grazie mille per questo, dopo molte settimane ora funziona tutto, ho imparato molto, grazie a tutti!!!

Mi dispiace ma ho parlato troppo presto. Il Trailingstop si attiva solo a volte, quindi penso che il codice sia ancora rotto da qualche parte. Ecco l'intero EA. Qualcuno può controllare e farmi sapere se trova un errore. Grazie

#define  magicNumber  12345

// Kicks in when position reaches at least TrailingStop pips of profit.

extern string Label_Trailingstart = "Pip threshold to activate Trailing stop";
extern double TrailingStart = 10;
extern string Label_Trailingstop = "Pips trailing behind";
extern double TrailingStop = 5;

//Set it to some value above 0 to activate Hedge
extern double Hedge = 10;
extern double Multiplier = 3;

extern string Label_StopLoss = "Set StopLoss of original trade";
extern double StopLoss = 11;

extern string Label_Stoploss1 = "Set Stoploss of Hedge trade";
extern string Label_Stoploss2 = "Value should be less than 'Hedge'";
extern string Label_Stoploss3 = "otherwise a second Hedge trade will open";
extern double Stoploss = 9;

extern string Label_Percentage = "Lotsize percentage of Equity";
extern double Percentage = 1;
extern double Lotsize = 0.01;

int i, result, total;
double stoplevel;

int init()
{
   stoplevel=(MarketInfo(Symbol(),MODE_STOPLEVEL))/10;  // get broker's stoplevel
   if(StopLoss<=stoplevel) StopLoss=stoplevel;     // we compare our StopLoss with
   if(Stoploss<=stoplevel) Stoploss=stoplevel;     // stoplevel and adjust it when error occured
   if(TrailingStop<=stoplevel) TrailingStart=stoplevel+TrailingStop;  // we compared our TakeProfit
                                                       // as we compared our StopLoss
   if ((StopLoss || Stoploss || TrailingStop) < stoplevel)
   {
   MessageBox("Please note: If your inputs for StopLoss, Stoploss"+
              "\nand/or TrailingStop are below the minimum levels"+
              "\nrequired by your broker, they will automatically"+ 
              "\nbe increased to "+StringConcatenate(stoplevel)); 
   }                                                             
   return(0);
}
 
int deinit()
{
   return(0);
}
 
int start()
{ 
   //double Lots = NormalizeDouble(AccountEquity()*Percentage*Lotsize/100, 2);
   
  int buy_ticket=0;
  int sell_ticket=0;
   total=0;
   for(i = OrdersTotal()-1; i >= 0 ; i--)
   if ( OrderSelect(i, SELECT_BY_POS)                
    &&  OrderMagicNumber()  == magicNumber            
    &&  OrderSymbol()       == Symbol())
    {             
      total++;
      if(OrderType()==OP_BUY)
         buy_ticket=OrderTicket();
      if(OrderType()==OP_SELL)
         sell_ticket=OrderTicket();   
    }
          if(total==0 && Close[1]>Close[2])
           {
              result=OrderSend(Symbol(), OP_BUY, 0.01, Ask, 3, Ask - StopLoss*Point*10, 0, "Original", magicNumber, 0, Blue);
              Print("Error setting Original order: ",GetLastError());     
           }
           
     if (buy_ticket>0 && OrderSelect(buy_ticket,SELECT_BY_TICKET) && OrderType() == OP_BUY) 
       {
        if (Bid - OrderOpenPrice() > NormalizeDouble(TrailingStart *Point*10,Digits))
         {
           if (OrderStopLoss() < Bid - NormalizeDouble(TrailingStop *Point*10,Digits))
           {
              if (OrderModify(OrderTicket(), OrderOpenPrice(), Bid - NormalizeDouble(TrailingStop *Point*10,Digits),
              OrderTakeProfit(), Blue)) 
              Print("Error setting Buy trailing stop: ",GetLastError()); 
           }
         }
            else if (OrderOpenPrice() > Bid + NormalizeDouble(Hedge*Point*10,Digits))
            if(total == 1)
            {
            result=OrderSend(Symbol(), OP_SELL, NormalizeDouble(OrderLots() * Multiplier, 2), Bid, 3,
            Bid + Stoploss*Point*10, 0, "Hedge", magicNumber, 0, Blue);
            Print("Error setting Sell Hedge: ", GetLastError());
            }
       }
     else if (sell_ticket>0 && OrderSelect(buy_ticket,SELECT_BY_TICKET) && OrderType() == OP_SELL)
       {
        if (OrderOpenPrice() - Ask > NormalizeDouble(TrailingStart *Point*10,Digits)) 
         {
          if (OrderStopLoss() > Ask + NormalizeDouble(TrailingStop *Point*10,Digits))
           {
              if (OrderModify(OrderTicket(), OrderOpenPrice(), Ask + NormalizeDouble(TrailingStop *Point*10,Digits),
              OrderTakeProfit(), Red))
              Print("Error setting Sell trailing stop: ",GetLastError()); 
           }
              }
                 else if (OrderOpenPrice() < Ask - NormalizeDouble(Hedge*Point*10,Digits))
            if(total == 1)
            { 
            result=OrderSend(Symbol(), OP_BUY, NormalizeDouble(OrderLots() * Multiplier, 2), Ask, 3,
            Ask - Stoploss*Point*10, 0, "Hedge", magicNumber, 0, Red);
            Print("Error setting Buy Hedge: ", GetLastError());
            }  
            }
    return(0);
}
 
  if (buy_ticket>0 && OrderSelect(buy_ticket,SELECT_BY_TICKET) && OrderType() == OP_BUY) 
       {
        //Code
       }
     else if (sell_ticket>0 && OrderSelect(buy_ticket,SELECT_BY_TICKET) && OrderType() == OP_SELL)
       {
        //If there is an open buy order code here will not be executed
        //The else is not necessary
       }

,

 
GumRai:

,

Grazie mille per avermelo fatto notare, ho corretto l'errore e ora funziona. Ho un'altra domanda: sto cercando di far apparire la casella di messaggio quando il mio stoploss è inferiore allo STOP_LEVEL del broker, ma appare anche quando è superiore. Ho provato a metterlo nella sezione 'start' piuttosto che nella sezione 'init', ma non funziona nemmeno lì. Qualcuno può dare un'occhiata e farmi sapere cosa c'è di sbagliato. Grazie

int init()
{
   stoplevel=(MarketInfo(Symbol(),MODE_STOPLEVEL))/10;  // get broker's stoplevel
   if(StopLoss<=stoplevel) StopLoss=stoplevel;     // we compare our StopLoss with
   if(Stoploss<=stoplevel) Stoploss=stoplevel;     // stoplevel and adjust it when error occured
   if(TrailingStop<=stoplevel) TrailingStart=stoplevel+TrailingStop;  // we compared our TakeProfit
                                                       // as we compared our StopLoss
   if ((StopLoss || Stoploss || TrailingStop) < stoplevel)
   {
   MessageBox("Please note: If your inputs for StopLoss, Stoploss"+
              "\nand/or TrailingStop are below the minimum levels"+
              "\nrequired by your broker, they will automatically"+ 
              "\nbe increased to "+StringConcatenate(stoplevel)); 
   }                                                             
   return(0);
}
 
   if ((StopLoss || Stoploss || TrailingStop) < stoplevel)

non ha senso

vuoi dire?

   if ((StopLoss  < stoplevel || TrailingStop) < stoplevel)
 
GumRai:

non ha senso

vuoi dire?

Grazie ancora, ho risolto il problema :)
 

Ciao a tutti, mi sono imbattuto di nuovo in un intoppo. È molto strano e non riesco a capire perché questo accade. Come ho detto sopra, l'EA ha funzionato bene, ma ora voglio semplicemente passare da questo

result=OrderSend(Symbol(), OP_BUY, 0.01, Ask, 3, Ask - StopLoss*Point*10, 0, "Original", magicNumber, 0, Blue);

a

result=OrderSend(Symbol(), OP_BUY, 0.01, Ask, 3, 0, 0, "Original", magicNumber, 0, Blue);

Non sto toccando nient'altro, ma dopo questo semplice cambiamento né il Trailing stop né l'hedge vengono attivati. E' strano. Il codice completo è sopra

 
Come può seguire una fermata se non ne hai una.
 

Grazie per la tua risposta, ma non capisco. Il codice per il Trailing stop è qui

{
        if (Bid - OrderOpenPrice() > NormalizeDouble(TrailingStart *Point*10,Digits))
         {
           if (OrderStopLoss() < Bid - NormalizeDouble(TrailingStop *Point*10,Digits))
           {
              if (OrderModify(OrderTicket(), OrderOpenPrice(), Bid - NormalizeDouble(TrailingStop *Point*10,Digits),
              OrderTakeProfit(), Blue)) 

Se ho uno Stoploss, l'EA funziona e il Trailingstop e l'hedge si attivano, ma se cambio lo Stoploss a 0, non funziona nulla. Non vedo come e perché lo Stoploss dovrebbe avere qualche influenza sul Trailingstop e sull'hedge?

Motivazione: