/////////////////////////////////////////////////////// // // SaherElm IT Center MQL5 Indicator // ------------------------------------------------- // Name: XOM1EA Lib // Description: Library for XOM1EA ... // // // Maintainer: // ------------ // Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) // ////////////////////////////////////////////////////// // // Global Properties ... #property library #property copyright "Copyright 2023, SaherElm IT Center" #property link "https://saherelm.ir" #property version "1.00" #property description "SaherElm Library for XOM1EA Signaller" #property strict // // Imports ... #include "../../Libraries/x-saherelm.common.lib.mq5" #include "../../Libraries/x-saherelm.x-poi.lib.mq5" // // Definitions ... // // Zone Creation Reason ... enum ENUM_XOM1_ZONE_REASON { X_OM1_ZONE_REASON_NONE, // NONE X_OM1_ZONE_REASON_PEAK, // PEAK X_OM1_ZONE_REASON_VALE, // VALE X_OM1_ZONE_REASON_FCOS, // FCOS X_OM1_ZONE_REASON_FCUS, // FCUS }; /** * Validate a Zone Creation Reason ... * * @param value: ENUM_XOM1_ZONE_REASON * * @return ( bool ) */ bool IsXValid(ENUM_XOM1_ZONE_REASON value) { // bool result = false; // result = value != X_OM1_ZONE_REASON_NONE; // return result; } /** * Converts a Zone Reason to String ... * * @param value: ENUM_XOM1_ZONE_REASON * * @return ( string ) */ string ToXString(ENUM_XOM1_ZONE_REASON value) { return EnumToString(value); } /** * Converts a Zone Reason to String ... * * @param value: ENUM_XOM1_ZONE_REASON * * @return ( string ) */ ENUM_XOM1_ZONE_REASON FromXString(string value) { // ENUM_XOM1_ZONE_REASON result = X_OM1_ZONE_REASON_NONE; // if (!IsSpecifiedValid(value)) { return result; } // if (value == ToXString(X_OM1_ZONE_REASON_NONE)) { result = X_OM1_ZONE_REASON_NONE; } else if (value == ToXString(X_OM1_ZONE_REASON_PEAK)) { result = X_OM1_ZONE_REASON_PEAK; } else if (value == ToXString(X_OM1_ZONE_REASON_VALE)) { result = X_OM1_ZONE_REASON_VALE; } else if (value == ToXString(X_OM1_ZONE_REASON_FCOS)) { result = X_OM1_ZONE_REASON_FCOS; } else if (value == ToXString(X_OM1_ZONE_REASON_FCUS)) { result = X_OM1_ZONE_REASON_FCUS; } // return result; } // // this is a Zone Which // we start Looking for // Signal Detecting ... struct XOM1Zone { // // Props ... // string symbol; // Symbol ENUM_TIMEFRAMES period; // Period string signaller; // Signaller Identifier datetime from; // Detection Time datetime to; // Lifetime ENUM_X_DIRECTION dir; // Direction ENUM_XOM1_ZONE_REASON reason; // Creation Reason double upper; // Upper Level double lower; // Lower Level double price; // Reason Price // // Constructor ... XOM1Zone() { Clean(); } // // Tools ... /** * Initialize ... * * @param _symbol: Symbol * @param _period: Period * @param _signaller: Signaller Identifier * @param _upper: Upper Value (PEAK) * @param _lower: Lower Value (VALE) * @param _price: Price (Changed Peak or Vale) * @param _dir: Direction * @param _reason: Creation Reason * @param _from: Detection Time * @param _to: Lifetime Time * * @return ( bool ) */ bool Init( string _symbol, ENUM_TIMEFRAMES _period, string _signaller, double _upper, double _lower, double _price, ENUM_X_DIRECTION _dir, ENUM_XOM1_ZONE_REASON _reason, datetime _from, datetime _to = NULL // ) { // to = _from; dir = _dir; from = _from; upper = _upper; lower = _lower; price = _price; symbol = _symbol; period = _period; reason = _reason; signaller = _signaller; // if (IsSpecifiedValid(_to)) { to = _to; } // bool result = IsValid(); if (!result) { Clean(); } // return result; } /** * Update Lifetime by Data ... * * @param _to: datetime */ void UpdateByDate(datetime _to) { // // Validate ... bool isValid = IsValid() && IsSpecifiedValid(_to) && _to > to; if (!isValid) { return; } // to = _to; } /** * Update Lifetime by BarIndex ... * * @param barIndex: int */ void UpdateByBarIndex(int barIndex) { // // Normalize ... if (barIndex <= 0) { barIndex = 0; } // if (!IsValid()) { return; } // datetime _to = GetBarTime( symbol, period, barIndex // ); if (!IsSpecifiedValid(_to)) { return; } // UpdateByDate(_to); } /** * Clean ... */ void Clean() { ZeroMemory(this); } /** * Validate ... * * @return ( bool ) */ bool IsValid() { // bool result = false; // result = // IsSpecifiedValid(symbol) && IsSpecifiedValid(period) && IsSpecifiedValid(signaller) && IsSpecifiedValid(from) && IsSpecifiedValid(to) && to >= from && HasDirection(dir) && IsXValid(reason) && upper > 0 && lower > 0 && price > 0 && upper > lower && price <= upper && price >= lower // ; // return result; } /** * Calculate Lifetime Age ... * * @return ( int ) */ int GetBarLife() { // int result = 0; // if (!IsValid()) { return result; } // int fromIDX = GetBarIndex( symbol, period, from // ); int toIDX = GetBarIndex( symbol, period, to // ); bool isValid = IsValidIndex(fromIDX) && IsValidIndex(toIDX); if (!isValid) { return result; } // result = MathAbs(fromIDX - toIDX); // return result; } /** * Check Zone is Bullish ... * * @return ( bool ) */ bool IsBullish() { return IsValid() && IsSpecifiedBullish(dir); } /** * Check Zone is Bearish ... * * @return ( bool ) */ bool IsBearish() { return IsValid() && IsSpecifiedBearish(dir); } /** * Converts to Box ... * * @param box: Dest * * @return ( bool ) */ bool ToBox(XBoxZone &box) { // bool result = false; // box.Clean(); result = IsValid(); if (!result) { return result; } // box.to = to; box.dir = dir; box.from = from; box.upper = upper; box.lower = lower; box.symbol = symbol; box.period = period; box.type = signaller; // result = box.IsValid(); if (!result) { box.Clean(); } // return result; } /** * Unique Identifier ... * * @return ( string ) */ string GetTag() { // string result = NULL; // result = "XOM1Zone_" + symbol + "_" + ToXString(period) + "_" + signaller + "_" + ToXString(dir) + "_" + ToXString(reason) + "_" + ToXString(TimeToSeconds(from)); // return result; } }; //