EA Keep Disturb Other Pair Order

Back to topics list  | 1 2 To post a new topic, please log in or register
avatar
11
najibdaud 2015.10.29 23:34 #
 
//----------------------------------------------------
//CLOSING ORDER



   bool CloseOrder;
   int CloseError;
   bool DeleteOrder;
   int DeleteError;

if (CountAll > 0) {   
    for (int i = 0; i < OrdersTotal(); i++) {                                                          //----CHANGED----
      if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == TRUE) {
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderCloseTime() == 0) {
            if ((IsTradeTime(HourStart1, HourStop1) || IsTradeTime(HourStart2, HourStop2) || IsTradeTime(HourStart3, HourStop3) || IsTradeTime(HourStart4, HourStop4))) {
               while (!IsTradeAllowed()) Sleep(100);
               RefreshRates();
               if (OrderType() == OP_BUY && (TimeCurrent() - OrderOpenTime() >= LimitTime)) {
                  CloseOrder = OrderClose(OrderTicket(), OrderLots(), Bid, slp_X(), Blue);
                  if (WriteLog == TRUE && CloseOrder == TRUE) {
                     Print ("Order Close On LimitTime",";"," OrderTicket"," #",OrderTicket()," Time : ",Hour(),":",Minute(),":",Seconds());
                     return(0);
                  }
                     if (!CloseOrder) {
                        CloseError = GetLastError();
                        if(WriteLog == TRUE) {
                           Print("Close: OrderClose Error = ", ErrorDescription(CloseError));
                           return(0);                                                                    //---ADD-------
                        }
                        if (CloseError == 2 || CloseError == 128 || CloseError == 139) {
                           Alert("Error Execution ", ErrorDescription(CloseError),"!!!"); 
                           PlaySound("alert.wav");
                           CriticalError = TRUE;
                           return(0);                                                                  
                        }
                        if (CloseError == 4 || CloseError == 129) Sleep(1000); return(0);                //---ADD-------
                        if (CloseError == 133) Sleep(3000); return(0); //Trade is Disabled                //---ADD-------
                     } 
               }
               if (OrderType() == OP_SELL && (TimeCurrent() - OrderOpenTime() >= LimitTime)) {
                  CloseOrder = OrderClose(OrderTicket(), OrderLots(), Ask, slp_X(), Red);
                  if (WriteLog == TRUE && CloseOrder == TRUE) {
                     Print ("Order Close On LimitTime",";"," OrderTicket"," #",OrderTicket()," Time : ",Hour(),":",Minute(),":",Seconds());
                     return(0);                                                                           //---ADD-------
                  }   
                     if (!CloseOrder) {
                        CloseError = GetLastError();
                        if(WriteLog == TRUE) {
                           Print("Close: OrderClose Error = ", ErrorDescription(CloseError));
                           return(0);                                                                      //---ADD-------
                        }
                        if (CloseError == 2 || CloseError == 128 || CloseError == 139) {
                           Alert("Error Execution ", ErrorDescription(CloseError),"!!!"); 
                           PlaySound("alert.wav");
                           CriticalError = TRUE;
                           return(0);                                                                  
                        }
                        if (CloseError == 4 || CloseError == 129) Sleep(1000); return(0);                 //---ADD-------
                        if (CloseError == 133) Sleep(3000); return(0); //Trade is Disabled                //---ADD-------
                     } 
               }
               if ((OrderType() == OP_SELLSTOP || OrderType() == OP_BUYSTOP )&& (CountBuy > 0 || CountSell > 0)) {
                  DeleteOrder = OrderDelete(OrderTicket());
                  if (WriteLog == TRUE && DeleteOrder == TRUE) {
                     Print ("Pending Order Closed Due To Activate Order",";"," OrderTicket"," #",OrderTicket());
                     return(0);                                                                            //---ADD-------
                  } 
                     if (!DeleteOrder) {
                        DeleteError = GetLastError();
                        if(WriteLog == TRUE) {
                           Print("Delete: OrderDelete Error = ", ErrorDescription(DeleteError));
                           return(0);                                                                      //---ADD-------
                        }
                        if (DeleteError == 2 || DeleteError == 128 || DeleteError == 139) {
                           Alert("Error Execution ", ErrorDescription(DeleteError),"!!!"); 
                           PlaySound("alert.wav");
                           CriticalError = TRUE;
                           return(0);
                        }
                        if (DeleteError == 4 || DeleteError == 129) Sleep(1000); return(0);                //---ADD-------
                        if (DeleteError == 133) Sleep(3000); return(0); //Trade is Disabled                //---ADD-------
                     } 
               }

            }
      }
   }
  }
}

//------------------

 

I have also changed the looping FOR iteration and put return on every closing but still it keep closing other pair orders. what's wrong with this code? 

 

avatar
1332
jjc 2015.10.30 00:09 #
 
najibdaud:

 I have also changed the looping FOR iteration and put return on every closing but still it keep closing other pair orders. what's wrong with this code? 

Same question as before: what's the code for IsTradeTime() ? 
avatar
11
najibdaud 2015.10.30 03:30 #
 
It just a function for checking trading time. There is no orderselect function
bool IsTradeTime(int OpenHour, int CloseHour) {
////////////////////////////// Check DayOfWeek
   int cur_d = DayOfWeek();
   if(OpenHour == HourStart1 && CloseHour == HourStop1) {
      if (cur_d == 1 && !MondayOn) return(FALSE);
      if (cur_d == 2 && !TuesdayOn) return(FALSE);
      if (cur_d == 3 && !WednesdayOn) return(FALSE);
      if (cur_d == 4 && !ThursdayOn) return(FALSE);
      if (cur_d == 5 && !FridayOn) return(FALSE);
      if (cur_d == 6 && !SaturdayOn) return(FALSE);
      if (cur_d == 0 && !SundayOn) return(FALSE);
      if (!ExtendedSession1) return (FALSE);
   } else if(OpenHour == HourStart2 && CloseHour == HourStop2) {
      if (cur_d == 1 && !MondayOn) return(FALSE);
      if (cur_d == 2 && !TuesdayOn) return(FALSE);
      if (cur_d == 3 && !WednesdayOn) return(FALSE);
      if (cur_d == 4 && !ThursdayOn) return(FALSE);
      if (cur_d == 5 && !FridayOn) return(FALSE);
      if (cur_d == 6 && !SaturdayOn) return(FALSE);
      if (cur_d == 0 && !SundayOn) return(FALSE);
      if (!ExtendedSession2) return (FALSE);
   } else if(OpenHour == HourStart3 && CloseHour == HourStop3) {
      if (cur_d == 1 && !MondayOn) return(FALSE);
      if (cur_d == 2 && !TuesdayOn) return(FALSE);
      if (cur_d == 3 && !WednesdayOn) return(FALSE);
      if (cur_d == 4 && !ThursdayOn) return(FALSE);
      if (cur_d == 5 && !FridayOn) return(FALSE);
      if (cur_d == 6 && !SaturdayOn) return(FALSE);
      if (cur_d == 0 && !SundayOn) return(FALSE);
      if (!ExtendedSession3) return (FALSE);
   } else if(OpenHour == HourStart4 && CloseHour == HourStop4) {
      if (cur_d == 1 && !MondayOn) return(FALSE);
      if (cur_d == 2 && !TuesdayOn) return(FALSE);
      if (cur_d == 3 && !WednesdayOn) return(FALSE);
      if (cur_d == 4 && !ThursdayOn) return(FALSE);
      if (cur_d == 5 && !FridayOn) return(FALSE);
      if (cur_d == 6 && !SaturdayOn) return(FALSE);
      if (cur_d == 0 && !SundayOn) return(FALSE);
      if (!ExtendedSession4) return(FALSE);
   }
////////////////////////////// Check DayOfWeek
   bool result = FALSE;
   RefreshRates();
   int CurrentHour = Hour();
   if (OpenHour > 23 || OpenHour < 0 ) OpenHour = 0;
   if (CloseHour > 23 || CloseHour < 0 ) CloseHour = 0;
   if (OpenHour < CloseHour && (Hour() >= OpenHour && Hour() < CloseHour)) result = TRUE;
   if (OpenHour > CloseHour && (Hour() >= OpenHour || Hour() < CloseHour)) result = TRUE;
   if (DayOfWeek() != TradeDayOfWeek && TradeDayOfWeek != 0) result = FALSE;
   if (NewsFilter == TRUE && NewsHandling() == TRUE) result = FALSE;
return(result);
}
avatar
1332
jjc 2015.10.30 09:05 #
 
najibdaud:
It just a function for checking trading time. There is no orderselect function
And what is NewsHandling() ?
avatar
11
najibdaud 2015.10.30 12:23 #
 
jjc:
And what is NewsHandling() ?
It just a function for News filtering. No Orderselect function or looping. Just true / false.
avatar
13012
WHRoeder 2015.10.30 13:42 #
 
In the presence of multiple orders (one EA multiple charts, multiple EA's, manual trading) you must count down when closing/deleting/modifying in a position loop. Get in the habit of always counting down. Loops and Closing or Deleting Orders - MQL4 forum
avatar
11
najibdaud 2015.10.30 14:51 #
 

Hi WHRoeder,

Thank you for your advice. Looking for the example, does it a must for function OrdersTotal() pass to the variable?

int PositionIndex;    

int TotalNumberOfOrders;   

TotalNumberOfOrders = OrdersTotal();                                                // Does this line a must?

for(PositionIndex = TotalNumberOfOrders - 1; PositionIndex >= 0 ; PositionIndex --)  
   {
   if( ! OrderSelect(PositionIndex, SELECT_BY_POS, MODE_TRADES) ) continue;   
   
   if( OrderMagicNumber() == MagicNo       
      && OrderSymbol() == Symbol()         
      && ( OrderType() == OP_BUY           
      ||   OrderType() == OP_SELL ) )      
   
      if ( ! OrderClose( OrderTicket(), OrderLots(), OrderClosePrice(), Slippage ) )               
         Print("Order Close failed, order number: ", OrderTicket(), " Error: ", GetLastError() );   
      
   } //  end of For loop

 

Or can I do like this ?  OrdersTotal included in the loop without pass it to the variable at first. Does it make a different?

 

int PositionIndex;    

for(PositionIndex = OrdersTotal() - 1; PositionIndex >= 0 ; PositionIndex --)   // Can I use like this instead?
   {
   if( ! OrderSelect(PositionIndex, SELECT_BY_POS, MODE_TRADES) ) continue;   
   
   if( OrderMagicNumber() == MagicNo       
      && OrderSymbol() == Symbol()         
      && ( OrderType() == OP_BUY           
      ||   OrderType() == OP_SELL ) )      
   
      if ( ! OrderClose( OrderTicket(), OrderLots(), OrderClosePrice(), Slippage ) )               
         Print("Order Close failed, order number: ", OrderTicket(), " Error: ", GetLastError() );   
      
   } //  end of For loop

 

 

 

avatar
2018
gooly 2015.10.30 15:03 #
 
najibdaud:

gooly, 

The magicnumber is same to all pair. 

So how could one EA determine whether its a position of its own or from another EA?

The comment is not fail safe a the broker can change it!

avatar
11
najibdaud 2015.10.30 15:29 #
 
gooly:

So how could one EA determine whether its a position of its own or from another EA?

The comment is not fail safe a the broker can change it!

 

It should determine by pair symbol whether same magic number or not. Even though same magic number but the pair is different as example from this Loops and Closing or Deleting Orders - MQL4 forum

 

But I dont know what is wrong with my code. 

avatar
2018
gooly 2015.10.30 15:42 #
 
najibdaud:

It should determine by pair symbol whether same magic number or not. Even though same magic number but the pair is different as example from this Loops and Closing or Deleting Orders - MQL4 forum

But I dont know what is wrong with my code. 

So any of your EAs will close all Orders of the same Symbol() no matter whether it has opened it itself or it was opened by another EA.

Normally each EA has its own MagicNumber so it can detect its own Orders and does not disturb other EAs!

Back to topics list   | 1 2  

To add comments, please log in or register