Problem with total amount of open orders - page 2

 

Yes, you have to reselect the order

   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
     }

With the above code, you create a new variable to store the ticket number, then you can select the trade by its ticket number

 
GumRai:

Yes, you have to reselect the order

With the above code, you create a new variable to store the ticket number, then you can select the trade by its ticket number

Awesome!!!!!!  Thank you so much for this.  After many weeks everything is now working.  I have learned a lot.  Thank you everyone!!!
 
Trader3000:
Awesome!!!!!!  Thank you so much for this.  After many weeks everything is now working.  I have learned a lot.  Thank you everyone!!!

Sorry but I spoke too soon.  The Trailingstop only kicks in sometimes, so I think the code is still broken somewhere.  Here is the entire EA.  Will someone please check and let me know if you spot a mistake.  Thank you

#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:

,

Thank you so much for pointing that out.  I fixed the mistake and its working now.  I have another question.  I'm trying to have the message box pop-up when my stoploss is less than the broker's STOP_LEVEL, but it pops up even when it is more.  I tried to put it in the 'start' section rather than the 'init' section, but it does not work there either.  Will someone please take a look and let me know what is wrong.  Thank you

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)

doesn't make sense

do you mean?

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

doesn't make sense

do you mean?

Thank you once again.  That fixed the problem.  :)
 

Hi Everyone, I ran into a snag again.  It's very strange and I cannot understand why this is happening.  As I mentioned above, the EA worked fine, but now I simply want to change from this

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

 to

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

  I am not touching anything else, but after this simple change neither the Trailing stop nor the hedge gets triggered.  Its weird.  The full code is above

 
How can it trail a stop when you don't have one.
 

Thank you for your reply, but I do not understand.  The code for the Trailing stop is here

{
        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)) 

 

If I have a Stoploss, the EA works and the Trailingstop and hedge kicks in, but if I change the Stoploss to 0, nothing works.  I don't see how and why the Stoploss would have any influence on the Trailingstop and hedge? 

Reason: