/////////////////////////////////////////////////////// // // SaherElm IT Center MQL5 Expert Advisor // ------------------------------------------------- // Name: XBaseEA // Description: Session Detector Test Expert Advisor ... // // Maintainer: // ------------ // Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) // ////////////////////////////////////////////////////// // // Global Properties ... #property copyright "Copyright 2023, SaherElm IT Center" #property link "https://saherelm.ir" #property version "1.00" #property icon "../Images/SaherElm_Logo_Color.ico" #property description "SaherElm Session Detector Test Expert Advisor" #property strict // #region Imports ... #include "../Classes/x-saherelm.session-detector.class.mq5" // #endregion // #region Global Variables ... #define ShortName "XSessionDetectorTestEA" XCAlert *eaAlert; XCSessionDetector *eaSessionDetector; // #endregion // #region Global Event Handlers ... /** * Initialize EA Process ... * * @return ( int ) */ int OnInit() { // bool result = true; // result = InitializeRequirements(); if (!result) { return INIT_FAILED; } // return INIT_SUCCEEDED; } /** * De Initialize Expert ... * * @param reason: int, DeInitialization Reason ... * * REASON_PROGRAM 0 The EA has stopped working calling the ExpertRemove() function * REASON_REMOVE 1 Program removed from a chart * REASON_RECOMPILE 2 Program recompiled * REASON_CHARTCHANGE 3 A symbol or a chart period is changed * REASON_CHARTCLOSE 4 Chart closed * REASON_PARAMETERS 5 Inputs changed by a user * REASON_ACCOUNT 6 Another account has been activated or reconnection to the trade server has occurred due to changes in the account settings * REASON_TEMPLATE 7 Another chart template applied * REASON_INITFAILED 8 The OnInit() handler returned a non-zero value * REASON_CLOSE 9 Terminal closed * */ void OnDeinit(const int reason) { // // Destroy Timer ... // If Initialized ... // // Cleanup Resources ... ZeroMemory(eaAlert); ZeroMemory(eaSessionDetector); } /** * Handle Tick for Processing ... */ void OnTick() { // // Perform Session Detector Process ... eaSessionDetector.Process(); } /** * Handle On Chart Event Processing ... * @param id: int, Specified Event ID ... * @param lparam: long, type event parameter * @param dparam: double, type event parameter * @param sparam: string, type event parameter */ void OnChartEvent( const int id, const long &lparam, const double &dparam, const string &sparam // ) { } // #endregion // #region Custom Actions ... /** * Initial Requirements of EA ... * * @return ( bool ) */ bool InitializeRequirements() { // bool result = false; // // Initialize Alert ... eaAlert = new XCAlert( ShortName, true, // Enable Alert ... true, // Log Alert ... false, // Terminal Alert ... false, // Mail Alert ... false, // Push Alerts ... false // Save Alerts ... ); result = eaAlert != NULL; if (!result) { return result; } // // Initialize Session Detector ... eaSessionDetector = new XCSessionDetector( eaAlert, // Alert ... true, // Use Server Time ... 0 // Timezone Offset ... ); // // Register Event Handlers ... eaSessionDetector.AddOnSessionEndHandler(OnSessionEndHandler); eaSessionDetector.AddOnOverlapEndHandler(OnOverlapEndHandler); eaSessionDetector.AddOnSessionStartHandler(OnSessionStartHandler); eaSessionDetector.AddOnOverlapStartHandler(OnOverlapStartHandler); eaSessionDetector.AddOnSessionStateChangeHandler(OnSessionStateChangeHandler); // result = eaSessionDetector != NULL; if (!result) { return result; } // return result; } // #endregion // #region Custom Event Handlers ... /** * Handle Session Start Event ... * * @param session: ENUM_X_SESSION_TYPE * @param startTime: datetime */ void OnSessionStartHandler( ENUM_X_SESSION_TYPE session, datetime startTime // ) { Print("Session Started: ", EnumToString(session), " at ", TimeToString(startTime)); // // Custom Testing ... if (session == X_SESSION_NEWYORK) { DebugBreak(); } } /** * Handle Session End Event ... * * @param session: ENUM_X_SESSION_TYPE * @param startTime: datetime */ void OnSessionEndHandler( ENUM_X_SESSION_TYPE session, datetime startTime // ) { Print("Session Ended: ", EnumToString(session), " at ", TimeToString(startTime)); // // Custom Testing ... if (session == X_SESSION_NEWYORK) { DebugBreak(); } } /** * Handle Overlap Start Event ... * * @param session: ENUM_X_SESSION_OVERLAP_TYPE * @param startTime: datetime */ void OnOverlapStartHandler( ENUM_X_SESSION_OVERLAP_TYPE overlap, datetime startTime // ) { Print("Overlap Started: ", EnumToString(overlap), " at ", TimeToString(startTime)); // // Custom Testing ... if (overlap == X_OVERLAP_LONDON_NEWYORK) { DebugBreak(); } } /** * Handle Overlap End Event ... * * @param session: ENUM_X_SESSION_OVERLAP_TYPE * @param startTime: datetime */ void OnOverlapEndHandler( ENUM_X_SESSION_OVERLAP_TYPE overlap, datetime startTime // ) { Print("Overlap Ended: ", EnumToString(overlap), " at ", TimeToString(startTime)); // // Custom Testing ... if (overlap == X_OVERLAP_LONDON_NEWYORK) { DebugBreak(); } } /** * Handle Session State Change Event ... * * @param session: ENUM_X_SESSION_TYPE * @param state: ENUM_X_SESSION_STATE */ void OnSessionStateChangeHandler( ENUM_X_SESSION_TYPE session, ENUM_X_SESSION_STATE state // ) { Print("Session State Changed: ", EnumToString(session), " State: ", EnumToString(state)); } // #endregion