//+------------------------------------------------------------------+ //| TradingTimes.mq4 | //| | //+------------------------------------------------------------------+ #property copyright "Robert Hill" extern int MagicID = 12345; extern string sm0="--Trading Hours Filter--"; extern string sm1=" Times are your chart times"; extern string sm2="UseTradingHours - Enter 0 for false, 1 for true"; extern int UseTradingHours = 0; extern string sm4="TradeAsian - Enter 0 for false, 1 for true"; extern int TradeAsianMarket = 1; extern int AsianStart = 2200; // Start trades after time extern int AsianStop = 100; // Stop trading after time extern string sm5="Trade Europe - Enter 0 for false, 1 for true"; extern int TradeEuropeanMarket = 1; extern int EurStart = 700; // Start trades after time extern int EurStop = 900; // Stop trading after time extern string sm6="Trade NY - Enter 0 for false, 1 for true"; extern int TradeNewYorkMarket = 0; extern int NYStart = 1300; // Start trades after time extern int NYStop = 1500; // Stop trading after time bool YesStop; int init() { return(0); } int deinit() { return(0); } ////////////////////////////////////////////////////////////////////// int start() { int NumOrders = 0; NumOrders = CalculateCurrentOrders(); if(NumOrders == 0) { YesStop = false; if (UseTradingHours == 1) { YesStop = CheckTradingTimes(); if (YesStop == true) { Comment ("Trading has been stopped - wrong time of day"); } else { Comment ("Trading has resumed - time is OK"); } } else Comment ("Trading Time Filter not in use"); if (YesStop == false) { // Add code here to place trades } } else { // Add code here to modify or close trades } return(0); } //+------------------------------------------------------------------+ // Return true if time is not in session for trading bool CheckOutsideSession( int StartHour, int EndHour, int ct) { if(StartHour<=EndHour) { if(ct < StartHour || ct > EndHour) return(true) ; } else { if(ct > EndHour && ct < StartHour) return(true) ; } return(false) ; } bool CheckTradingTimes() { bool StopTrading; int ct; ct = Hour() * 100 + Minute(); StopTrading = true; // Check trading Asian Market if (TradeAsianMarket == 1) { StopTrading = CheckOutsideSession(AsianStart, AsianStop, ct); } if (StopTrading == true) { // Check trading European Market if (TradeEuropeanMarket == 1) { StopTrading = CheckOutsideSession(EurStart, EurStop, ct); } } if (StopTrading == true) { // Check trading New York Market if (TradeNewYorkMarket == 1) { StopTrading = CheckOutsideSession(NYStart, NYStop, ct); } } return(StopTrading); } int CalculateCurrentOrders() { int buys = 0, sells = 0, num = 0; for(int i=0;i<OrdersTotal();i++) { OrderSelect(i,SELECT_BY_POS,MODE_TRADES); if(OrderSymbol()!= Symbol()) continue; if (OrderMagicNumber()!= MagicID) continue; if(OrderType() == OP_BUY) buys++; if(OrderType() == OP_SELL) sells++; } num = buys + sells; return(num); } //+------------------------------------------------------------------+
Sample
Analysis
Market Information Used:
Indicator Curves created:
Indicators Used:
Custom Indicators Used:
Order Management characteristics:
Checks for the total of open orders
Other Features: