/////////////////////////////////////////////////////// // // SaherElm IT Center MQL5 Library // --------------------------------------- // Name: XCATBEASignallerLib // Description: required Parsers for XCATBEA Signaller ... // // // Maintainer: // ------------ // Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) // ////////////////////////////////////////////////////// // // Global Properties ... #property library #property copyright "Copyright `023, SaherElm IT Center" #property link "https://www.saherelm.ir" #property version "1.00" #property strict // // Imports ... #include "../../Helpers/x-saherelm.x121.xcatb.helper.mq5" #include "../../Libraries/x-saherelm.common.lib.mq5" #include "../../Libraries/x-saherelm.x-poi.lib.mq5" #include "../../Libraries/x-saherelm.x-trade.lib.mq5" #include "../Libraries/xcatbea.lib.mq5" // // Definitions ... // struct XCATBEAStrategyConditions { // // Props ... // string symbol; ENUM_TIMEFRAMES period; // // Setup Props ... // double sl; double tp; double pivot; double point; double entry; double reward; string provider; // XTarget targets[]; // datetime time; datetime setupTime; datetime triggerTime; // XBoxZone pivotZone; ENUM_X_DIRECTION dir; XTriggerBlock triggerBlock; ENUM_X_POSITION_TYPES type; X121XCatbConditions conditions; // // Constructor ... XCATBEAStrategyConditions() { Clean(); } // // Tools ... /** * Cleaning Up ... */ void Clean() { // sl = 0; tp = 0; pivot = 0; point = 0; entry = 0; reward = 0; // symbol = NULL; period = NULL; provider = NULL; // time = NULL; setupTime = NULL; triggerTime = NULL; // Clean(targets); // pivotZone.Clean(); conditions.Clean(); triggerBlock.Clean(); // dir = X_DIRECTION_NONE; type = X_POSITION_TYPE_NONE; // ZeroMemory(this); } // // Signalling ... /** * Validate ... * * @return ( bool ) */ bool IsValid() { // bool result = false; // result = IsSpecifiedValid(symbol) && IsSpecifiedValid(period) && IsSpecifiedValid(time); // return result; } /** * Check Conditions Has Valid Bullish Signal ... * * @return ( bool ) */ bool HasBullishSignal() { // bool result = false; // result = (sl > 0 || tp > 0) && IsValid() && HasDirection(dir); if (!result) { return result; } // result = IsBullish(dir); // return result; } /** * Check Conditions Has Valid Bearish Signal ... * * @return ( bool ) */ bool HasBearishSignal() { // bool result = false; // result = (sl > 0 || tp > 0) && IsValid() && HasDirection(dir); if (!result) { return result; } // result = IsBearish(dir); // return result; } // // Setting Up and Triggering Up ... /** * Check Condition is Setting Up ... * * @param dir: ENUM_X_DIRECTION member, Setting Up Direction ... * * @return ( bool ) */ bool IsSetuped() { // bool result = false; // result = IsValid(setupTime) && HasDirection(dir); if (!result) { return result; } // return result; } /** * Calculate Setup Age ... * * @return ( int ) */ int GetSetupAge() { // int result = 0; // if (!IsSetuped()) { return result; } // result = (int)(TimeCurrent() - setupTime) / PeriodSeconds(period); // return result; } /** * Detect How we Can Trigger Signal ... * * @return ( bool ) */ bool CanTrigger() { // bool result = false; // result = // sl > 0 && IsValid(symbol) && IsValid(period) && IsValid(triggerTime) && type != X_POSITION_TYPE_ALL && type != X_POSITION_TYPE_NONE // ; // return result; } // }; /** * Converts Strategy Conditions to Signal ... */ bool ToSignal( XSignal &signal, XCATBEAStrategyConditions &conditions // ) { // bool result = false; // // Normalize Args ... signal.Clean(); // // Validate Args ... result = conditions.IsValid() && conditions.IsSetuped() && conditions.CanTrigger(); if (!result) { return result; } // // Do Converting ... signal.volume = 0.01; signal.tp = conditions.tp; signal.sl = conditions.sl; signal.entry = conditions.entry; signal.symbol = conditions.symbol; signal.period = conditions.period; signal.mode = X_ORDER_MODE_MARKET; signal.time = conditions.triggerTime; signal.provider = conditions.provider; signal.type = conditions.type == X_POSITION_TYPE_LONG ? POSITION_TYPE_BUY : POSITION_TYPE_SELL; signal.conditions = conditions .conditions .GenerateSummary( false, true, true, false // Ignore False Conditions ... ); Copy( conditions.targets, signal.targets // ); // // Validate Result ... result = signal.IsValid(); // return result; } /** * Detect Signal Zone based on Market Conditions ... * * @param helper: XCX121XCatbHelper instance pointer ... * @param barAnalyser: XCBarAnalyser instance pointer ... * @param conditions: X121XCatbConditions instance reference, hold signalling Conditions ... * @param signalZone: XBoxZone instance reference, hold Signal Zone ... * @param barIndex: int, Bar Index ... * @param loopback: int, Loopback for Market Conditions ... * * @return ( bool ) */ bool DetectSignalZone( XCX121XCatbHelper *helper, XCBarAnalyser *barAnalyser, X121XCatbConditions &conditions, XBoxZone &signalZone, int barIndex = 0, int loopback = 10 // ) { // bool result = false; // // Normalize Args ... signalZone.Clean(); conditions.Clean(); loopback = NormalizeInt(loopback, 0); barIndex = NormalizeInt(barIndex, 0); // // Validate Args ... result = helper != NULL && barAnalyser != NULL; if (!result) { return result; } // // Validate Result ... result = signalZone.IsValid(); // // Cleanup Resources ... // if (!result) { // signalZone.Clean(); conditions.Clean(); } // return result; } //