/////////////////////////////////////////////////////// // // SaherElm IT Center MQL5 Seriallize Library // --------------------------------------- // Name: XPOILib // Description: All models related to POIs ... // // // Maintainer: // ------------ // Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) // ////////////////////////////////////////////////////// // // Global Properties ... #property library #property copyright "Copyright 2023, SaherElm IT Center" #property link "https://www.saherelm.ir" #property version "1.00" #property strict // // Imports ... #include "../Libraries/x-saherelm.common.lib.mq5" // // Definitions ... // // Definitions ... // // All Available POI(s) ... enum ENUM_XPOIS { // // Momentum Bar ... X_POI_MOMENTUM_BAR, // Momentum Bar ... // // Rejection Bar ... X_POI_REJECTION_BAR, // Rejection Bar ... // // Swings ... X_POI_SWING_HIGH, // Simple Swing High ... X_POI_SWING_LOW, // Simple Swing Low ... // // Support nad Resistance ... X_POI_SUPPORT, // Support Zone ... X_POI_RESISTANCE, // Resistance Zone ... // // Supply and Demand Zones ... X_POI_SUPPLY_ZONE, // Supply Zone ... X_POI_DEMAND_ZONE, // Demand Zone ... // // Order Blocks ... X_POI_BULLISH_ORDERBLOCK, // Bullish Order Block ... X_POI_BEARISH_ORDERBLOCK, // Bearish Order Block ... // // Fair Value Gaps ... X_POI_BULLISH_FVG, // Bullish Order Block ... X_POI_BEARISH_FVG, // Bearish Order Block ... }; // // Event Types ... enum ENUM_XPOI_EVENTS { // // Trading Days ... X_TRADE_DAY_FIRST_BAR, // Trading Day Start ... X_TRADE_DAY_LAST_BAR, // Trading Day End ... // // Session ... X_SESSION_FIRST_BAR, // Session First Bar ... X_SESSION_LAST_BAR, // Session Last Bar ... // // Momentum Bar ... X_MOMENTUM_BAR_DETECTED, // Momentum Bar ... // // Rejection Bar ... X_REJECTION_BAR_DETECTED, // Rejection Bar ... // // Swings ... X_SWING_HIGH_DETECTED, X_SWING_LOW_DETECTED, // // Support nad Resistance ... X_SUPPORT_ZONE_DETECTED, // Support Zone ... X_RESISTANCE_ZONE_DETECTED, // Resistance Zone ... // // Supply nad Demand ... X_SUPPLY_ZONE_DETECTED, // Supply Zone ... X_DEMAND_ZONE_DETECTED, // Demand Zone ... // // Order Blocks ... X_BULLISH_ORDERBLOCK_DETECTED, // Bullish Order Block ... X_BEARISH_ORDERBLOCK_DETECTED, // Bearish Order Block ... // // Fair Value Gaps ... X_BULLISH_FVG_DETECTED, // Bullish Fair Value Gapّ ... X_BEARISH_FVG_DETECTED, // Bearish Fair Value Gapّ ... }; // // Forext Sessions ... enum ENUM_XSESSION { X_TOKYO, X_SYDNEY, X_LONDON, X_NEW_YORK, X_FRANKFORT, }; // // Represent a Session Working Time ... struct XSession { // // Props ... ENUM_XSESSION session; // Session Identifier string start; // Start Time string end; // End Time // bool allowDraw; color startColor; ENUM_LINE_STYLE startStyle; color endColor; ENUM_LINE_STYLE endStyle; /** * Constructor ... */ void XSession() { Clean(); } /** * Clean Structure ... */ void Clean() { // start = NULL; end = NULL; // allowDraw = false; endColor = clrAqua; endStyle = STYLE_DOT; startColor = clrAqua; endStyle = STYLE_DOT; } /** * Validate Structure ... * * @return ( bool ) */ bool IsValid() { // bool result = false; // result = IsValid(start) && IsValid(end); // return result; } /** * Initialize Specified Session ... * * @param _session: ENUM_XSESSION member ... * @param _start: String (Session Start Time) ... * @param _end: String (Session End Time) ... * * @return ( bool ) */ bool Init( ENUM_XSESSION _session, string _start, string _end // ) { // bool result = false; // result = IsValid(_start) && IsValid(_end); if (!result) { return result; } // end = _end; start = _start; session = _session; // result = IsValid(); // return result; } // }; // struct XTradeDay { // datetime from; datetime to; // void XTradeDay() { Clean(); } // void Clean() { // from = NULL; to = NULL; } // bool IsValid() { // bool result = false; // result = IsValid(from) && IsValid(to); // return result; } // string GetTag() { // string result = NULL; // if (!IsValid()) { return result; } // result = "XDay_" + ToFormatString(from) + "_" + ToFormatString(to); // return result; } // }; // // Detected Session ... struct XMarketSession { // ENUM_XSESSION session; datetime from; datetime to; // void XMarketSession() { Clean(); } // void Clean() { from = NULL; to = NULL; } // bool IsValid() { // bool result = false; // result = IsValid(from) && IsValid(to); // return result; } // string GetTag() { // string result = NULL; // if (!IsValid()) { return result; } // result = ToFormatString(from) + "_" + ToFormatString(to) + "_"; // return result; } }; // // Zone Struct ... struct XZone { // // Props ... double upper; double lower; string prefix; // // Constructor ... void XZone() { Clean(); } // bool Init( double _upper, double _lower, string _prefix // ) { // bool result = false; // result = _upper > 0 && _lower > 0 && _upper > _lower && IsValid(_prefix); if (!result) { return result; } // upper = _upper; lower = _lower; prefix = _prefix; // result = IsValid(); // return result; } // void Clean() { // upper = 0; lower = 0; // prefix = NULL; } // bool IsValid() { // bool result = false; // result = upper > 0 && lower > 0 && upper > lower && IsValid(prefix); // return result; } // string GetTag() { // string result = NULL; // result = prefix + "_XZone_" + ToString(upper) + "_" + ToString(lower); // return result; } }; // // XOHCL Event Handler ... typedef void (*TXOHCLEventHandler)( XOHCL &bar // ); // // POI Event Handler ... typedef void (*TXPOIEventHandler)( ENUM_XPOI_EVENTS event // ); // // Session Event Handler ... typedef void (*TXSessionEventHandler)( ENUM_XSESSION session, ENUM_XPOI_EVENTS event // ); // // Zone Handler ... typedef void (*TXZoneEventHandler)( ENUM_XPOI_EVENTS event // ); // // Extensions ... /** * Converts ENUM_XPOI value to String Representation ... * * @param value: ENUM_XPOI member ... * * @return ( string ) */ string ToString(ENUM_XPOIS value) { // string result = NULL; // switch (value) { // case X_POI_MOMENTUM_BAR: result = "XMNTMB"; break; // case X_POI_REJECTION_BAR: result = "XRJCTB"; break; // case X_POI_SWING_HIGH: result = "XSPH"; break; // case X_POI_SWING_LOW: result = "XSPL"; break; // case X_POI_SUPPORT: result = "XSUP"; break; // case X_POI_RESISTANCE: result = "XRES"; break; // case X_POI_SUPPLY_ZONE: result = "XSUPPLY"; break; // case X_POI_DEMAND_ZONE: result = "XDEMAND"; break; // case X_POI_BULLISH_ORDERBLOCK: result = "XBULLOB"; break; // case X_POI_BEARISH_ORDERBLOCK: result = "XBEAROB"; break; // case X_POI_BULLISH_FVG: result = "XBULLFVG"; break; // case X_POI_BEARISH_FVG: result = "XBEARFVG"; break; } // return result; } /** * Converts ENUM_XSESSION value to String Representation ... * * @param value: ENUM_XSESSION member ... * * @return ( string ) */ string ToString(ENUM_XSESSION value) { // string result = NULL; // switch (value) { // case X_SYDNEY: result = "Sydney"; break; // case X_TOKYO: result = "Tokyo"; break; // case X_LONDON: result = "London"; break; // case X_NEW_YORK: result = "NewYork"; break; } // return result; }