#property copyright   "Copyright 2019, Pelanjie Mafuta // 2020 Dominic Poirier"
#property link        "https://www.mql5.com/en/users/lpelanjie"
#property description "This utility allows you to automatically enable or disable the automated trading button ."
#property description "For assistance Email : info@forexlimerence.com Telegram : https://t.me/forexlimerence"
#property version     "2.00"
#property strict

#include <WinUser32.mqh>
#import "user32.dll"
 
int GetAncestor(int, int);
#define MT4_WMCMD_EXPERTS  33020 

#import
//extern bool Run=true;

input int            Start_Time     = 22;   //Start AutoTrade Time      
input int            Start_Min      = 0;    //Start AutoTrade Minute      
input int            Finish_Time    = 3;    //Stop AutoTrade Time 
input int            Finish_Min     = 55;   //Stop AutoTrade Time 

int            start_Time;          
int            finish_Time;
int            start_Min;
int            finish_Min;
int            AbsoluteStartTime;
int            AbsoluteStopTime;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
   start_Time     = Start_Time;          
   finish_Time    = Finish_Time;
   start_Min      = Start_Min;          
   finish_Min     = Finish_Min;
   
   AbsoluteStartTime = (start_Time*100)+Start_Min;
   AbsoluteStopTime  = (Finish_Time*100)+Finish_Min;
   
   PrintFormat("Auto Trading (local time)::::: Starting at: %02d:%02d  --- Stopping at: %02d:%02d", Start_Time, Start_Min, Finish_Time, Finish_Min);
   
   //--- create timer
   EventSetTimer(1);
     
   return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  } 
   
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
{

}

//+------------------------------------------------------------------+
//| Expert Timer function                                             |
//+------------------------------------------------------------------+
void OnTimer()
{
   int main = GetAncestor(WindowHandle(Symbol(), Period()), 2/*GA_ROOT*/);

   int Current_Time = TimeHour(TimeLocal());
   int Current_Min = TimeMinute(TimeLocal());
   int AbsoluteTime = (Current_Time*100)+Current_Min;

   //PrintFormat("AbsoluteTime: %04d, AbsoluteStartTime: %04d, AbsoluteStopTime: %04d", AbsoluteTime, AbsoluteStartTime, AbsoluteStopTime);        
   // sarting autotrading autodrading if required
   if (AbsoluteStartTime >  AbsoluteStopTime) {
      if (AbsoluteTime >= AbsoluteStartTime || AbsoluteTime < AbsoluteStopTime){
         if(!TerminalInfoInteger(TERMINAL_TRADE_ALLOWED)){
            PrintFormat("Auto Trading::::: Triggered (local time) -- Starting Time: %02d:%02d", Start_Time, Start_Min);
            Print("Auto Trading::::: Starting AutoTrading for all terminal charts");      
            PostMessageA(main, WM_COMMAND,  MT4_WMCMD_EXPERTS, 0 ) ;
         }
      }
   }
   else{
      if (AbsoluteTime >= AbsoluteStartTime && AbsoluteTime < AbsoluteStopTime){
         if(!TerminalInfoInteger(TERMINAL_TRADE_ALLOWED)){
            PrintFormat("Auto Trading::::: Triggered (local time) -- Starting Time: %02d:%02d", Start_Time, Start_Min);
            Print("Auto Trading::::: Starting AutoTrading for all terminal charts");      
            PostMessageA(main, WM_COMMAND,  MT4_WMCMD_EXPERTS, 0 ) ;
         }
      }   
   }
   
   // Will wait to have no orders in terminal before stoping autodrading
   if (AbsoluteStartTime >  AbsoluteStopTime) {
      if (AbsoluteTime >= AbsoluteStopTime && AbsoluteTime < AbsoluteStartTime){
         if(OrdersTotal()<1){
            if(TerminalInfoInteger(TERMINAL_TRADE_ALLOWED)){
               PrintFormat("Auto Trading::::: Triggered (local time)-- Sopping Time: %02d:%02d", finish_Time, finish_Min);
               Print("Auto Trading::::: Stopping AutoTrading for all terminal charts");            
               PostMessageA(main, WM_COMMAND,  MT4_WMCMD_EXPERTS, 0 ) ;
            }
         }                 
      }
   }
   else {
      if (AbsoluteTime >= AbsoluteStopTime || AbsoluteTime < AbsoluteStartTime){
         if(OrdersTotal()<1){
            if(TerminalInfoInteger(TERMINAL_TRADE_ALLOWED)){
               PrintFormat("Auto Trading::::: Triggered (local time)-- Sopping Time: %02d:%02d", finish_Time, finish_Min);
               Print("Auto Trading::::: Stopping AutoTrading for all terminal charts");                        
               PostMessageA(main, WM_COMMAND,  MT4_WMCMD_EXPERTS, 0 ) ;
            }
         }
      }                    
   }               
}
//+------------------------------------------------------------------+


   
 

 