//+------------------------------------------------------------------+ //| 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=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); }