close_positions_v1_0

Author: ThinkTrustTrade
Price Data Components
Series array that contains open time of each bar
Orders Execution
Checks for the total of open ordersIt Closes Orders by itself
0 Views
0 Downloads
0 Favorites
close_positions_v1_0
//+------------------------------------------------------------------+
//|                                                        close.mq4 |
//|                                                  ThinkTrustTrade |
//|                                        www.think-trust-trade.com |
//+------------------------------------------------------------------+
#property copyright "ThinkTrustTrade"
#property link      "www.think-trust-trade.com"

extern string  Visit="www.think-trust-trade.com";
extern string  Like="www.facebook.com/ThinkTrustTrade";
extern string side="-----Select-Side-------";
extern bool long=true;
extern bool short=true;
extern string limits="----Set-Profit-and/or-Loss-Limits----";
extern bool profit_limit=true;
extern int pip_limit_profit=100;
extern bool loss_limit=true;
extern int pip_limit_loss=-200;
extern string time_limit="----Set-Time-Limit-----";
extern bool close_after_time_limit=true;
extern int minutes_limit=1;
extern int hours_limit=1;
extern string time_close="--Close-at/after-specific-time-GMT-";
extern bool close_at_specific_time=true;
extern int gmt_offset_hours=3;
extern int gmt_offset_minutes=0;
extern int close_hour=15;
extern int close_minute=0;
extern string magic_filter="---Set-Positions-Magic-Number-to-close/skip---";
extern int only_magic=0;
extern int skip_magic=0;
extern string symbol_filter="---Set-Symbol-to-close---";
extern bool only_below_symbol=false;
extern string symbol="EURUSD";

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
//=====================================================================================================

open_result(pip_limit_profit, pip_limit_loss, minutes_limit, hours_limit);

//----------------------------------------------------------------------------------------------------   
//----
   return(0);
  }
//+------------------------------------------------------------------+

void open_result (int pip_limit_profit, int pip_limit_loss, int minutes_limit, int hours_limit)
{
int time_limit=minutes_limit+hours_limit*60;
//Print (time_limit);
int ticket;
int opened_minutes_ago;
bool above=false;
double limit_profit;
double limit_loss;
double p;

if (OrdersTotal()==0) return;
for (int i=0; i<=OrdersTotal(); i++)
         {
               if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true)
                  {
                  if (only_magic>0 && OrderMagicNumber()!=only_magic) continue;
                  if (skip_magic>0 && OrderMagicNumber()==skip_magic) continue;
                  if (only_below_symbol==true && OrderSymbol()!=symbol)continue;
                  opened_minutes_ago=(TimeCurrent()-OrderOpenTime())/60;
                  if (close_after_time_limit==true && opened_minutes_ago<time_limit) continue;
                  if (close_at_specific_time==true && specitfic_time()!=1) continue;
                     if (OrderType()==0 && long==true)//for long positions
                     {
                     p=MarketInfo(OrderSymbol(), MODE_POINT);
                     limit_profit=pip_limit_profit*p;
                     limit_loss=pip_limit_loss*p;
                     //Print ("Limit Loss: ",limit_loss);
                     
                        if(profit_limit)
                        { 
                        if(MarketInfo(OrderSymbol(),MODE_BID)-OrderOpenPrice()>=limit_profit) 
                              {
                        
                                    //Print ("Position ", OrderTicket(), " should be closed!");
                                    ticket=OrderClose(OrderTicket(),OrderLots(), MarketInfo(OrderSymbol(),MODE_BID), 3,Red);
                                    if (ticket==-1) Print ("Error: ",  GetLastError());
                              }
                        }      
                        if(!loss_limit) continue;       
                        //Print("Position ",OrderTicket(),"result: ",MarketInfo(OrderSymbol(),MODE_BID)-OrderOpenPrice());
                        if((MarketInfo(OrderSymbol(),MODE_BID)-OrderOpenPrice()<=limit_loss) && opened_minutes_ago>time_limit) 
                              {
                        
                                    //Print ("Position ", OrderTicket(), " should be closed!");
                                    ticket=OrderClose(OrderTicket(),OrderLots(), MarketInfo(OrderSymbol(),MODE_BID), 3,Red);
                                    if (ticket==-1) Print ("Error: ",  GetLastError());
                              }

                     }
                  //-------------------------------------------------------------------------------   
                  if (OrderType()==1 && short==true)//for short positions
                     {
                     p=MarketInfo(OrderSymbol(), MODE_POINT);
                     limit_profit=pip_limit_profit*p;
                     limit_loss=pip_limit_loss*p;
                     //Print ("Limit Loss: ",limit_loss);
                     
                        if(profit_limit)
                        {
                        if(OrderOpenPrice()-MarketInfo(OrderSymbol(),MODE_ASK)>=limit_profit)
                              { 
                        
                                    //Print ("Position ", OrderTicket(), " should be closed!");
                                    ticket=OrderClose(OrderTicket(),OrderLots(), MarketInfo(OrderSymbol(),MODE_ASK), 3,Red);
                                    if (ticket==-1) Print ("Error: ",  GetLastError());
                              }
                        }      
                        if(!loss_limit) continue;      
                        //Print("Position ",OrderTicket(),"result: ",(OrderOpenPrice()-MarketInfo(OrderSymbol(),MODE_ASK)));      
                        if(OrderOpenPrice()-MarketInfo(OrderSymbol(),MODE_ASK)<=limit_loss)
                              { 
                        
                                    //Print ("Position ", OrderTicket(), " should be closed!");
                                    ticket=OrderClose(OrderTicket(),OrderLots(), MarketInfo(OrderSymbol(),MODE_ASK), 3,Red);
                                    if (ticket==-1) Print ("Error: ",  GetLastError());
                              }     

                     }
                  //------------------------------------------------------------------------------      
                  }
         }
         return (above);
} 

int specitfic_time()
         {
               int close_gmt_h=close_hour+gmt_offset_hours;
               int close_gmt_m=close_minute+gmt_offset_minutes;
               int ch,chf,cm;
               if(close_gmt_h==24) ch=0;
               if(close_gmt_h<0) ch=24+close_hour+gmt_offset_hours;
               if(close_gmt_h>24) ch=close_hour+gmt_offset_hours-24;
               if(close_gmt_h>=0 && close_gmt_h<24) ch=close_hour+gmt_offset_hours;  
               //Print ("close hour: ", ch);
               if(close_gmt_m==60) cm=0;
               if(close_gmt_m<0) { cm=60+close_minute+gmt_offset_minutes; chf=ch-1;}
               if(close_gmt_m>60) { cm=close_minute+gmt_offset_minutes-60; chf=ch+1;}
               if(close_gmt_m<60 && close_gmt_m>=0) { cm=close_minute+gmt_offset_minutes; chf=ch;}
               //Print ("close hour: ", chf, " close minute: ", cm);/**/
               if (Hour()>=chf && Minute()>=cm) return(1);
         }

Comments