//+------------------------------------------------------------------+ //| x-saherelm.xpoi.test.ea.mq5 | //| SaherElm IT Center | //| https://www.saherelm.ir | //+------------------------------------------------------------------+ #property copyright "SaherElm IT Center" #property link "https://www.saherelm.ir" #property version "1.00" // #include "../Classes/x-saherelm.x-poi.class.mq5" #include "../Classes/x-saherelm.x-poi.drawer.class.mq5" #include "../Libraries/x-saherelm.x-poi.extensions.lib.mq5" #include "../Libraries/x-saherelm.x-poi.state.lib.mq5" // #include "../Classes/x-saherelm.x-bar.analyser.class.mq5" // // Global Variables ... // XCPOIDrawer *mPOIDrawer; // XCPOIDetector *mPOIDetector; XBarTracker mBarTracker; XCBarAnalyser *mBarAnalyser; // bool useDetector = true; bool useBarAnalyser = false; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { // mPOIDetector = new XCPOIDetector( _Symbol, _Period // ); // mPOIDrawer = new XCPOIDrawer(); // mBarAnalyser = new XCBarAnalyser(); // mBarTracker.Init( _Symbol, _Period // ); // return (INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { // // ZeroMemory(mPOIDrawer); // ZeroMemory(mPOIDetector); ZeroMemory(mBarAnalyser); } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { // DetectBarAnalyser(); // DetectPOIState(); } //+------------------------------------------------------------------+ //| Custom Functions | //+------------------------------------------------------------------+ /** * Detect POI(s) Using Bar Analyser Class ... */ void DetectBarAnalyser() { // if (!useBarAnalyser) { return; } // if (!mBarTracker.IsNewBar()) { return; } // XOHCL zBar; bool isInited = zBar.Init( _Symbol, _Period, 0 // ); if (!isInited) { // zBar.Clean(); return; } // XOHCL cBar; isInited = zBar.GetPreviousBar(cBar); if (!isInited) { // zBar.Clean(); cBar.Clean(); return; } // int rootIDX = -1; XOHCL selectedBar; ENUM_X_DIRECTION dir; // // Check Big Change in Price ... bool isBigChange = mBarAnalyser.IsSharp( zBar, // Bar ... dir, // Change Direction ... rootIDX, // Change Root IDX ... X_PRICE_CLOSE, // Price Change Type ... true, // Force Use Body for Range Calculation ... 1.0 // Range Extend Multiplier ... ); if (isBigChange) { Print("Big Price Change Detected: ", ToString(dir)); } // // Check Big Change in Price ... bool isSpike = mBarAnalyser.IsSpike( zBar, // Bar ... dir, // Change Direction ... rootIDX, // Root Index ... X_PRICE_CLOSE, // Price Change Type ... true, // Force Use Body for Range Calculation ... 1.0, // Range Extend Multiplier ... 3 // Same Bars ... ); if (isSpike) { Print("Spike Detected: ", ToString(dir)); } // // Check Doji Pattern ... bool isDoji = mBarAnalyser.IsDoji( cBar, dir // ); if (isDoji) { Print(ToString(dir), " Doji Detected ..."); } // // Check Hammer Pattern ... bool isHammer = mBarAnalyser.IsHammer( cBar, dir // ); if (isHammer) { Print(ToString(dir), " Hammer Detected ..."); } // // Check Engulf Pattern ... bool isEngulfed = mBarAnalyser.IsEngulfed( cBar, dir // ); if (isEngulfed) { Print(ToString(dir), " Engulfed Detected ..."); } // // Check Momentum Pattern ... bool isMomentum = mBarAnalyser.IsMomentum( cBar, dir // ); if (isMomentum) { Print(ToString(dir), " Momentum Detected ..."); } // // Check Pullback Pattern ... bool isPullback = mBarAnalyser.IsPullback( cBar, dir // ); if (isMomentum) { Print(ToString(dir), " Pullback Detected ..."); } // // Check Swing Pattern ... bool isSwing = mBarAnalyser.IsSwing( cBar, dir // ); if (isSwing) { Print(ToString(dir), " Swing Detected ..."); } // // Check Swing Pattern ... bool isRejected = mBarAnalyser.IsRejected( cBar, dir // ); if (isRejected) { Print(ToString(dir), " Rejected Detected ..."); } // // Check Support ... bool isSupport = mBarAnalyser.HasSupport( cBar, selectedBar // ); if (isSupport) { Print(ToString(dir), " Support Detected ..."); } // // Check Resistance ... bool isResistance = mBarAnalyser.HasResistance( cBar, selectedBar // ); if (isResistance) { Print(ToString(dir), " Resistance Detected ..."); } // // Check Fair Value Gap ... XOHCL toBar; XOHCL fromBar; bool hasFVG = mBarAnalyser.HasFairValueGap( zBar, fromBar, toBar, dir, 3 // ); if (hasFVG) { Print(ToString(dir), " FairValueGap Detected ..."); } // // Check Order Block ... bool hasOB = mBarAnalyser.HasOrderBlock( zBar, selectedBar, dir, true, true, true // ); if (hasOB) { Print(ToString(dir), " OrderBlock Detected ..."); } // // Cleanup Resources ... // zBar.Clean(); cBar.Clean(); } /** * Detect POI(s) Using POIDetector Class ... */ void DetectPOIState() { // if (!useDetector) { return; } // if (!mBarTracker.IsNewBar()) { return; } // ENUM_XPOI_EVENTS poiEvents[]; XPOIStateEvents poiEventNotifier; mPOIDetector.Update( poiEvents, 0 // ); poiEventNotifier.Init(poiEvents); // XPOIState state; mPOIDetector.GetState(state); // bool showBullishPOIs = true; bool showBearishPOIs = true; // XCBaseObject *stateObjects[]; mPOIDrawer.DrawState( state, stateObjects, // // Bullish ... showBullishPOIs && false, // SwingLows showBullishPOIs && false, // DemandZones showBullishPOIs && false, // SupportZones showBullishPOIs && false, // BullishSharps showBullishPOIs && false, // BullishSpikes showBullishPOIs && false, // BullishPullbacks showBullishPOIs && false, // BullishMomentums showBullishPOIs && false, // BullishRejections showBullishPOIs && false, // BullishOrderBlocks showBullishPOIs && false, // BullishFairValueGaps showBullishPOIs && false, // BullishConsolidationZones // // Bearish ... showBearishPOIs && false, // SwingHighs showBearishPOIs && false, // SupplyZones showBearishPOIs && false, // ResistanceZones showBearishPOIs && false, // BearishSharps showBearishPOIs && false, // BearishSpikes showBearishPOIs && false, // BearishPullbacks showBearishPOIs && false, // BearishMomentums showBearishPOIs && false, // BearishRejections showBearishPOIs && false, // BearishOrderBlocks showBearishPOIs && false, // BearishFairValueGaps showBearishPOIs && false // BearishConsolidationZones ); // Clean(poiEvents); poiEventNotifier.Clean(); } // //+------------------------------------------------------------------+