///////////////////////////////////////////////////////////////////
//
// SaherElm IT Center MQL5 XAU5 Signal Provider Indicators Library
// ----------------------------------------------------------------
//
// 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

//
// START Define Enums ...
//

//
enum ENUM_XAU5_SIGNAL_PROVIDERS
{
    //
    // XSP Expert Support Mechanism ...
    XSP,
    //
    // XTD ...
    XTD,
    //
    // XTAM ...
    XTAM,
    //
    // XSI ...
    XSI,
    //
    // XSTFI ...
    XSTFI,
    //
    // XOBDLH ...
    XOBDLH,
    //
    // XCHMACC ...
    XCHMACC,
    //
    // XCHMACMN ...
    XCHMACMN,
    //
    // XCHMACMX ...
    XCHMACMX,
};

//
// Represent Market Conditions ...
struct XAU5MarketConditions
{
    //
    // XTM ...
    bool isXTMPeak;
    bool isXTMVale;
    bool isXTMBullish;
    bool isXTMBearish;
    bool isXTMNeutural;
    bool isXTMEndBullish;
    bool isXTMEndBearish;
    bool isXTMStartBullish;
    bool isXTMStartBearish;
    bool isXTMEndBullishByNeutural;
    bool isXTMEndBearishByNeutural;
    bool isXTMStartBullishAfterNeutural;
    bool isXTMStartBearishAfterNeutural;

    //
    // XAMA ...
    bool isXAMAPeak;
    bool isXAMAVale;
    bool isXAMABullish;
    bool isXAMABearish;
    bool isXAMANeutural;
    bool isXAMAEndBullish;
    bool isXAMAEndBearish;
    bool isXAMAStartBullish;
    bool isXAMAStartBearish;
    bool isXAMAEndBullishByNeutural;
    bool isXAMAEndBearishByNeutural;
    bool isXAMAStartBullishAfterNeutural;
    bool isXAMAStartBearishAfterNeutural;

    //
    // XLH ...
    bool isXLHHHIncreased;
    bool isXLHHHDecreased;
    bool isXLHLLIncreased;
    bool isXLHLLDecreased;
    bool isXLHLowAttachedLL;
    bool isXLHHighAttachedHH;
    bool isXLHHHSameInLength;
    bool isXLHLLSameInLength;
    bool isXLHPriceOverSignal;
    bool isXLHPriceUnderSignal;
    bool isXLHPriceInSignalRange;
    bool isXLHPriceCrossedOverSignal;
    bool isXLHPriceCrossedUnderSignal;

    //
    // XTD ...
    bool isXTDSignalPeak;
    bool isXTDSignalVale;
    bool isXTDBullishPeak;
    bool isXTDBullishVale;
    bool isXTDBearishPeak;
    bool isXTDBearishVale;
    bool isXTDBullOverBear;
    bool isXTDBullUnderBear;
    bool isXTDSignalOverBear;
    bool isXTDSignalUnderBear;
    bool isXTDBullCrossedOverBear;
    bool isXTDBullCrossedUnderBear;
    bool isXTDSignalCrossedOverBear;
    bool isXTDSignalCrossedUnderBear;

    //
    // XFI ...
    bool isXFIPeak;
    bool isXFIVale;
    bool isXFICrossedOverZero;
    bool isXFIOverZero;
    bool isXFICrossedUnderZero;
    bool isXFIUnderZero;

    //
    // XTS ...
    bool isXTSAllSame;
    bool isXTSCurrentMin;
    bool isXTSCurrentMax;
    bool isXTSCurrentOverFarest;
    bool isXTSCurrentOverNearest;
    bool isXTSCurrentOverMediest;
    bool isXTSCurrentUnderFarest;
    bool isXTSCurrentUnderNearest;
    bool isXTSCurrentUnderMediest;
    bool isXTSCurrentCrossedOverFarest;
    bool isXTSCurrentCrossedOverNearest;
    bool isXTSCurrentCrossedOverMediest;
    bool isXTSCurrentCrossedUnderFarest;
    bool isXTSCurrentCrossedUnderNearest;
    bool isXTSCurrentCrossedUnderMediest;

    //
    // XRSI ...
    bool isXRSIPeak;
    bool isXRSIVale;
    bool isXRSICrossedOverLongExit;
    bool isXRSICrossedOverLongEntry;
    bool isXRSICrossedUnderShortExit;
    bool isXRSICrossedUnderShortEntry;

    //
    // XOBD ...
    bool isXOBDSwingLow;
    bool isXOBDSwingHigh;

    //
    // XCHLH ...
    //
    bool isXCHLHSameHHs;
    bool isXCHLHSameLLs;
    //
    bool isXCHLHSCMCHHSame;
    bool isXCHLHSCMCLLSame;
    //
    bool isXCHLHSCLCHHSame;
    bool isXCHLHSCLCLLSame;
    //
    bool isXCHLHMCLCHHSame;
    bool isXCHLHMCLCLLSame;
    //
    bool isXCHLHMCOnTopOfLC;
    bool isXCHLHMCInBottomOfLC;

    //
    // XCHMA ...
    //
    bool isXCHMASCOverMax;
    bool isXCHMASCOverMin;
    bool isXCHMASCUnderMax;
    bool isXCHMASCUnderMin;
    //
    bool isXCHMASCCrossedOverMax;
    bool isXCHMASCCrossedUnderMax;
    bool isXCHMASCCrossedOverMin;
    bool isXCHMASCCrossedUnderMin;
    //
    bool isXCHMASCPeak;
    bool isXCHMASCVale;
    bool isXCHMASCTrendsUp;
    bool isXCHMASCTrendsDown;
    bool isXCHMASCFastOverSlow;
    bool isXCHMASCFastUnderSlow;
    bool isXCHMASCFastCrossedOverSlow;
    bool isXCHMASCFastCrossedUnderSlow;
    //
    bool isXCHMAMCPeak;
    bool isXCHMAMCVale;
    bool isXCHMAMCTrendsUp;
    bool isXCHMAMCTrendsDown;
    bool isXCHMAMCFastOverSlow;
    bool isXCHMAMCFastUnderSlow;
    bool isXCHMAMCFastCrossedOverSlow;
    bool isXCHMAMCFastCrossedUnderSlow;
    //
    bool isXCHMALCPeak;
    bool isXCHMALCVale;
    bool isXCHMALCTrendsUp;
    bool isXCHMALCTrendsDown;
    bool isXCHMALCFastOverSlow;
    bool isXCHMALCFastUnderSlow;
    bool isXCHMALCFastCrossedOverSlow;
    bool isXCHMALCFastCrossedUnderSlow;
};

//
// END Define Enums ...
//

//
// Include Provider Inputs ...
#include "x-saherelm.xau5.provider.inputs.lib.mq5"

//
// Signallers ...
input group "XAU5 Signallers";

//
// XTD ...
input group "XAU5 XTD Signaller";
input bool xAU5XTDEnableSignaller = true; // Enable Signaller
// input bool xAU5XTDEnableTPSL = false;       // Enable TP/SL
input bool xAU5XTDAllowLongSignals = true;  // Enable Long Signals
input bool xAU5XTDAllowShortSignals = true; // Enable Short Signals

//
// XTAM ...
input group "XAU5 XTAM Signaller";
input bool xAU5XTAMEnableSignaller = true; // Enable Signaller
// input bool xAU5XTAMEnableTPSL = false;       // Enable TP/SL
input bool xAU5XTAMAllowLongSignals = true;  // Enable Long Signals
input bool xAU5XTAMAllowShortSignals = true; // Enable Short Signals

//
// XSI ...
input group "XAU5 XSI Signaller";
input bool xAU5XSIEnableSignaller = true; // Enable Signaller
// input bool xAU5SIXEnableTPSL = false;       // Enable TP/SL
input bool xAU5XSIAllowLongSignals = true;  // Enable Long Signals
input bool xAU5XSIAllowShortSignals = true; // Enable Short Signals

//
// XSTFI ...
input group "XAU5 XSTFI Signaller";
input bool xAU5XSTFIEnableSignaller = true; // Enable Signaller
// input bool xAU5XSTFIEnableTPSL = false;       // Enable TP/SL
input bool xAU5XSTFIAllowLongSignals = true;  // Enable Long Signals
input bool xAU5XSTFIAllowShortSignals = true; // Enable Short Signals

//
// XOBDLH ...
input group "XAU5 XOBDLH Signaller";
input bool xAU5XOBDLHEnableSignaller = true; // Enable Signaller
// input bool xAU5XOBDLHEnableTPSL = false;       // Enable TP/SL
input bool xAU5XOBDLHAllowLongSignals = true;  // Enable Long Signals
input bool xAU5XOBDLHAllowShortSignals = true; // Enable Short Signals

//
// XCHMACC ...
input group "XAU5 XCHMACC Signaller";
input bool xAU5XCHMACCEnableSignaller = true; // Enable Signaller
// input bool xAU5XCHMACCEnableTPSL = false;       // Enable TP/SL
input bool xAU5XCHMACCAllowLongSignals = true;  // Enable Long Signals
input bool xAU5XCHMACCAllowShortSignals = true; // Enable Short Signals

//
// XCHMACMX ...
input group "XAU5 XCHMACMX Signaller";
input bool xAU5XCHMACMXEnableSignaller = true; // Enable Signaller
// input bool xAU5XCHMACMXEnableTPSL = false;       // Enable TP/SL
input bool xAU5XCHMACMXAllowLongSignals = true;  // Enable Long Signals
input bool xAU5XCHMACMXAllowShortSignals = true; // Enable Short Signals

//
// XCHMACMN ...
input group "XAU5 XCHMACMN Signaller";
input bool xAU5XCHMACMNEnableSignaller = true; // Enable Signaller
// input bool xAU5XCHMACMNEnableTPSL = false;       // Enable TP/SL
input bool xAU5XCHMACMNAllowLongSignals = true;  // Enable Long Signals
input bool xAU5XCHMACMNAllowShortSignals = true; // Enable Short Signals

//
// Imports all Indicators Helper here ...
// input group "XAU5 Provider Indicators";

//
#include "../Helpers/x-saherelm.xtm.indicator.helper.lib.mq5"
#include "../Helpers/x-saherelm.xama.indicator.helper.lib.mq5"
#include "../Helpers/x-saherelm.xlh.indicator.helper.lib.mq5"
#include "../Helpers/x-saherelm.xtd.oscillator.helper.lib.mq5"
#include "../Helpers/x-saherelm.xfi.oscillator.helper.lib.mq5"
#include "../Helpers/x-saherelm.xts.oscillator.helper.lib.mq5"
#include "../Helpers/x-saherelm.xobd.indicator.helper.lib.mq5"
#include "../Helpers/x-saherelm.xrsi.oscillator.helper.lib.mq5"
#include "../Helpers/x-saherelm.xchlh.oscillator.helper.lib.mq5"
#include "../Helpers/x-saherelm.xchma.oscillator.helper.lib.mq5"

//
bool xAU5IsTestMode = true;
int xAU5MaxLengthOfInputs = 0;
int xAU5CalculatedBars = 0;

//
// Signaller Variables ...
//
// XTD ...
bool xAU5MXTDEnableSignaller = xAU5XTDEnableSignaller;
// bool xAU5MXTDEnableTPSL = xAU5XTDEnableTPSL;
bool xAU5MXTDAllowLongSignals = xAU5XTDAllowLongSignals;
bool xAU5MXTDAllowShortSignals = xAU5XTDAllowShortSignals;

//
// XTAM ...
bool xAU5MXTAMEnableSignaller = xAU5XTAMEnableSignaller;
// bool xAU5MXTAMEnableTPSL = xAU5XTAMEnableTPSL;
bool xAU5MXTAMAllowLongSignals = xAU5XTAMAllowLongSignals;
bool xAU5MXTAMAllowShortSignals = xAU5XTAMAllowShortSignals;

//
// XSI ...
bool xAU5MXSIEnableSignaller = xAU5XSIEnableSignaller;
// bool xAU5MSIXEnableTPSL = xAU5SIXEnableTPSL;
bool xAU5MXSIAllowLongSignals = xAU5XSIAllowLongSignals;
bool xAU5MXSIAllowShortSignals = xAU5XSIAllowShortSignals;

//
// XSTFI ...
bool xAU5MXSTFIEnableSignaller = xAU5XSTFIEnableSignaller;
// bool xAU5MXSTFIEnableTPSL = xAU5XSTFIEnableTPSL;
bool xAU5MXSTFIAllowLongSignals = xAU5XSTFIAllowLongSignals;
bool xAU5MXSTFIAllowShortSignals = xAU5XSTFIAllowShortSignals;

//
// XOBDLH ...
bool xAU5MXOBDLHEnableSignaller = xAU5XOBDLHEnableSignaller;
// bool xAU5MXOBDLHEnableTPSL = xAU5XOBDLHEnableTPSL;
bool xAU5MXOBDLHAllowLongSignals = xAU5XOBDLHAllowLongSignals;
bool xAU5MXOBDLHAllowShortSignals = xAU5XOBDLHAllowShortSignals;

//
// XCHMACC ...
bool xAU5MXCHMACCEnableSignaller = xAU5XCHMACCEnableSignaller;
// bool xAU5MXCHMACCEnableTPSL = xAU5XCHMACCEnableTPSL;
bool xAU5MXCHMACCAllowLongSignals = xAU5XCHMACCAllowLongSignals;
bool xAU5MXCHMACCAllowShortSignals = xAU5XCHMACCAllowShortSignals;

//
// XCHMAMX ...
bool xAU5MXCHMACMXEnableSignaller = xAU5XCHMACMXEnableSignaller;
// bool xAU5MXCHMACMXEnableTPSL = xAU5XCHMACMXEnableTPSL;
bool xAU5MXCHMACMXAllowLongSignals = xAU5XCHMACMXAllowLongSignals;
bool xAU5MXCHMACMXAllowShortSignals = xAU5XCHMACMXAllowShortSignals;

//
// XCHMAMN ...
bool xAU5MXCHMACMNEnableSignaller = xAU5XCHMACMNEnableSignaller;
// bool xAU5MXCHMACMNEnableTPSL = xAU5XCHMACMNEnableTPSL;
bool xAU5MXCHMACMNAllowLongSignals = xAU5XCHMACMNAllowLongSignals;
bool xAU5MXCHMACMNAllowShortSignals = xAU5XCHMACMNAllowShortSignals;

//
// Funded Next Resolve Guards ...
bool isXAU5OnFundedNext = true;

//
// Here we Define some Global Market Variables to Analyse MArket Conditions
// using them at each time ...
XAU5MarketConditions xAU5Conditions = {};

//
// Validate Indicators Inputs ...
bool XAU5ValidateIndicatorsInputs()
{
    //
    bool result = false;

    //
    // XTM ...
    result = XTMValidateInputs();
    if (!result)
    {
        return result;
    }

    //
    // XAMA ...
    result = XAMAValidateInputs();
    if (!result)
    {
        return result;
    }

    //
    // XTD ...
    result = XTDValidateInputs();
    if (!result)
    {
        return result;
    }

    //
    // XFI ...
    result = XFIValidateInputs();
    if (!result)
    {
        return result;
    }

    //
    // XTS ...
    result = XTSValidateInputs();
    if (!result)
    {
        return result;
    }

    //
    // XOBD ...
    result = XOBDValidateInputs();
    if (!result)
    {
        return result;
    }

    //
    // XLH ...
    result = XLHValidateInputs();
    if (!result)
    {
        return result;
    }

    //
    // XRSI ...
    result = XRSIValidateInputs();
    if (!result)
    {
        return result;
    }

    //
    // XCHLH ...
    result = XCHLHValidateInputs();
    if (!result)
    {
        return result;
    }

    //
    // XCHMA ...
    result = XCHMAValidateInputs();
    if (!result)
    {
        return result;
    }

    //
    result = true;

    //
    return result;
}

//
// Init Indicators ...
bool XAU5InitIndicators()
{
    //
    bool result = false;

    //
    // Make it Enable when we need to Log Market Conditions ...
    // xAU5IsTestMode = false; // IsRunningOnTestMode();

    //
    // Check and Calculate Max Length in Inputs ...
    //

    //
    // XTM ...
    xAU5MaxLengthOfInputs = MathMax(
        xTMMaPeriod,
        xAU5NumberOfItemsPerTick);

    //
    // XAMA ...
    xAU5MaxLengthOfInputs = MathMax(
        xAMALength,
        xAU5NumberOfItemsPerTick);
    xAU5MaxLengthOfInputs = MathMax(
        xAMAFastEMA,
        xAU5NumberOfItemsPerTick);
    xAU5MaxLengthOfInputs = MathMax(
        xAMASlowEMA,
        xAU5NumberOfItemsPerTick);

    //
    // XLH ...
    xAU5MaxLengthOfInputs = MathMax(
        xLHLength,
        xAU5NumberOfItemsPerTick);

    //
    // XTD ...
    xAU5MaxLengthOfInputs = MathMax(
        xTDLength,
        xAU5MaxLengthOfInputs);

    //
    // XFI ...
    xAU5MaxLengthOfInputs = MathMax(
        xFILength,
        xAU5MaxLengthOfInputs);

    //
    // XRSI ...
    xAU5MaxLengthOfInputs = MathMax(
        xRSILength,
        xAU5MaxLengthOfInputs);

    //
    // XOBD ...
    xAU5MaxLengthOfInputs = MathMax(
        xOBDLength,
        xAU5MaxLengthOfInputs);

    //
    // XCHLH ...
    xAU5MaxLengthOfInputs = MathMax(
        xCHLHLcLength,
        xAU5MaxLengthOfInputs);
    xAU5MaxLengthOfInputs = MathMax(
        xCHLHMcLength,
        xAU5MaxLengthOfInputs);
    xAU5MaxLengthOfInputs = MathMax(
        xCHLHScLength,
        xAU5MaxLengthOfInputs);

    //
    // XCHMA ...
    xAU5MaxLengthOfInputs = MathMax(
        xCHMAScFastLength,
        xAU5MaxLengthOfInputs);
    xAU5MaxLengthOfInputs = MathMax(
        xCHMAScSlowLength,
        xAU5MaxLengthOfInputs);
    xAU5MaxLengthOfInputs = MathMax(
        xCHMAMcFastLength,
        xAU5MaxLengthOfInputs);
    xAU5MaxLengthOfInputs = MathMax(
        xCHMAMcSlowLength,
        xAU5MaxLengthOfInputs);
    xAU5MaxLengthOfInputs = MathMax(
        xCHMALcFastLength,
        xAU5MaxLengthOfInputs);
    xAU5MaxLengthOfInputs = MathMax(
        xCHMALcSlowLength,
        xAU5MaxLengthOfInputs);

    //
    // Validate Indicators Inputs before Initialization ...
    result = XAU5ValidateIndicatorsInputs();
    if (!result)
    {
        return result;
    }

    //
    // Validate Signallers ...

    //
    // XTD ...
    bool isXTDEnable =
        xAU5XTDEnableSignaller &&
        (xAU5XTDAllowLongSignals ||
         xAU5XTDAllowShortSignals);

    //
    // XTAM ...
    bool isXTAMEnable =
        xAU5XTAMEnableSignaller &&
        (xAU5XTAMAllowLongSignals ||
         xAU5XTAMAllowShortSignals);

    //
    // XSI ...
    bool isXSIEnable =
        xAU5XSIEnableSignaller &&
        (xAU5XSIAllowLongSignals ||
         xAU5XSIAllowShortSignals);

    //
    // XSTFI ...
    bool isXSTFIEnable =
        xAU5XSTFIEnableSignaller &&
        (xAU5XSTFIAllowLongSignals ||
         xAU5XSTFIAllowShortSignals);

    //
    // XOBDLH ...
    bool isXOBDLHEnable =
        xAU5XOBDLHEnableSignaller &&
        (xAU5XOBDLHAllowLongSignals ||
         xAU5XOBDLHAllowShortSignals);

    //
    // XCHMACC ...
    bool isXCHMACCEnable =
        xAU5XCHMACCEnableSignaller &&
        (xAU5XCHMACCAllowLongSignals ||
         xAU5XCHMACCAllowShortSignals);

    //
    // XCHMACMX ...
    bool isXCHMACMXEnable =
        xAU5XCHMACMXEnableSignaller &&
        (xAU5XCHMACMXAllowLongSignals ||
         xAU5XCHMACMXAllowShortSignals);

    //
    // XCHMACMN ...
    bool isXCHMACMNEnable =
        xAU5XCHMACMNEnableSignaller &&
        (xAU5XCHMACMNAllowLongSignals ||
         xAU5XCHMACMNAllowShortSignals);

    //
    bool hasSignaller =
        //
        isXTDEnable ||
        isXTAMEnable ||
        isXSIEnable ||
        isXSTFIEnable ||
        isXOBDLHEnable ||
        isXCHMACCEnable ||
        isXCHMACMXEnable ||
        isXCHMACMNEnable
        //
        ;
    result = hasSignaller;
    if (!result)
    {
        //
        LogMessage("XAU5 doesn't enable any Signaller ...");

        //
        return result;
    }

    //
    // Initialize Indicator/Oscillator Handlers ...
    ResetLastError();

    //
    // XTM Init ...
    result = XTMInitHandlers();
    if (!result)
    {
        return result;
    }

    //
    // XAMA Init ...
    result = XAMAInitHandlers();
    if (!result)
    {
        return result;
    }

    //
    // XLH Init ...
    result = XLHInitHandlers();
    if (!result)
    {
        return result;
    }

    //
    // XTD Init ...
    result = XTDInitHandlers();
    if (!result)
    {
        return result;
    }

    //
    // XFI Init ...
    result = XFIInitHandlers();
    if (!result)
    {
        return result;
    }

    //
    // XTS Init ...
    result = XTSInitHandlers();
    if (!result)
    {
        return result;
    }

    //
    // XRSI Init ...
    result = XRSIInitHandlers();
    if (!result)
    {
        return result;
    }

    //
    // XOBD Init ...
    result = XOBDInitHandlers();
    if (!result)
    {
        return result;
    }

    //
    // XCLH Init ...
    result = XCHLHInitHandlers();
    if (!result)
    {
        return result;
    }

    //
    // XCHMA Init ...
    result = XCHMAInitHandlers();
    if (!result)
    {
        return result;
    }

    //
    result = true;

    //
    return result;
}

//
// Release Indicators ...
void XAU5ReleaseIndicators()
{
    //
    // Release Handlers ...
    XTMReleaseHandlers();
    XAMAReleaseHandlers();
    XLHReleaseHandlers();
    XTDReleaseHandlers();
    XFIReleaseHandlers();
    XTSReleaseHandlers();
    XRSIReleaseHandlers();
    XOBDReleaseHandlers();
    XCHMAReleaseHandlers();
    XCHLHReleaseHandlers();
}

//
// Handle Reading Buffers ...
void XAU5HandleReadingBuffers()
{
    //
    // Reading Calculated Bars for a Simple Handler ...
    xAU5CalculatedBars = BarsCalculated(xTMHandler);

    //
    // Read Indicators Buffers ...
    XTMReadBuffers(xAU5NumberOfItemsPerTick);
    XAMAReadBuffers(xAU5NumberOfItemsPerTick);
    XLHReadBuffers(xAU5NumberOfItemsPerTick);
    XTDReadBuffers(xAU5NumberOfItemsPerTick);
    XFIReadBuffers(xAU5NumberOfItemsPerTick);
    XTSReadBuffers(xAU5NumberOfItemsPerTick);
    XRSIReadBuffers(xAU5NumberOfItemsPerTick);
    XOBDReadBuffers(xAU5NumberOfItemsPerTick);
    XCHMAReadBuffers(xAU5NumberOfItemsPerTick);
    XCHLHReadBuffers(xAU5NumberOfItemsPerTick);

    //
    XAU5ReadConditions();
}

//
//
// START Combination Functions ...
//
//

//
// Can Open Long Trade ...
// this is a Function will Check all market Conditions and get all
// Strategy requirement Verifications for Long Signals ...
bool XAU5CanOpenLongTrade(
    XProvidedSignal &info // Retrieve Signal Additional Info on this Object
)
{
    //
    bool result = false;

    //
    info.tp = 0;
    info.sl = 0;
    ArrayResize(
        info.signallers,
        0);

    //
    bool hasSignal = XAU5HasLongSignal(info);

    //
    result =
        //
        hasSignal
        //
        ;

    //
    if (result)
    {
        XAU5ClearConditions();
    }

    //
    return result;
}

//
// Can Close Long Trade ...
// this is a Function will Check all market Conditions and get all
// Strategy requirement Verifications for Long Signals ...
bool XAU5CanCloseLongTrade()
{
    //
    bool result = false;

    //
    return result;
}

//
// Can Open Short Trade ...
// this is a Function will Check all market Conditions and get all
// Strategy requirement Verifications for Short Signals ...
bool XAU5CanOpenShortTrade(
    XProvidedSignal &info // Retrieve Signal Additional Info on this Object
)
{
    //
    bool result = false;

    //
    info.tp = 0;
    info.sl = 0;
    ArrayResize(
        info.signallers,
        0);

    //
    bool hasSignal = XAU5HasShortSignal(info);

    //
    result =
        //
        hasSignal
        //
        ;

    //
    if (result)
    {
        XAU5ClearConditions();
    }

    //
    return result;
}

//
// Can Close Short Trade ...
// this is a Function will Check all market Conditions and get all
// Strategy requirement Verifications for Short Signals ...
bool XAU5CanCloseShortTrade()
{
    //
    bool result = false;

    //
    return result;
}

//
//
// END Combination Functions ...
//
//

//
//
// START Combination Signaling ...
//
//

//
// Read All Globally Required Conditions ...
void XAU5ReadConditions()
{
    //
    XAU5ClearConditions();

    //
    xAU5Conditions = XAU5GenerateMarketConditions(1);
}

//
// Cleanup Conditions ...
void XAU5ClearConditions()
{
    //
    XAU5MarketConditions mConditions = {};

    //
    xAU5Conditions = mConditions;
}

//
// Generate Merket Conditions for Specified Bar Index ...
XAU5MarketConditions XAU5GenerateMarketConditions(
    int bar_index = 1 // Specified Bar Index ...
)
{
    //
    XAU5MarketConditions mConditions = {};

    //
    // XTM ...
    mConditions.isXTMPeak = XTMIsPeak(bar_index);
    mConditions.isXTMVale = XTMIsVale(bar_index);
    mConditions.isXTMBullish = XTMIsBullish(bar_index);
    mConditions.isXTMBearish = XTMIsBearish(bar_index);
    mConditions.isXTMNeutural = XTMIsNeutural(bar_index);
    mConditions.isXTMEndBullish = XTMIsEndBullish(bar_index);
    mConditions.isXTMEndBearish = XTMIsEndBearish(bar_index);
    mConditions.isXTMStartBullish = XTMIsStartBullish(bar_index);
    mConditions.isXTMStartBearish = XTMIsStartBearish(bar_index);
    mConditions.isXTMEndBullishByNeutural = XTMIsEndBullishByNeutural(bar_index);
    mConditions.isXTMEndBearishByNeutural = XTMIsEndBearishByNeutural(bar_index);
    mConditions.isXTMStartBullishAfterNeutural = XTMIsStartBullishAfterNeutural(bar_index);
    mConditions.isXTMStartBearishAfterNeutural = XTMIsStartBearishAfterNeutural(bar_index);

    //
    // XAMA ...
    mConditions.isXAMAPeak = XAMAIsPeak(bar_index);
    mConditions.isXAMAVale = XAMAIsVale(bar_index);
    mConditions.isXAMABullish = XAMAIsBullish(bar_index);
    mConditions.isXAMABearish = XAMAIsBearish(bar_index);
    mConditions.isXAMANeutural = XAMAIsNeutural(bar_index);
    mConditions.isXAMAEndBullish = XAMAIsEndBullish(bar_index);
    mConditions.isXAMAEndBearish = XAMAIsEndBearish(bar_index);
    mConditions.isXAMAStartBullish = XAMAIsStartBullish(bar_index);
    mConditions.isXAMAStartBearish = XAMAIsStartBearish(bar_index);
    mConditions.isXAMAEndBullishByNeutural = XAMAIsEndBullishByNeutural(bar_index);
    mConditions.isXAMAEndBearishByNeutural = XAMAIsEndBearishByNeutural(bar_index);
    mConditions.isXAMAStartBullishAfterNeutural = XAMAIsStartBullishAfterNeutural(bar_index);
    mConditions.isXAMAStartBearishAfterNeutural = XAMAIsStartBearishAfterNeutural(bar_index);

    //
    // XLH ...
    mConditions.isXLHHHIncreased = XLHIsHHIncreased(bar_index);
    mConditions.isXLHHHDecreased = XLHIsHHDecreased(bar_index);
    mConditions.isXLHLLIncreased = XLHIsLLIncreased(bar_index);
    mConditions.isXLHLLDecreased = XLHIsLLDecreased(bar_index);
    mConditions.isXLHLowAttachedLL = XLHIsLowAttachedLL(bar_index);
    mConditions.isXLHHighAttachedHH = XLHIsHighAttachedHH(bar_index);
    mConditions.isXLHHHSameInLength = XLHIsHHSameInLength(bar_index);
    mConditions.isXLHLLSameInLength = XLHIsLLSameInLength(bar_index);
    mConditions.isXLHPriceOverSignal = XLHIsPriceOverSignal(bar_index);
    mConditions.isXLHPriceUnderSignal = XLHIsPriceUnderSignal(bar_index);
    mConditions.isXLHPriceInSignalRange = XLHIsPriceInSignalRange(bar_index);
    mConditions.isXLHPriceCrossedOverSignal = XLHIsPriceCrossedOverSignal(bar_index);
    mConditions.isXLHPriceCrossedUnderSignal = XLHIsPriceCrossedUnderSignal(bar_index);

    //
    // XTD ...
    mConditions.isXTDSignalPeak = XTDIsSignalPeak(bar_index);
    mConditions.isXTDSignalVale = XTDIsSignalVale(bar_index);
    mConditions.isXTDBullishPeak = XTDIsBullishPeak(bar_index);
    mConditions.isXTDBullishVale = XTDIsBullishVale(bar_index);
    mConditions.isXTDBearishPeak = XTDIsBearishPeak(bar_index);
    mConditions.isXTDBearishVale = XTDIsBearishVale(bar_index);
    mConditions.isXTDBullOverBear = XTDIsBullOverBear(bar_index);
    mConditions.isXTDBullUnderBear = XTDIsBullUnderBear(bar_index);
    mConditions.isXTDSignalOverBear = XTDIsSignalOverBear(bar_index);
    mConditions.isXTDSignalUnderBear = XTDIsSignalUnderBear(bar_index);
    mConditions.isXTDBullCrossedOverBear = XTDIsBullCrossedOverBear(bar_index);
    mConditions.isXTDBullCrossedUnderBear = XTDIsBullCrossedUnderBear(bar_index);
    mConditions.isXTDSignalCrossedOverBear = XTDIsSignalCrossedOverBear(bar_index);
    mConditions.isXTDSignalCrossedUnderBear = XTDIsSignalCrossedUnderBear(bar_index);

    //
    // XFI ...
    mConditions.isXFIPeak = XFIIsPeak(bar_index);
    mConditions.isXFIVale = XFIIsVale(bar_index);
    mConditions.isXFIOverZero = XFIIsOverZero(bar_index);
    mConditions.isXFIUnderZero = XFIIsUnderZero(bar_index);
    mConditions.isXFICrossedOverZero = XFIIsCrossedOverZero(bar_index);
    mConditions.isXFICrossedUnderZero = XFIIsCrossedUnderZero(bar_index);

    //
    // XTS ...
    mConditions.isXTSAllSame = XTSIsAllSame(bar_index);
    mConditions.isXTSCurrentMin = XTSIsCurrentMin(bar_index);
    mConditions.isXTSCurrentMax = XTSIsCurrentMax(bar_index);
    mConditions.isXTSCurrentOverFarest = XTSIsCurrentOverFarest(bar_index);
    mConditions.isXTSCurrentOverNearest = XTSIsCurrentOverNearest(bar_index);
    mConditions.isXTSCurrentOverMediest = XTSIsCurrentOverMediest(bar_index);
    mConditions.isXTSCurrentUnderFarest = XTSIsCurrentUnderFarest(bar_index);
    mConditions.isXTSCurrentUnderNearest = XTSIsCurrentUnderNearest(bar_index);
    mConditions.isXTSCurrentUnderMediest = XTSIsCurrentUnderMediest(bar_index);
    mConditions.isXTSCurrentCrossedOverFarest = XTSIsCurrentCrossedOverFarest(bar_index);
    mConditions.isXTSCurrentCrossedOverNearest = XTSIsCurrentCrossedOverNearest(bar_index);
    mConditions.isXTSCurrentCrossedOverMediest = XTSIsCurrentCrossedOverMediest(bar_index);
    mConditions.isXTSCurrentCrossedUnderFarest = XTSIsCurrentCrossedUnderFarest(bar_index);
    mConditions.isXTSCurrentCrossedUnderNearest = XTSIsCurrentCrossedUnderNearest(bar_index);
    mConditions.isXTSCurrentCrossedUnderMediest = XTSIsCurrentCrossedUnderMediest(bar_index);

    //
    // XRSI ...
    mConditions.isXRSIPeak = XRSIIsPeak(bar_index);
    mConditions.isXRSIVale = XRSIIsVale(bar_index);
    mConditions.isXRSICrossedOverLongExit = XRSIIsCrossedOverLongExit(bar_index);
    mConditions.isXRSICrossedOverLongEntry = XRSIIsCrossedOverLongEntry(bar_index);
    mConditions.isXRSICrossedUnderShortExit = XRSIIsCrossedUnderShortExit(bar_index);
    mConditions.isXRSICrossedUnderShortEntry = XRSIIsCrossedUnderShortEntry(bar_index);

    //
    // XOBD ...
    mConditions.isXOBDSwingLow = XOBDIsSwingLow(bar_index);
    mConditions.isXOBDSwingHigh = XOBDIsSwingHigh(bar_index);

    //
    // XCHLH ...
    //
    mConditions.isXCHLHSameHHs = XCHLHIsSameHHs(bar_index);
    mConditions.isXCHLHSameLLs = XCHLHIsSameLLs(bar_index);
    //
    mConditions.isXCHLHSCMCHHSame = XCHLHIsMCSCHasSameHH(bar_index);
    mConditions.isXCHLHSCMCLLSame = XCHLHIsMCSCHasSameLL(bar_index);
    //
    mConditions.isXCHLHSCLCHHSame = XCHLHIsLCSCHasSameHH(bar_index);
    mConditions.isXCHLHSCLCLLSame = XCHLHIsLCSCHasSameLL(bar_index);
    //
    mConditions.isXCHLHMCLCHHSame = XCHLHIsLCMCHasSameHH(bar_index);
    mConditions.isXCHLHMCLCLLSame = XCHLHIsLCMCHasSameLL(bar_index);
    //
    mConditions.isXCHLHMCOnTopOfLC = XCHLHIsMCOnTopOfLC(bar_index);
    mConditions.isXCHLHMCInBottomOfLC = XCHLHIsMCInBottomOfLC(bar_index);

    //
    // XCHMA ...
    //
    mConditions.isXCHMASCOverMax = XCHMAIsSCOverMax(bar_index);
    mConditions.isXCHMASCOverMin = XCHMAIsSCOverMin(bar_index);
    mConditions.isXCHMASCUnderMax = XCHMAIsSCUnderMax(bar_index);
    mConditions.isXCHMASCUnderMin = XCHMAIsSCUnderMin(bar_index);
    //
    mConditions.isXCHMASCCrossedOverMax = XCHMAIsSCCrossedOverMax(bar_index);
    mConditions.isXCHMASCCrossedUnderMax = XCHMAIsSCCrossedUnderMax(bar_index);
    mConditions.isXCHMASCCrossedOverMin = XCHMAIsSCCrossedOverMin(bar_index);
    mConditions.isXCHMASCCrossedUnderMin = XCHMAIsSCCrossedUnderMin(bar_index);
    //
    mConditions.isXCHMASCPeak = XCHMAIsSCPeak(bar_index);
    mConditions.isXCHMASCVale = XCHMAIsSCVale(bar_index);
    mConditions.isXCHMASCTrendsUp = XCHMAIsSCTrendsUp(bar_index);
    mConditions.isXCHMASCTrendsDown = XCHMAIsSCTrendsDown(bar_index);
    mConditions.isXCHMASCFastOverSlow = XCHMAIsSCFastOverSlow(bar_index);
    mConditions.isXCHMASCFastUnderSlow = XCHMAIsSCFastUnderSlow(bar_index);
    mConditions.isXCHMASCFastCrossedOverSlow = XCHMAIsSCFastCrossedOverSlow(bar_index);
    mConditions.isXCHMASCFastCrossedUnderSlow = XCHMAIsSCFastCrossedUnderSlow(bar_index);
    //
    mConditions.isXCHMAMCPeak = XCHMAIsMCPeak(bar_index);
    mConditions.isXCHMAMCVale = XCHMAIsMCVale(bar_index);
    mConditions.isXCHMAMCTrendsUp = XCHMAIsMCTrendsUp(bar_index);
    mConditions.isXCHMAMCTrendsDown = XCHMAIsMCTrendsDown(bar_index);
    mConditions.isXCHMAMCFastOverSlow = XCHMAIsMCFastOverSlow(bar_index);
    mConditions.isXCHMAMCFastUnderSlow = XCHMAIsMCFastUnderSlow(bar_index);
    mConditions.isXCHMAMCFastCrossedOverSlow = XCHMAIsMCFastCrossedOverSlow(bar_index);
    mConditions.isXCHMAMCFastCrossedUnderSlow = XCHMAIsMCFastCrossedUnderSlow(bar_index);
    //
    mConditions.isXCHMALCPeak = XCHMAIsLCPeak(bar_index);
    mConditions.isXCHMALCVale = XCHMAIsLCVale(bar_index);
    mConditions.isXCHMALCTrendsUp = XCHMAIsLCTrendsUp(bar_index);
    mConditions.isXCHMALCTrendsDown = XCHMAIsLCTrendsDown(bar_index);
    mConditions.isXCHMALCFastOverSlow = XCHMAIsLCFastOverSlow(bar_index);
    mConditions.isXCHMALCFastUnderSlow = XCHMAIsLCFastUnderSlow(bar_index);
    mConditions.isXCHMALCFastCrossedOverSlow = XCHMAIsLCFastCrossedOverSlow(bar_index);
    mConditions.isXCHMALCFastCrossedUnderSlow = XCHMAIsLCFastCrossedUnderSlow(bar_index);

    //
    return mConditions;
}

//
// Check Market Conditions by Combination of Power of All tools for LONGs ...
bool XAU5HasLongSignal(
    XProvidedSignal &info // Retrieve Signal Additional Info on this Object
)
{
    //
    bool result = false;

    //
    // XTD ...
    bool isXTDHasSignal = XAU5XTDHasLongSignal();
    if (isXTDHasSignal)
    {
        //
        Add(
            EnumToString(XTD),
            info.signallers);
    }

    //
    // XTAM ...
    bool isXTAMHasSignal = XAU5XTAMHasLongSignal();
    if (isXTAMHasSignal)
    {
        //
        Add(
            EnumToString(XTAM),
            info.signallers);
    }

    //
    // XSI ...
    bool isXSIHasSignal = XAU5XSIHasLongSignal();
    if (isXSIHasSignal)
    {
        //
        Add(
            EnumToString(XSI),
            info.signallers);
    }

    //
    // XSTFI ...
    bool isXSTFIHasSignal = XAU5XSTFIHasLongSignal();
    if (isXSTFIHasSignal)
    {
        //
        Add(
            EnumToString(XSTFI),
            info.signallers);
    }

    //
    // XOBD XLH ...
    bool isXOBDLHHasSignal = XAU5XOBDLHHasLongSignal();
    if (isXOBDLHHasSignal)
    {
        //
        Add(
            EnumToString(XOBDLH),
            info.signallers);
    }

    //
    // XCHMA Cycles Cross ...
    bool isXCHMACCHasSignal = XAU5XCHMACCHasLongSignal();
    if (isXCHMACCHasSignal)
    {
        //
        Add(
            EnumToString(XCHMACC),
            info.signallers);
    }

    //
    // XCHMA Cycles Min ...
    bool isXCHMACMNHasSignal = XAU5XCHMACMNHasLongSignal();
    if (isXCHMACMNHasSignal)
    {
        //
        Add(
            EnumToString(XCHMACMN),
            info.signallers);
    }

    //
    // XCHMA Cycles Max
    bool isXCHMACMXHasSignal = XAU5XCHMACMXHasLongSignal();
    if (isXCHMACMXHasSignal)
    {
        //
        Add(
            EnumToString(XCHMACMX),
            info.signallers);
    }

    //
    result =
        //
        isXTDHasSignal
        //
        ||
        //
        isXTAMHasSignal
        //
        ||
        //
        isXSIHasSignal
        //
        ||
        //
        isXSTFIHasSignal
        //
        ||
        //
        isXOBDLHHasSignal
        //
        ||
        //
        isXCHMACCHasSignal
        //
        ||
        //
        isXCHMACMNHasSignal
        //
        ||
        //
        isXCHMACMXHasSignal
        //
        ;

    //
    if (result)
    {
        //
        // Only Log Signals Time Market Conditions if is in Testing Mode ...
        if (xAU5IsTestMode)
        {
            //
            string message = XAU5GetConditionsString(xAU5Conditions, "\n");

            //
            LogMessage(
                "Long Signal Provided by: \n" +
                info.signallers[ArraySize(info.signallers) - 1] + "\n" +
                "Pusher: " + (string)ArraySize(info.signallers) + "\n" +
                "Market Conditions: " + message);
        }
    }

    //
    return result;
}

//
// Check Market Conditions by Combination of Power of All tools for SHORTs ...
bool XAU5HasShortSignal(
    XProvidedSignal &info // Retrieve Signal Additional Info on this Object
)
{
    //
    bool result = false;

    //
    // XTD ...
    bool isXTDHasSignal = XAU5XTDHasShortSignal();
    if (isXTDHasSignal)
    {
        //
        Add(
            EnumToString(XTD),
            info.signallers);
    }

    //
    // XTAM ...
    bool isXTAMHasSignal = XAU5XTAMHasShortSignal();
    if (isXTAMHasSignal)
    {
        //
        Add(
            EnumToString(XTAM),
            info.signallers);
    }

    //
    // XSI ...
    bool isXSIHasSignal = XAU5XSIHasShortSignal();
    if (isXSIHasSignal)
    {
        //
        Add(
            EnumToString(XSI),
            info.signallers);
    }

    //
    // XSTFI ...
    bool isXSTFIHasSignal = XAU5XSTFIHasShortSignal();
    if (isXSTFIHasSignal)
    {
        //
        Add(
            EnumToString(XSTFI),
            info.signallers);
    }

    //
    // XOBD XLH ...
    bool isXOBDLHHasSignal = XAU5XOBDLHHasShortSignal();
    if (isXOBDLHHasSignal)
    {
        //
        Add(
            EnumToString(XOBDLH),
            info.signallers);
    }

    //
    // XCHMA Cycles Cross ...
    bool isXCHMACCHasSignal = XAU5XCHMACCHasShortSignal();
    if (isXCHMACCHasSignal)
    {
        //
        Add(
            EnumToString(XCHMACC),
            info.signallers);
    }

    //
    // XCHMA Cycles Min ...
    bool isXCHMACMNHasSignal = XAU5XCHMACMNHasShortSignal();
    if (isXCHMACMNHasSignal)
    {
        //
        Add(
            EnumToString(XCHMACMN),
            info.signallers);
    }

    //
    // XCHMA Cycles Max
    bool isXCHMACMXHasSignal = XAU5XCHMACMXHasShortSignal();
    if (isXCHMACMXHasSignal)
    {
        //
        Add(
            EnumToString(XCHMACMX),
            info.signallers);
    }

    //
    result =
        //
        isXTDHasSignal
        //
        ||
        //
        isXTAMHasSignal
        //
        ||
        //
        isXSIHasSignal
        //
        ||
        //
        isXSTFIHasSignal
        //
        ||
        //
        isXOBDLHHasSignal
        //
        ||
        //
        isXCHMACCHasSignal
        //
        ||
        //
        isXCHMACMNHasSignal
        //
        ||
        //
        isXCHMACMXHasSignal
        //
        ;

    //
    if (result)
    {
        //
        // Only Log Signals Time Market Conditions if is in Testing Mode ...
        if (xAU5IsTestMode)
        {
            //
            string message = XAU5GetConditionsString(xAU5Conditions, "\n");

            //
            LogMessage(
                "Short Signal Provided by: \n" +
                info.signallers[ArraySize(info.signallers) - 1] + "\n" +
                "Pusher: " + (string)ArraySize(info.signallers) + "\n" +
                "Market Conditions: " + message);
        }
    }

    //
    return result;
}

//
//
// END Combination Signaling ...
//
//

//
// START Signal Providers ...
//

//
// Disbale All Signallers Longs ...
void XAU5DisableLongSignallers()
{
    //
    // XTD ...
    if (xAU5MXTDEnableSignaller)
    {
        xAU5MXTDAllowLongSignals = false;
    }

    //
    // XTAM ...
    if (xAU5MXTAMEnableSignaller)
    {
        xAU5MXTAMAllowLongSignals = false;
    }

    //
    // XSI ...
    if (xAU5MXSIEnableSignaller)
    {
        xAU5MXSIAllowLongSignals = false;
    }

    //
    // XSTFI ...
    if (xAU5MXSTFIEnableSignaller)
    {
        xAU5MXSTFIAllowLongSignals = false;
    }

    //
    // XOBDLH ...
    if (xAU5MXOBDLHEnableSignaller)
    {
        xAU5MXOBDLHAllowLongSignals = false;
    }

    //
    // XCHMACC ...
    if (xAU5MXCHMACCEnableSignaller)
    {
        xAU5MXCHMACCAllowLongSignals = false;
    }

    //
    // XCHMAMX ...
    if (xAU5MXCHMACMXEnableSignaller)
    {
        xAU5MXCHMACMXAllowLongSignals = false;
    }

    //
    // XCHMAMN ...
    if (xAU5MXCHMACMNEnableSignaller)
    {
        xAU5MXCHMACMNAllowLongSignals = false;
    }
}

//
// Enable All Signallers Longs ...
// Only if they are Configured as Enable at Settings ...
void XAU5EnableLongSignallers()
{
    //
    // XTD ...
    if (xAU5MXTDEnableSignaller)
    {
        xAU5MXTDAllowLongSignals =
            xAU5XTDAllowLongSignals
                ? true
                : xAU5MXTDAllowLongSignals;
    }

    //
    // XTAM ...
    if (xAU5MXTAMEnableSignaller)
    {
        xAU5MXTAMAllowLongSignals =
            xAU5XTAMAllowLongSignals
                ? true
                : xAU5MXTAMAllowLongSignals;
    }

    //
    // XSI ...
    if (xAU5MXSIEnableSignaller)
    {
        xAU5MXSIAllowLongSignals =
            xAU5XSIAllowLongSignals
                ? true
                : xAU5MXSIAllowLongSignals;
    }

    //
    // XSTFI ...
    if (xAU5MXSTFIEnableSignaller)
    {
        xAU5MXSTFIAllowLongSignals =
            xAU5XSTFIAllowLongSignals
                ? true
                : xAU5MXSTFIAllowLongSignals;
    }

    //
    // XOBDLH ...
    if (xAU5MXOBDLHEnableSignaller)
    {
        xAU5MXOBDLHAllowLongSignals =
            xAU5XOBDLHAllowLongSignals
                ? true
                : xAU5MXOBDLHAllowLongSignals;
    }

    //
    // XCHMACC ...
    if (xAU5MXCHMACCEnableSignaller)
    {
        xAU5MXCHMACCAllowLongSignals =
            xAU5XCHMACCAllowLongSignals
                ? true
                : xAU5MXCHMACCAllowLongSignals;
    }

    //
    // XCHMAMX ...
    if (xAU5MXCHMACMXEnableSignaller)
    {
        xAU5MXCHMACMXAllowLongSignals =
            xAU5XCHMACMXAllowLongSignals
                ? true
                : xAU5MXCHMACMXAllowLongSignals;
    }

    //
    // XCHMAMN ...
    if (xAU5MXCHMACMNEnableSignaller)
    {
        xAU5MXCHMACMNAllowLongSignals =
            xAU5XCHMACMNAllowLongSignals
                ? true
                : xAU5MXCHMACMNAllowLongSignals;
    }
}

//
// Disable All Signallers Shorts ...
void XEUDisableShortSignallers()
{
    //
    // XTD ...
    if (xAU5MXTDEnableSignaller)
    {
        xAU5MXTDAllowShortSignals = false;
    }

    //
    // XTAM ...
    if (xAU5MXTAMEnableSignaller)
    {
        xAU5MXTAMAllowShortSignals = false;
    }

    //
    // XSI ...
    if (xAU5MXSIEnableSignaller)
    {
        xAU5MXSIAllowShortSignals = false;
    }

    //
    // XSTFI ...
    if (xAU5MXSTFIEnableSignaller)
    {
        xAU5MXSTFIAllowShortSignals = false;
    }

    //
    // XOBDLH ...
    if (xAU5MXOBDLHEnableSignaller)
    {
        xAU5MXOBDLHAllowShortSignals = false;
    }

    //
    // XCHMACC ...
    if (xAU5MXCHMACCEnableSignaller)
    {
        xAU5MXCHMACCAllowShortSignals = false;
    }

    //
    // XCHMAMX ...
    if (xAU5MXCHMACMXEnableSignaller)
    {
        xAU5MXCHMACMXAllowShortSignals = false;
    }

    //
    // XCHMAMN ...
    if (xAU5MXCHMACMNEnableSignaller)
    {
        xAU5MXCHMACMNAllowShortSignals = false;
    }
}

//
// Enable All Signallers Shorts ...
// Only if they are Configured as Enable at Settings ...
void XEUEnableShortSignallers()
{
    //
    // XTD ...
    if (xAU5MXTDEnableSignaller)
    {
        xAU5MXTDAllowShortSignals =
            xAU5XTDAllowShortSignals
                ? true
                : xAU5MXTDAllowShortSignals;
    }

    //
    // XTAM ...
    if (xAU5MXTAMEnableSignaller)
    {
        xAU5MXTAMAllowShortSignals =
            xAU5XTAMAllowShortSignals
                ? true
                : xAU5MXTAMAllowShortSignals;
    }

    //
    // XSI ...
    if (xAU5MXSIEnableSignaller)
    {
        xAU5MXSIAllowShortSignals =
            xAU5XSIAllowShortSignals
                ? true
                : xAU5MXSIAllowShortSignals;
    }

    //
    // XSTFI ...
    if (xAU5MXSTFIEnableSignaller)
    {
        xAU5MXSTFIAllowShortSignals =
            xAU5XSTFIAllowShortSignals
                ? true
                : xAU5MXSTFIAllowShortSignals;
    }

    //
    // XOBDLH ...
    if (xAU5MXOBDLHEnableSignaller)
    {
        xAU5MXOBDLHAllowShortSignals =
            xAU5XOBDLHAllowShortSignals
                ? true
                : xAU5MXOBDLHAllowShortSignals;
    }

    //
    // XCHMACC ...
    if (xAU5MXCHMACCEnableSignaller)
    {
        xAU5MXCHMACCAllowShortSignals =
            xAU5XCHMACCAllowShortSignals
                ? true
                : xAU5MXCHMACCAllowShortSignals;
    }

    //
    // XCHMAMX ...
    if (xAU5MXCHMACMXEnableSignaller)
    {
        xAU5MXCHMACMXAllowShortSignals =
            xAU5XCHMACMXAllowShortSignals
                ? true
                : xAU5MXCHMACMXAllowShortSignals;
    }

    //
    // XCHMAMN ...
    if (xAU5MXCHMACMNEnableSignaller)
    {
        xAU5MXCHMACMNAllowShortSignals =
            xAU5XCHMACMNAllowShortSignals
                ? true
                : xAU5MXCHMACMNAllowShortSignals;
    }
}

//
// XTD Long Signal Checking ...
bool XAU5XTDHasLongSignal()
{
    //
    bool result = false;

    //
    // Validate Args ...
    if (!xAU5MXTDEnableSignaller ||
        !xAU5MXTDAllowLongSignals)
    {
        return result;
    }

    //
    // Start Analysing Market based On Conditions ...
    result =
        //
        // Base Condition:
        // each Strategy must has a Base Conditions, which they are usually common combinations
        // of Market Properties that must be happens to lookup for signals ...
        (
            //
            false
            //
            )
        //
        &&
        //
        // Next Step is combine sorts of Conditions which make our choice
        // so Exact in Market ...
        (
            //
            false
            //
            )
        //
        &&
        //
        // Exceptions:
        // there some commonly Exceptions which makes our choice incorrect,
        // here we are combined knownly Exceptions ...
        !(
            //
            // for Exception we used XLH Conditions as follow ...
            //
            // Check Conditions if Price In Signal Range ...
            (xAU5Conditions.isXLHPriceInSignalRange &&
             //
             (
                 //
                 // Next Step is to Check LL and HH Same Style ...
                 //
                 // Check if Both LL and HH Same In Length ...
                 ((xAU5Conditions.isXLHLLSameInLength &&
                   xAU5Conditions.isXLHHHSameInLength) &&
                  //
                  (
                      false)
                  //
                  )
                 //
                 ||
                 //
                 // Check If LL Same In Length ...
                 ((xAU5Conditions.isXLHLLSameInLength &&
                   !xAU5Conditions.isXLHHHSameInLength) &&
                  //
                  (
                      false)
                  //
                  )
                 //
                 ||
                 //
                 // Check If HH is Same In Length ...
                 ((xAU5Conditions.isXLHHHSameInLength &&
                   !xAU5Conditions.isXLHLLSameInLength) &&
                  //
                  (
                      false)
                  //
                  )
                 //
                 ||
                 //
                 // Not Same LL or HH in Lenght ...
                 ((!xAU5Conditions.isXLHHHSameInLength &&
                   !xAU5Conditions.isXLHLLSameInLength) &&
                  //
                  (
                      false)
                  //
                  )
                 //
                 )
             //
             )
            //
            ||
            //
            // Check Conditions if Price is Under Signal ...
            (
                //
                ((xAU5Conditions.isXLHPriceUnderSignal ||
                  xAU5Conditions.isXLHPriceCrossedUnderSignal) &&
                 (
                     //
                     // Next Step is to Check LL and HH Same Style ...
                     //
                     // Check if Both LL and HH Same In Length ...
                     ((xAU5Conditions.isXLHLLSameInLength &&
                       xAU5Conditions.isXLHHHSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Check If LL Same In Length ...
                     ((xAU5Conditions.isXLHLLSameInLength &&
                       !xAU5Conditions.isXLHHHSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Check If HH is Same In Length ...
                     ((xAU5Conditions.isXLHHHSameInLength &&
                       !xAU5Conditions.isXLHLLSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Not Same LL or HH in Lenght ...
                     ((!xAU5Conditions.isXLHHHSameInLength &&
                       !xAU5Conditions.isXLHLLSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     )
                 //
                 )
                //
                )
            //
            ||
            //
            // Check Conditions if Price is Over Signal ...
            (
                //
                ((xAU5Conditions.isXLHPriceOverSignal ||
                  xAU5Conditions.isXLHPriceCrossedOverSignal) &&
                 (
                     //
                     // Next Step is to Check LL and HH Same Style ...
                     //
                     // Check if Both LL and HH Same In Length ...
                     ((xAU5Conditions.isXLHLLSameInLength &&
                       xAU5Conditions.isXLHHHSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Check If LL Same In Length ...
                     ((xAU5Conditions.isXLHLLSameInLength &&
                       !xAU5Conditions.isXLHHHSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Check If HH is Same In Length ...
                     ((xAU5Conditions.isXLHHHSameInLength &&
                       !xAU5Conditions.isXLHLLSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Not Same LL or HH in Lenght ...
                     ((!xAU5Conditions.isXLHHHSameInLength &&
                       !xAU5Conditions.isXLHLLSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     )
                 //
                 )
                //
                )
            //
            ||
            //
            // Check Conditions if Price is not has clear state ...
            (
                //
                ((!xAU5Conditions.isXLHPriceOverSignal &&
                  !xAU5Conditions.isXLHPriceUnderSignal &&
                  !xAU5Conditions.isXLHPriceInSignalRange &&
                  !xAU5Conditions.isXLHPriceCrossedOverSignal &&
                  !xAU5Conditions.isXLHPriceCrossedUnderSignal) &&
                 (
                     //
                     // Next Step is to Check LL and HH Same Style ...
                     //
                     // Check if Both LL and HH Same In Length ...
                     ((xAU5Conditions.isXLHLLSameInLength &&
                       xAU5Conditions.isXLHHHSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Check If LL Same In Length ...
                     ((xAU5Conditions.isXLHLLSameInLength &&
                       !xAU5Conditions.isXLHHHSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Check If HH is Same In Length ...
                     ((xAU5Conditions.isXLHHHSameInLength &&
                       !xAU5Conditions.isXLHLLSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Not Same LL or HH in Lenght ...
                     ((!xAU5Conditions.isXLHHHSameInLength &&
                       !xAU5Conditions.isXLHLLSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     )
                 //
                 )
                //
                )
            //
            )
        //
        ;

    //
    return result;
}

//
// XTD Short Signal Checking ...
bool XAU5XTDHasShortSignal()
{
    //
    bool result = false;

    //
    // Validate Args ...
    if (!xAU5MXTDEnableSignaller ||
        !xAU5MXTDAllowShortSignals)
    {
        return result;
    }

    //
    // Start Analysing Market based On Conditions ...
    result =
        //
        // Base Condition:
        // each Strategy must has a Base Conditions, which they are usually common combinations
        // of Market Properties that must be happens to lookup for signals ...
        (
            //
            false
            //
            )
        //
        &&
        //
        // Next Step is combine sorts of Conditions which make our choice
        // so Exact in Market ...
        (
            //
            false
            //
            )
        //
        &&
        //
        // Exceptions:
        // there some commonly Exceptions which makes our choice incorrect,
        // here we are combined knownly Exceptions ...
        !(
            //
            // for Exception we used XLH Conditions as follow ...
            //
            // Check Conditions if Price In Signal Range ...
            (xAU5Conditions.isXLHPriceInSignalRange &&
             //
             (
                 //
                 // Next Step is to Check LL and HH Same Style ...
                 //
                 // Check if Both LL and HH Same In Length ...
                 ((xAU5Conditions.isXLHLLSameInLength &&
                   xAU5Conditions.isXLHHHSameInLength) &&
                  //
                  (
                      false)
                  //
                  )
                 //
                 ||
                 //
                 // Check If LL Same In Length ...
                 ((xAU5Conditions.isXLHLLSameInLength &&
                   !xAU5Conditions.isXLHHHSameInLength) &&
                  //
                  (
                      false)
                  //
                  )
                 //
                 ||
                 //
                 // Check If HH is Same In Length ...
                 ((xAU5Conditions.isXLHHHSameInLength &&
                   !xAU5Conditions.isXLHLLSameInLength) &&
                  //
                  (
                      false)
                  //
                  )
                 //
                 ||
                 //
                 // Not Same LL or HH in Lenght ...
                 ((!xAU5Conditions.isXLHHHSameInLength &&
                   !xAU5Conditions.isXLHLLSameInLength) &&
                  //
                  (
                      false)
                  //
                  )
                 //
                 )
             //
             )
            //
            ||
            //
            // Check Conditions if Price is Under Signal ...
            (
                //
                ((xAU5Conditions.isXLHPriceUnderSignal ||
                  xAU5Conditions.isXLHPriceCrossedUnderSignal) &&
                 (
                     //
                     // Next Step is to Check LL and HH Same Style ...
                     //
                     // Check if Both LL and HH Same In Length ...
                     ((xAU5Conditions.isXLHLLSameInLength &&
                       xAU5Conditions.isXLHHHSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Check If LL Same In Length ...
                     ((xAU5Conditions.isXLHLLSameInLength &&
                       !xAU5Conditions.isXLHHHSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Check If HH is Same In Length ...
                     ((xAU5Conditions.isXLHHHSameInLength &&
                       !xAU5Conditions.isXLHLLSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Not Same LL or HH in Lenght ...
                     ((!xAU5Conditions.isXLHHHSameInLength &&
                       !xAU5Conditions.isXLHLLSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     )
                 //
                 )
                //
                )
            //
            ||
            //
            // Check Conditions if Price is Over Signal ...
            (
                //
                ((xAU5Conditions.isXLHPriceOverSignal ||
                  xAU5Conditions.isXLHPriceCrossedOverSignal) &&
                 (
                     //
                     // Next Step is to Check LL and HH Same Style ...
                     //
                     // Check if Both LL and HH Same In Length ...
                     ((xAU5Conditions.isXLHLLSameInLength &&
                       xAU5Conditions.isXLHHHSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Check If LL Same In Length ...
                     ((xAU5Conditions.isXLHLLSameInLength &&
                       !xAU5Conditions.isXLHHHSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Check If HH is Same In Length ...
                     ((xAU5Conditions.isXLHHHSameInLength &&
                       !xAU5Conditions.isXLHLLSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Not Same LL or HH in Lenght ...
                     ((!xAU5Conditions.isXLHHHSameInLength &&
                       !xAU5Conditions.isXLHLLSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     )
                 //
                 )
                //
                )
            //
            ||
            //
            // Check Conditions if Price is not has clear state ...
            (
                //
                ((!xAU5Conditions.isXLHPriceOverSignal &&
                  !xAU5Conditions.isXLHPriceUnderSignal &&
                  !xAU5Conditions.isXLHPriceInSignalRange &&
                  !xAU5Conditions.isXLHPriceCrossedOverSignal &&
                  !xAU5Conditions.isXLHPriceCrossedUnderSignal) &&
                 (
                     //
                     // Next Step is to Check LL and HH Same Style ...
                     //
                     // Check if Both LL and HH Same In Length ...
                     ((xAU5Conditions.isXLHLLSameInLength &&
                       xAU5Conditions.isXLHHHSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Check If LL Same In Length ...
                     ((xAU5Conditions.isXLHLLSameInLength &&
                       !xAU5Conditions.isXLHHHSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Check If HH is Same In Length ...
                     ((xAU5Conditions.isXLHHHSameInLength &&
                       !xAU5Conditions.isXLHLLSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Not Same LL or HH in Lenght ...
                     ((!xAU5Conditions.isXLHHHSameInLength &&
                       !xAU5Conditions.isXLHLLSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     )
                 //
                 )
                //
                )
            //
            )
        //
        ;

    //
    return result;
}

//
// XTAM Long Signal Checking ...
bool XAU5XTAMHasLongSignal()
{
    //
    bool result = false;

    //
    // Validate Args ...
    if (!xAU5MXTAMEnableSignaller ||
        !xAU5MXTAMAllowLongSignals)
    {
        return result;
    }

    //
    // Start Analysing Market based On Conditions ...
    result =
        //
        // Base Condition:
        // each Strategy must has a Base Conditions, which they are usually common combinations
        // of Market Properties that must be happens to lookup for signals ...
        (
            //
            (xAMAMaBuffer[1] > xTMMaBuffer[1] &&
             xAMAMaBuffer[2] > xTMMaBuffer[2])
            //
            &&
            //
            !(xAMAMaBuffer[2] > xTMMaBuffer[2] &&
              xAMAMaBuffer[3] > xTMMaBuffer[3])
            //
            )
        //
        &&
        //
        // Next Step is combine sorts of Conditions which make our choice
        // so Exact in Market ...
        (
            //
            // Exception Cases for XCHMA Min or Max ...
            !(
                //
                // XCHMA MAX ...
                (
                    //
                    (xAU5Conditions.isXCHMASCOverMax ||
                     xAU5Conditions.isXCHMASCCrossedOverMax) &&
                    (xAU5Conditions.isXCHMASCUnderMax ||
                     xAU5Conditions.isXCHMASCCrossedUnderMax)
                    //
                    )
                //
                ||
                //
                // XCHMA MIN ...
                (
                    //
                    (xAU5Conditions.isXCHMASCOverMin ||
                     xAU5Conditions.isXCHMASCCrossedOverMin) &&
                    (xAU5Conditions.isXCHMASCUnderMin ||
                     xAU5Conditions.isXCHMASCCrossedUnderMin)
                    //
                    )
                //
                )
            //
            &&
            //
            // Check XCHMA Trend Bullish ...
            (
                //
                // All Cycles Bullish ...
                (
                    //
                    // SC ...
                    (xAU5Conditions.isXCHMASCFastOverSlow ||
                     xAU5Conditions.isXCHMASCFastCrossedOverSlow)
                    //
                    &&
                    //
                    // MC ...
                    (xAU5Conditions.isXCHMAMCFastOverSlow ||
                     xAU5Conditions.isXCHMAMCFastCrossedOverSlow)
                    //
                    &&
                    //
                    // LC ...
                    (xAU5Conditions.isXCHMALCFastOverSlow ||
                     xAU5Conditions.isXCHMALCFastCrossedOverSlow)
                    //
                    )
                //
                ||
                //
                // Two Cycle Fully Bullish ...
                (
                    //
                    // SC and MC ...
                    (
                        //
                        // SC ...
                        (
                            // !xAU5Conditions.isXCHMASCTrendsDown &&
                            (xAU5Conditions.isXCHMASCFastOverSlow ||
                             xAU5Conditions.isXCHMASCFastCrossedOverSlow))
                        //
                        &&
                        //
                        // MC ...
                        (
                            // !xAU5Conditions.isXCHMAMCTrendsDown &&
                            (xAU5Conditions.isXCHMAMCFastOverSlow ||
                             xAU5Conditions.isXCHMAMCFastCrossedOverSlow))
                        //
                        )
                    //
                    ||
                    //
                    // SC and LC ...
                    (
                        //
                        // SC ...
                        (
                            // !xAU5Conditions.isXCHMASCTrendsDown &&
                            (xAU5Conditions.isXCHMASCFastOverSlow ||
                             xAU5Conditions.isXCHMASCFastCrossedOverSlow))
                        //
                        &&
                        //
                        // LC ...
                        (
                            // !xAU5Conditions.isXCHMALCTrendsDown &&
                            (xAU5Conditions.isXCHMALCFastOverSlow ||
                             xAU5Conditions.isXCHMALCFastCrossedOverSlow))
                        //
                        )
                    //
                    ||
                    //
                    // MC and LC ...
                    (
                        //
                        // MC ...
                        (
                            // !xAU5Conditions.isXCHMAMCTrendsDown &&
                            (xAU5Conditions.isXCHMAMCFastOverSlow ||
                             xAU5Conditions.isXCHMAMCFastCrossedOverSlow))
                        //
                        &&
                        //
                        // LC ...
                        (
                            // !xAU5Conditions.isXCHMALCTrendsDown &&
                            (xAU5Conditions.isXCHMALCFastOverSlow ||
                             xAU5Conditions.isXCHMALCFastCrossedOverSlow))
                        //
                        )
                    //
                    )
                //
                )
            //
            &&
            //
            // XCHMA Check Peaks ...
            !(
                //
                // All Cycles Peak ...
                (
                    xAU5Conditions.isXCHMASCPeak &&
                    xAU5Conditions.isXCHMAMCPeak &&
                    xAU5Conditions.isXCHMALCPeak)
                //
                ||
                //
                (
                    //
                    // SC MC ...
                    (xAU5Conditions.isXCHMASCPeak &&
                     xAU5Conditions.isXCHMAMCPeak)
                    //
                    ||
                    //
                    // SC LC ...
                    (xAU5Conditions.isXCHMASCPeak &&
                     xAU5Conditions.isXCHMALCPeak)
                    //
                    ||
                    //
                    // MC LC ...
                    (xAU5Conditions.isXCHMAMCPeak &&
                     xAU5Conditions.isXCHMALCPeak)
                    //
                    )
                //
                )
            //
            &&
            //
            // Check XCHMA Trends Powers ...
            !(
                //
                (xAU5Conditions.isXCHMASCTrendsDown &&
                 xAU5Conditions.isXCHMAMCTrendsDown &&
                 xAU5Conditions.isXCHMALCTrendsDown)
                //
                ||
                //
                (xAU5Conditions.isXCHMASCTrendsDown &&
                 xAU5Conditions.isXCHMAMCTrendsDown)
                //
                ||
                //
                (xAU5Conditions.isXCHMASCTrendsDown &&
                 xAU5Conditions.isXCHMALCTrendsDown)
                //
                ||
                //
                (xAU5Conditions.isXCHMAMCTrendsDown &&
                 xAU5Conditions.isXCHMALCTrendsDown)
                //
                )
            //
            &&
            //
            // Check XOBD Swings ...
            !xAU5Conditions.isXOBDSwingLow
            //
            )
        //
        &&
        //
        // Exceptions:
        // there some commonly Exceptions which makes our choice incorrect,
        // here we are combined knownly Exceptions ...
        !(
            //
            // for Exception we used XLH Conditions as follow ...
            //
            // Check Conditions if Price In Signal Range ...
            (xAU5Conditions.isXLHPriceInSignalRange &&
             //
             (
                 //
                 // Next Step is to Check LL and HH Same Style ...
                 //
                 // Check if Both LL and HH Same In Length ...
                 ((xAU5Conditions.isXLHLLSameInLength &&
                   xAU5Conditions.isXLHHHSameInLength) &&
                  //
                  (
                      //
                      (xAU5Conditions.isXAMABearish &&
                       xAU5Conditions.isXTMEndBearish &&
                       xAU5Conditions.isXTDSignalVale &&
                       xAU5Conditions.isXTDBullishVale)
                      //
                      ||
                      //
                      (
                          //
                          (xAU5Conditions.isXCHMASCTrendsDown &&
                           xAU5Conditions.isXCHMAMCTrendsDown &&
                           xAU5Conditions.isXCHMALCTrendsDown)
                          //
                          ||
                          //
                          (xAU5Conditions.isXCHMASCTrendsDown &&
                           xAU5Conditions.isXCHMAMCTrendsDown)
                          //
                          ||
                          //
                          (xAU5Conditions.isXCHMASCTrendsDown &&
                           xAU5Conditions.isXCHMALCTrendsDown)
                          //
                          ||
                          //
                          (xAU5Conditions.isXCHMAMCTrendsDown &&
                           xAU5Conditions.isXCHMALCTrendsDown)
                          //
                          )
                      //
                      )
                  //
                  )
                 //
                 ||
                 //
                 // Check If LL Same In Length ...
                 ((xAU5Conditions.isXLHLLSameInLength &&
                   !xAU5Conditions.isXLHHHSameInLength) &&
                  //
                  (
                      //
                      false
                      //
                      )
                  //
                  )
                 //
                 ||
                 //
                 // Check If HH is Same In Length ...
                 ((xAU5Conditions.isXLHHHSameInLength &&
                   !xAU5Conditions.isXLHLLSameInLength) &&
                  //
                  (
                      //
                      (
                          //
                          (xAU5Conditions.isXCHMASCTrendsDown &&
                           xAU5Conditions.isXCHMAMCTrendsDown &&
                           xAU5Conditions.isXCHMALCTrendsDown)
                          //
                          ||
                          //
                          (xAU5Conditions.isXCHMASCTrendsDown &&
                           xAU5Conditions.isXCHMAMCTrendsDown)
                          //
                          ||
                          //
                          (xAU5Conditions.isXCHMASCTrendsDown &&
                           xAU5Conditions.isXCHMALCTrendsDown)
                          //
                          ||
                          //
                          (xAU5Conditions.isXCHMAMCTrendsDown &&
                           xAU5Conditions.isXCHMALCTrendsDown)
                          //
                          )
                      //
                      )
                  //
                  )
                 //
                 ||
                 //
                 // Not Same LL or HH in Lenght ...
                 ((!xAU5Conditions.isXLHHHSameInLength &&
                   !xAU5Conditions.isXLHLLSameInLength) &&
                  //
                  (
                      //
                      (xAU5Conditions.isXAMANeutural &&
                       xAU5Conditions.isXLHHHDecreased &&
                       xAU5Conditions.isXTDBullUnderBear &&
                       xAU5Conditions.isXTDSignalUnderBear)
                      //
                      ||
                      (
                          //
                          (xAU5Conditions.isXCHMASCTrendsDown &&
                           xAU5Conditions.isXCHMAMCTrendsDown &&
                           xAU5Conditions.isXCHMALCTrendsDown)
                          //
                          )
                      //
                      )
                  //
                  )
                 //
                 )
             //
             )
            //
            ||
            //
            // Check Conditions if Price is Under Signal ...
            (
                //
                ((xAU5Conditions.isXLHPriceUnderSignal ||
                  xAU5Conditions.isXLHPriceCrossedUnderSignal) &&
                 (
                     //
                     // Next Step is to Check LL and HH Same Style ...
                     //
                     // Check if Both LL and HH Same In Length ...
                     ((xAU5Conditions.isXLHLLSameInLength &&
                       xAU5Conditions.isXLHHHSameInLength) &&
                      //
                      (
                          //
                          (xAU5Conditions.isXCHMALCPeak &&
                           (
                               //
                               (xAU5Conditions.isXCHMAMCVale &&
                                ((
                                    //
                                    xAU5Conditions.isXCHMASCVale
                                    //
                                    ||
                                    //
                                    (xAU5Conditions.isXAMAVale &&
                                     (xAU5Conditions.isXTDBearishVale ||
                                      xAU5Conditions.isXTMStartBearish))
                                    //
                                    ||
                                    //
                                    (
                                        //
                                        ((xAU5Conditions.isXCHMASCTrendsUp &&
                                          (xAU5Conditions.isXCHMASCFastUnderSlow ||
                                           xAU5Conditions.isXCHMASCFastCrossedUnderSlow)) &&
                                         (xAU5Conditions.isXCHMAMCTrendsDown &&
                                          (xAU5Conditions.isXCHMAMCFastOverSlow ||
                                           xAU5Conditions.isXCHMAMCFastCrossedOverSlow)) &&
                                         (xAU5Conditions.isXCHMALCTrendsDown &&
                                          (xAU5Conditions.isXCHMALCFastOverSlow ||
                                           xAU5Conditions.isXCHMALCFastCrossedOverSlow))
                                         //
                                         )
                                        //
                                        )
                                    //
                                    )))
                               //
                               ||
                               //
                               (xAU5Conditions.isXTMBearish &&
                                xAU5Conditions.isXAMABearish &&
                                xAU5Conditions.isXTSCurrentMin &&
                                xAU5Conditions.isXLHHHDecreased &&
                                xAU5Conditions.isXFICrossedUnderZero)
                               //
                               ))
                          //
                          ||
                          //
                          (xAU5Conditions.isXTSCurrentMin &&
                           (xAU5Conditions.isXTSCurrentUnderFarest ||
                            xAU5Conditions.isXTSCurrentCrossedUnderFarest) &&
                           (xAU5Conditions.isXTSCurrentUnderNearest ||
                            xAU5Conditions.isXTSCurrentCrossedUnderNearest) &&
                           (xAU5Conditions.isXTSCurrentUnderMediest ||
                            xAU5Conditions.isXTSCurrentCrossedUnderMediest))
                          //
                          )
                      //
                      )
                     //
                     ||
                     //
                     // Check If LL Same In Length ...
                     ((xAU5Conditions.isXLHLLSameInLength &&
                       !xAU5Conditions.isXLHHHSameInLength) &&
                      //
                      (
                          //
                          false
                          //
                          )
                      //
                      )
                     //
                     ||
                     //
                     // Check If HH is Same In Length ...
                     ((xAU5Conditions.isXLHHHSameInLength &&
                       !xAU5Conditions.isXLHLLSameInLength) &&
                      //
                      (
                          //
                          (xAU5Conditions.isXTSCurrentMin &&
                           xAU5Conditions.isXTSCurrentUnderFarest &&
                           xAU5Conditions.isXTSCurrentUnderNearest &&
                           xAU5Conditions.isXTSCurrentUnderMediest)
                          //
                          ||
                          //
                          (xAU5Conditions.isXAMAVale &&
                           xAU5Conditions.isXCHLHSCMCLLSame &&
                           xAU5Conditions.isXLHLowAttachedLL)
                          //
                          ||
                          //
                          ((xAU5Conditions.isXCHMAMCVale &&
                            xAU5Conditions.isXCHMALCPeak) &&
                           (
                               //
                               (xAU5Conditions.isXCHMASCTrendsUp &&
                                (xAU5Conditions.isXCHMASCFastUnderSlow ||
                                 xAU5Conditions.isXCHMASCFastCrossedUnderSlow))
                               //
                               ))
                          //
                          )
                      //
                      )
                     //
                     ||
                     //
                     // Not Same LL or HH in Lenght ...
                     ((!xAU5Conditions.isXLHHHSameInLength &&
                       !xAU5Conditions.isXLHLLSameInLength) &&
                      //
                      (
                          //
                          false
                          //
                          )
                      //
                      )
                     //
                     )
                 //
                 )
                //
                )
            //
            ||
            //
            // Check Conditions if Price is Over Signal ...
            (
                //
                ((xAU5Conditions.isXLHPriceOverSignal ||
                  xAU5Conditions.isXLHPriceCrossedOverSignal) &&
                 (
                     //
                     // Next Step is to Check LL and HH Same Style ...
                     //
                     // Check if Both LL and HH Same In Length ...
                     ((xAU5Conditions.isXLHLLSameInLength &&
                       xAU5Conditions.isXLHHHSameInLength) &&
                      //
                      (
                          //
                          (xAU5Conditions.isXTSCurrentMax &&
                           xAU5Conditions.isXTSCurrentOverFarest &&
                           xAU5Conditions.isXTSCurrentOverNearest &&
                           xAU5Conditions.isXTSCurrentOverMediest)
                          //
                          )
                      //
                      )
                     //
                     ||
                     //
                     // Check If LL Same In Length ...
                     ((xAU5Conditions.isXLHLLSameInLength &&
                       !xAU5Conditions.isXLHHHSameInLength) &&
                      //
                      (
                          //
                          false
                          //
                          )
                      //
                      )
                     //
                     ||
                     //
                     // Check If HH is Same In Length ...
                     ((xAU5Conditions.isXLHHHSameInLength &&
                       !xAU5Conditions.isXLHLLSameInLength) &&
                      //
                      (
                          //
                          false
                          //
                          )
                      //
                      )
                     //
                     ||
                     //
                     // Not Same LL or HH in Lenght ...
                     ((!xAU5Conditions.isXLHHHSameInLength &&
                       !xAU5Conditions.isXLHLLSameInLength) &&
                      //
                      (
                          //
                          false
                          //
                          )
                      //
                      )
                     //
                     )
                 //
                 )
                //
                )
            //
            ||
            //
            // Check Conditions if Price is not has clear state ...
            (
                //
                ((!xAU5Conditions.isXLHPriceOverSignal &&
                  !xAU5Conditions.isXLHPriceUnderSignal &&
                  !xAU5Conditions.isXLHPriceInSignalRange &&
                  !xAU5Conditions.isXLHPriceCrossedOverSignal &&
                  !xAU5Conditions.isXLHPriceCrossedUnderSignal) &&
                 (
                     //
                     // Next Step is to Check LL and HH Same Style ...
                     //
                     // Check if Both LL and HH Same In Length ...
                     ((xAU5Conditions.isXLHLLSameInLength &&
                       xAU5Conditions.isXLHHHSameInLength) &&
                      //
                      (
                          //
                          false
                          //
                          )
                      //
                      )
                     //
                     ||
                     //
                     // Check If LL Same In Length ...
                     ((xAU5Conditions.isXLHLLSameInLength &&
                       !xAU5Conditions.isXLHHHSameInLength) &&
                      //
                      (
                          //
                          false
                          //
                          )
                      //
                      )
                     //
                     ||
                     //
                     // Check If HH is Same In Length ...
                     ((xAU5Conditions.isXLHHHSameInLength &&
                       !xAU5Conditions.isXLHLLSameInLength) &&
                      //
                      (
                          //
                          false
                          //
                          )
                      //
                      )
                     //
                     ||
                     //
                     // Not Same LL or HH in Lenght ...
                     ((!xAU5Conditions.isXLHHHSameInLength &&
                       !xAU5Conditions.isXLHLLSameInLength) &&
                      //
                      (
                          //
                          false
                          //
                          )
                      //
                      )
                     //
                     )
                 //
                 )
                //
                )
            //
            )
        //
        ;

    //
    return result;
}

//
// XTAM Short Signal Checking ...
bool XAU5XTAMHasShortSignal()
{
    //
    bool result = false;

    //
    // Validate Args ...
    if (!xAU5MXTAMEnableSignaller ||
        !xAU5MXTAMAllowShortSignals)
    {
        return result;
    }

    //
    // Start Analysing Market based On Conditions ...
    result =
        //
        // Base Condition:
        // each Strategy must has a Base Conditions, which they are usually common combinations
        // of Market Properties that must be happens to lookup for signals ...
        (
            //
            false
            //
            )
        //
        &&
        //
        // Next Step is combine sorts of Conditions which make our choice
        // so Exact in Market ...
        (
            //
            false
            //
            )
        //
        &&
        //
        // Exceptions:
        // there some commonly Exceptions which makes our choice incorrect,
        // here we are combined knownly Exceptions ...
        !(
            //
            // for Exception we used XLH Conditions as follow ...
            //
            // Check Conditions if Price In Signal Range ...
            (xAU5Conditions.isXLHPriceInSignalRange &&
             //
             (
                 //
                 // Next Step is to Check LL and HH Same Style ...
                 //
                 // Check if Both LL and HH Same In Length ...
                 ((xAU5Conditions.isXLHLLSameInLength &&
                   xAU5Conditions.isXLHHHSameInLength) &&
                  //
                  (
                      false)
                  //
                  )
                 //
                 ||
                 //
                 // Check If LL Same In Length ...
                 ((xAU5Conditions.isXLHLLSameInLength &&
                   !xAU5Conditions.isXLHHHSameInLength) &&
                  //
                  (
                      false)
                  //
                  )
                 //
                 ||
                 //
                 // Check If HH is Same In Length ...
                 ((xAU5Conditions.isXLHHHSameInLength &&
                   !xAU5Conditions.isXLHLLSameInLength) &&
                  //
                  (
                      false)
                  //
                  )
                 //
                 ||
                 //
                 // Not Same LL or HH in Lenght ...
                 ((!xAU5Conditions.isXLHHHSameInLength &&
                   !xAU5Conditions.isXLHLLSameInLength) &&
                  //
                  (
                      false)
                  //
                  )
                 //
                 )
             //
             )
            //
            ||
            //
            // Check Conditions if Price is Under Signal ...
            (
                //
                ((xAU5Conditions.isXLHPriceUnderSignal ||
                  xAU5Conditions.isXLHPriceCrossedUnderSignal) &&
                 (
                     //
                     // Next Step is to Check LL and HH Same Style ...
                     //
                     // Check if Both LL and HH Same In Length ...
                     ((xAU5Conditions.isXLHLLSameInLength &&
                       xAU5Conditions.isXLHHHSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Check If LL Same In Length ...
                     ((xAU5Conditions.isXLHLLSameInLength &&
                       !xAU5Conditions.isXLHHHSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Check If HH is Same In Length ...
                     ((xAU5Conditions.isXLHHHSameInLength &&
                       !xAU5Conditions.isXLHLLSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Not Same LL or HH in Lenght ...
                     ((!xAU5Conditions.isXLHHHSameInLength &&
                       !xAU5Conditions.isXLHLLSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     )
                 //
                 )
                //
                )
            //
            ||
            //
            // Check Conditions if Price is Over Signal ...
            (
                //
                ((xAU5Conditions.isXLHPriceOverSignal ||
                  xAU5Conditions.isXLHPriceCrossedOverSignal) &&
                 (
                     //
                     // Next Step is to Check LL and HH Same Style ...
                     //
                     // Check if Both LL and HH Same In Length ...
                     ((xAU5Conditions.isXLHLLSameInLength &&
                       xAU5Conditions.isXLHHHSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Check If LL Same In Length ...
                     ((xAU5Conditions.isXLHLLSameInLength &&
                       !xAU5Conditions.isXLHHHSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Check If HH is Same In Length ...
                     ((xAU5Conditions.isXLHHHSameInLength &&
                       !xAU5Conditions.isXLHLLSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Not Same LL or HH in Lenght ...
                     ((!xAU5Conditions.isXLHHHSameInLength &&
                       !xAU5Conditions.isXLHLLSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     )
                 //
                 )
                //
                )
            //
            ||
            //
            // Check Conditions if Price is not has clear state ...
            (
                //
                ((!xAU5Conditions.isXLHPriceOverSignal &&
                  !xAU5Conditions.isXLHPriceUnderSignal &&
                  !xAU5Conditions.isXLHPriceInSignalRange &&
                  !xAU5Conditions.isXLHPriceCrossedOverSignal &&
                  !xAU5Conditions.isXLHPriceCrossedUnderSignal) &&
                 (
                     //
                     // Next Step is to Check LL and HH Same Style ...
                     //
                     // Check if Both LL and HH Same In Length ...
                     ((xAU5Conditions.isXLHLLSameInLength &&
                       xAU5Conditions.isXLHHHSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Check If LL Same In Length ...
                     ((xAU5Conditions.isXLHLLSameInLength &&
                       !xAU5Conditions.isXLHHHSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Check If HH is Same In Length ...
                     ((xAU5Conditions.isXLHHHSameInLength &&
                       !xAU5Conditions.isXLHLLSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Not Same LL or HH in Lenght ...
                     ((!xAU5Conditions.isXLHHHSameInLength &&
                       !xAU5Conditions.isXLHLLSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     )
                 //
                 )
                //
                )
            //
            )
        //
        ;

    //
    return result;
}

//
// XSI Long Signal Checking ...
bool XAU5XSIHasLongSignal()
{
    //
    bool result = false;

    //
    // Validate Args ...
    if (!xAU5MXSIEnableSignaller ||
        !xAU5MXSIAllowLongSignals)
    {
        return result;
    }

    //
    // Start Analysing Market based On Conditions ...
    result =
        //
        // Base Condition:
        // each Strategy must has a Base Conditions, which they are usually common combinations
        // of Market Properties that must be happens to lookup for signals ...
        (
            //
            xAU5Conditions.isXRSICrossedOverLongEntry &&
            xRSIBuffer[3] < xRSILongEntryValue
            //
            )
        //
        &&
        //
        // Next Step is combine sorts of Conditions which make our choice
        // so Exact in Market ...
        (
            //
            // Exception Cases for XCHMA Min or Max ...
            !(
                //
                // XCHMA MAX ...
                (
                    //
                    (xAU5Conditions.isXCHMASCOverMax ||
                     xAU5Conditions.isXCHMASCCrossedOverMax) &&
                    (xAU5Conditions.isXCHMASCUnderMax ||
                     xAU5Conditions.isXCHMASCCrossedUnderMax)
                    //
                    )
                //
                ||
                //
                // XCHMA MIN ...
                (
                    //
                    (xAU5Conditions.isXCHMASCOverMin ||
                     xAU5Conditions.isXCHMASCCrossedOverMin) &&
                    (xAU5Conditions.isXCHMASCUnderMin ||
                     xAU5Conditions.isXCHMASCCrossedUnderMin)
                    //
                    )
                //
                )
            //
            &&
            //
            // Check XCHMA Trend Bullish ...
            (
                //
                // All Cycles Bullish ...
                (
                    //
                    // SC ...
                    (xAU5Conditions.isXCHMASCFastOverSlow ||
                     xAU5Conditions.isXCHMASCFastCrossedOverSlow)
                    //
                    &&
                    //
                    // MC ...
                    (xAU5Conditions.isXCHMAMCFastOverSlow ||
                     xAU5Conditions.isXCHMAMCFastCrossedOverSlow)
                    //
                    &&
                    //
                    // LC ...
                    (xAU5Conditions.isXCHMALCFastOverSlow ||
                     xAU5Conditions.isXCHMALCFastCrossedOverSlow)
                    //
                    )
                //
                ||
                //
                // Two Cycle Fully Bullish ...
                (
                    //
                    // SC and MC ...
                    (
                        //
                        // SC ...
                        (
                            // !xAU5Conditions.isXCHMASCTrendsDown &&
                            (xAU5Conditions.isXCHMASCFastOverSlow ||
                             xAU5Conditions.isXCHMASCFastCrossedOverSlow))
                        //
                        &&
                        //
                        // MC ...
                        (
                            // !xAU5Conditions.isXCHMAMCTrendsDown &&
                            (xAU5Conditions.isXCHMAMCFastOverSlow ||
                             xAU5Conditions.isXCHMAMCFastCrossedOverSlow))
                        //
                        )
                    //
                    ||
                    //
                    // SC and LC ...
                    (
                        //
                        // SC ...
                        (
                            // !xAU5Conditions.isXCHMASCTrendsDown &&
                            (xAU5Conditions.isXCHMASCFastOverSlow ||
                             xAU5Conditions.isXCHMASCFastCrossedOverSlow))
                        //
                        &&
                        //
                        // LC ...
                        (
                            // !xAU5Conditions.isXCHMALCTrendsDown &&
                            (xAU5Conditions.isXCHMALCFastOverSlow ||
                             xAU5Conditions.isXCHMALCFastCrossedOverSlow))
                        //
                        )
                    //
                    ||
                    //
                    // MC and LC ...
                    (
                        //
                        // MC ...
                        (
                            // !xAU5Conditions.isXCHMAMCTrendsDown &&
                            (xAU5Conditions.isXCHMAMCFastOverSlow ||
                             xAU5Conditions.isXCHMAMCFastCrossedOverSlow))
                        //
                        &&
                        //
                        // LC ...
                        (
                            // !xAU5Conditions.isXCHMALCTrendsDown &&
                            (xAU5Conditions.isXCHMALCFastOverSlow ||
                             xAU5Conditions.isXCHMALCFastCrossedOverSlow))
                        //
                        )
                    //
                    )
                //
                )
            //
            &&
            //
            // XCHMA Check Peaks ...
            !(
                //
                // All Cycles Peak ...
                (
                    xAU5Conditions.isXCHMASCPeak &&
                    xAU5Conditions.isXCHMAMCPeak &&
                    xAU5Conditions.isXCHMALCPeak)
                //
                ||
                //
                (
                    //
                    // SC MC ...
                    (xAU5Conditions.isXCHMASCPeak &&
                     xAU5Conditions.isXCHMAMCPeak)
                    //
                    ||
                    //
                    // SC LC ...
                    (xAU5Conditions.isXCHMASCPeak &&
                     xAU5Conditions.isXCHMALCPeak)
                    //
                    ||
                    //
                    // MC LC ...
                    (xAU5Conditions.isXCHMAMCPeak &&
                     xAU5Conditions.isXCHMALCPeak)
                    //
                    )
                //
                )
            //
            &&
            //
            // Check XOBD Swings ...
            !xAU5Conditions.isXOBDSwingLow
            //
            )
        //
        &&
        //
        // Exceptions:
        // there some commonly Exceptions which makes our choice incorrect,
        // here we are combined knownly Exceptions ...
        !(
            //
            // for Exception we used XLH Conditions as follow ...
            //
            // Check Conditions if Price In Signal Range ...
            (xAU5Conditions.isXLHPriceInSignalRange &&
             //
             (
                 //
                 // Next Step is to Check LL and HH Same Style ...
                 //
                 // Check if Both LL and HH Same In Length ...
                 ((xAU5Conditions.isXLHLLSameInLength &&
                   xAU5Conditions.isXLHHHSameInLength) &&
                  //
                  (
                      //
                      false
                      //
                      )
                  //
                  )
                 //
                 ||
                 //
                 // Check If LL Same In Length ...
                 ((xAU5Conditions.isXLHLLSameInLength &&
                   !xAU5Conditions.isXLHHHSameInLength) &&
                  //
                  (
                      //
                      false
                      //
                      )
                  //
                  )
                 //
                 ||
                 //
                 // Check If HH is Same In Length ...
                 ((xAU5Conditions.isXLHHHSameInLength &&
                   !xAU5Conditions.isXLHLLSameInLength) &&
                  //
                  (
                      //
                      false
                      //
                      )
                  //
                  )
                 //
                 ||
                 //
                 // Not Same LL or HH in Lenght ...
                 ((!xAU5Conditions.isXLHHHSameInLength &&
                   !xAU5Conditions.isXLHLLSameInLength) &&
                  //
                  (
                      //
                      false
                      //
                      )
                  //
                  )
                 //
                 )
             //
             )
            //
            ||
            //
            // Check Conditions if Price is Under Signal ...
            (
                //
                ((xAU5Conditions.isXLHPriceUnderSignal ||
                  xAU5Conditions.isXLHPriceCrossedUnderSignal) &&
                 (
                     //
                     // Next Step is to Check LL and HH Same Style ...
                     //
                     // Check if Both LL and HH Same In Length ...
                     ((xAU5Conditions.isXLHLLSameInLength &&
                       xAU5Conditions.isXLHHHSameInLength) &&
                      //
                      (
                          //
                          (xAU5Conditions.isXCHMALCPeak &&
                           xAU5Conditions.isXTDSignalVale &&
                           xAU5Conditions.isXTDBullishVale)
                          //
                          ||
                          //
                          ((xAU5Conditions.isXCHMASCTrendsUp &&
                            (xAU5Conditions.isXCHMASCFastUnderSlow ||
                             xAU5Conditions.isXCHMASCFastCrossedUnderSlow)) &&
                           (xAU5Conditions.isXCHMAMCTrendsDown &&
                            (xAU5Conditions.isXCHMAMCFastOverSlow ||
                             xAU5Conditions.isXCHMAMCFastCrossedOverSlow)) &&
                           (xAU5Conditions.isXCHMALCTrendsDown &&
                            (xAU5Conditions.isXCHMALCFastOverSlow ||
                             xAU5Conditions.isXCHMALCFastCrossedOverSlow)))
                          //
                          ||
                          //
                          ((xAU5Conditions.isXTMVale ||
                            xAU5Conditions.isXTMBearish) &&
                           xAU5Conditions.isXTSCurrentMax &&
                           xAU5Conditions.isXLHLLDecreased &&
                           xAU5Conditions.isXCHLHSCMCLLSame &&
                           xAU5Conditions.isXCHLHMCLCHHSame)
                          //
                          ||
                          //
                          ((xAU5Conditions.isXCHMAMCVale &&
                            (xAU5Conditions.isXCHMAMCFastUnderSlow ||
                             xAU5Conditions.isXCHMAMCFastCrossedUnderSlow)) &&
                           (xAU5Conditions.isXCHMALCVale &&
                            xAU5Conditions.isXCHMALCTrendsDown &&
                            (xAU5Conditions.isXCHMALCFastOverSlow ||
                             xAU5Conditions.isXCHMALCFastCrossedOverSlow)))
                          //
                          )
                      //
                      )
                     //
                     ||
                     //
                     // Check If LL Same In Length ...
                     ((xAU5Conditions.isXLHLLSameInLength &&
                       !xAU5Conditions.isXLHHHSameInLength) &&
                      //
                      (
                          //
                          false
                          //
                          )
                      //
                      )
                     //
                     ||
                     //
                     // Check If HH is Same In Length ...
                     ((xAU5Conditions.isXLHHHSameInLength &&
                       !xAU5Conditions.isXLHLLSameInLength) &&
                      //
                      (
                          //
                          (xAU5Conditions.isXTMVale &&
                           xAU5Conditions.isXAMAVale &&
                           xAU5Conditions.isXTSCurrentMin &&
                           xAU5Conditions.isXCHLHSCMCLLSame &&
                           xAU5Conditions.isXCHLHMCLCHHSame &&
                           xAU5Conditions.isXLHLowAttachedLL)
                          //
                          ||
                          //
                          (xAU5Conditions.isXCHMASCVale &&
                           xAU5Conditions.isXCHMASCTrendsUp &&
                           (xAU5Conditions.isXCHMASCFastUnderSlow ||
                            xAU5Conditions.isXCHMASCFastCrossedUnderSlow) &&
                           xAU5Conditions.isXCHMALCPeak &&
                           (xAU5Conditions.isXCHMALCFastOverSlow ||
                            xAU5Conditions.isXCHMALCFastCrossedOverSlow))
                          //
                          ||
                          //
                          ((
                               //
                               (
                                   (xAU5Conditions.isXTMVale ||
                                    xAU5Conditions.isXTMBearish) &&
                                   (xAU5Conditions.isXAMAVale ||
                                    xAU5Conditions.isXAMABearish) &&
                                   xAU5Conditions.isXTDSignalVale &&
                                   xAU5Conditions.isXTDBullishVale)
                               //
                               ) &&
                           (xAU5Conditions.isXCHMALCPeak &&
                            (xAU5Conditions.isXCHMALCFastOverSlow ||
                             xAU5Conditions.isXCHMALCFastCrossedOverSlow)))
                          //
                          ||
                          //
                          ((xAU5Conditions.isXCHMASCVale &&
                            (xAU5Conditions.isXCHMASCFastUnderSlow ||
                             xAU5Conditions.isXCHMASCFastCrossedUnderSlow)) &&
                           (xAU5Conditions.isXCHMAMCVale &&
                            (xAU5Conditions.isXCHMAMCFastOverSlow ||
                             xAU5Conditions.isXCHMAMCFastCrossedOverSlow)))
                          //
                          )
                      //
                      )
                     //
                     ||
                     //
                     // Not Same LL or HH in Lenght ...
                     ((!xAU5Conditions.isXLHHHSameInLength &&
                       !xAU5Conditions.isXLHLLSameInLength) &&
                      //
                      (
                          //
                          (
                              xAU5Conditions.isXCHMASCVale &&
                              xAU5Conditions.isXCHMASCTrendsUp &&
                              (xAU5Conditions.isXCHMASCFastUnderSlow ||
                               xAU5Conditions.isXCHMASCFastCrossedUnderSlow))
                          //
                          ||
                          //
                          (
                              xAU5Conditions.isXTMVale &&
                              xAU5Conditions.isXAMAVale &&
                              xAU5Conditions.isXTDSignalVale &&
                              xAU5Conditions.isXTDBullishVale &&
                              xAU5Conditions.isXTMStartBearish &&
                              xAU5Conditions.isXAMAStartBearish &&
                              xAU5Conditions.isXLHLowAttachedLL)
                          //
                          ||
                          //
                          (xAU5Conditions.isXTMVale &&
                           xAU5Conditions.isXTMNeutural &&
                           xAU5Conditions.isXTMEndBearish &&
                           xAU5Conditions.isXLHLLDecreased &&
                           xAU5Conditions.isXCHLHSCMCLLSame)
                          //
                          ||
                          //
                          (xAU5Conditions.isXCHMASCVale &&
                           xAU5Conditions.isXCHMAMCVale &&
                           xAU5Conditions.isXCHMALCPeak &&
                           (xAU5Conditions.isXCHMALCFastOverSlow ||
                            xAU5Conditions.isXCHMALCFastCrossedOverSlow))
                          //
                          )
                      //
                      )
                     //
                     )
                 //
                 )
                //
                )
            //
            ||
            //
            // Check Conditions if Price is Over Signal ...
            (
                //
                ((xAU5Conditions.isXLHPriceOverSignal ||
                  xAU5Conditions.isXLHPriceCrossedOverSignal) &&
                 (
                     //
                     // Next Step is to Check LL and HH Same Style ...
                     //
                     // Check if Both LL and HH Same In Length ...
                     ((xAU5Conditions.isXLHLLSameInLength &&
                       xAU5Conditions.isXLHHHSameInLength) &&
                      //
                      (
                          //
                          false
                          //
                          )
                      //
                      )
                     //
                     ||
                     //
                     // Check If LL Same In Length ...
                     ((xAU5Conditions.isXLHLLSameInLength &&
                       !xAU5Conditions.isXLHHHSameInLength) &&
                      //
                      (
                          //
                          false
                          //
                          )
                      //
                      )
                     //
                     ||
                     //
                     // Check If HH is Same In Length ...
                     ((xAU5Conditions.isXLHHHSameInLength &&
                       !xAU5Conditions.isXLHLLSameInLength) &&
                      //
                      (
                          //
                          false
                          //
                          )
                      //
                      )
                     //
                     ||
                     //
                     // Not Same LL or HH in Lenght ...
                     ((!xAU5Conditions.isXLHHHSameInLength &&
                       !xAU5Conditions.isXLHLLSameInLength) &&
                      //
                      (
                          //
                          false
                          //
                          )
                      //
                      )
                     //
                     )
                 //
                 )
                //
                )
            //
            ||
            //
            // Check Conditions if Price is not has clear state ...
            (
                //
                ((!xAU5Conditions.isXLHPriceOverSignal &&
                  !xAU5Conditions.isXLHPriceUnderSignal &&
                  !xAU5Conditions.isXLHPriceInSignalRange &&
                  !xAU5Conditions.isXLHPriceCrossedOverSignal &&
                  !xAU5Conditions.isXLHPriceCrossedUnderSignal) &&
                 (
                     //
                     // Next Step is to Check LL and HH Same Style ...
                     //
                     // Check if Both LL and HH Same In Length ...
                     ((xAU5Conditions.isXLHLLSameInLength &&
                       xAU5Conditions.isXLHHHSameInLength) &&
                      //
                      (
                          //
                          false
                          //
                          )
                      //
                      )
                     //
                     ||
                     //
                     // Check If LL Same In Length ...
                     ((xAU5Conditions.isXLHLLSameInLength &&
                       !xAU5Conditions.isXLHHHSameInLength) &&
                      //
                      (
                          //
                          false
                          //
                          )
                      //
                      )
                     //
                     ||
                     //
                     // Check If HH is Same In Length ...
                     ((xAU5Conditions.isXLHHHSameInLength &&
                       !xAU5Conditions.isXLHLLSameInLength) &&
                      //
                      (
                          //
                          false
                          //
                          )
                      //
                      )
                     //
                     ||
                     //
                     // Not Same LL or HH in Lenght ...
                     ((!xAU5Conditions.isXLHHHSameInLength &&
                       !xAU5Conditions.isXLHLLSameInLength) &&
                      //
                      (
                          //
                          false
                          //
                          )
                      //
                      )
                     //
                     )
                 //
                 )
                //
                )
            //
            )
        //
        ;

    //
    return result;
}

//
// XSI Short Signal Checking ...
bool XAU5XSIHasShortSignal()
{
    //
    bool result = false;

    //
    // Validate Args ...
    if (!xAU5MXSIEnableSignaller ||
        !xAU5MXSIAllowShortSignals)
    {
        return result;
    }

    //
    // Start Analysing Market based On Conditions ...
    result =
        //
        // Base Condition:
        // each Strategy must has a Base Conditions, which they are usually common combinations
        // of Market Properties that must be happens to lookup for signals ...
        (
            //
            false
            //
            )
        //
        &&
        //
        // Next Step is combine sorts of Conditions which make our choice
        // so Exact in Market ...
        (
            //
            false
            //
            )
        //
        &&
        //
        // Exceptions:
        // there some commonly Exceptions which makes our choice incorrect,
        // here we are combined knownly Exceptions ...
        !(
            //
            // for Exception we used XLH Conditions as follow ...
            //
            // Check Conditions if Price In Signal Range ...
            (xAU5Conditions.isXLHPriceInSignalRange &&
             //
             (
                 //
                 // Next Step is to Check LL and HH Same Style ...
                 //
                 // Check if Both LL and HH Same In Length ...
                 ((xAU5Conditions.isXLHLLSameInLength &&
                   xAU5Conditions.isXLHHHSameInLength) &&
                  //
                  (
                      false)
                  //
                  )
                 //
                 ||
                 //
                 // Check If LL Same In Length ...
                 ((xAU5Conditions.isXLHLLSameInLength &&
                   !xAU5Conditions.isXLHHHSameInLength) &&
                  //
                  (
                      false)
                  //
                  )
                 //
                 ||
                 //
                 // Check If HH is Same In Length ...
                 ((xAU5Conditions.isXLHHHSameInLength &&
                   !xAU5Conditions.isXLHLLSameInLength) &&
                  //
                  (
                      false)
                  //
                  )
                 //
                 ||
                 //
                 // Not Same LL or HH in Lenght ...
                 ((!xAU5Conditions.isXLHHHSameInLength &&
                   !xAU5Conditions.isXLHLLSameInLength) &&
                  //
                  (
                      false)
                  //
                  )
                 //
                 )
             //
             )
            //
            ||
            //
            // Check Conditions if Price is Under Signal ...
            (
                //
                ((xAU5Conditions.isXLHPriceUnderSignal ||
                  xAU5Conditions.isXLHPriceCrossedUnderSignal) &&
                 (
                     //
                     // Next Step is to Check LL and HH Same Style ...
                     //
                     // Check if Both LL and HH Same In Length ...
                     ((xAU5Conditions.isXLHLLSameInLength &&
                       xAU5Conditions.isXLHHHSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Check If LL Same In Length ...
                     ((xAU5Conditions.isXLHLLSameInLength &&
                       !xAU5Conditions.isXLHHHSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Check If HH is Same In Length ...
                     ((xAU5Conditions.isXLHHHSameInLength &&
                       !xAU5Conditions.isXLHLLSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Not Same LL or HH in Lenght ...
                     ((!xAU5Conditions.isXLHHHSameInLength &&
                       !xAU5Conditions.isXLHLLSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     )
                 //
                 )
                //
                )
            //
            ||
            //
            // Check Conditions if Price is Over Signal ...
            (
                //
                ((xAU5Conditions.isXLHPriceOverSignal ||
                  xAU5Conditions.isXLHPriceCrossedOverSignal) &&
                 (
                     //
                     // Next Step is to Check LL and HH Same Style ...
                     //
                     // Check if Both LL and HH Same In Length ...
                     ((xAU5Conditions.isXLHLLSameInLength &&
                       xAU5Conditions.isXLHHHSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Check If LL Same In Length ...
                     ((xAU5Conditions.isXLHLLSameInLength &&
                       !xAU5Conditions.isXLHHHSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Check If HH is Same In Length ...
                     ((xAU5Conditions.isXLHHHSameInLength &&
                       !xAU5Conditions.isXLHLLSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Not Same LL or HH in Lenght ...
                     ((!xAU5Conditions.isXLHHHSameInLength &&
                       !xAU5Conditions.isXLHLLSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     )
                 //
                 )
                //
                )
            //
            ||
            //
            // Check Conditions if Price is not has clear state ...
            (
                //
                ((!xAU5Conditions.isXLHPriceOverSignal &&
                  !xAU5Conditions.isXLHPriceUnderSignal &&
                  !xAU5Conditions.isXLHPriceInSignalRange &&
                  !xAU5Conditions.isXLHPriceCrossedOverSignal &&
                  !xAU5Conditions.isXLHPriceCrossedUnderSignal) &&
                 (
                     //
                     // Next Step is to Check LL and HH Same Style ...
                     //
                     // Check if Both LL and HH Same In Length ...
                     ((xAU5Conditions.isXLHLLSameInLength &&
                       xAU5Conditions.isXLHHHSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Check If LL Same In Length ...
                     ((xAU5Conditions.isXLHLLSameInLength &&
                       !xAU5Conditions.isXLHHHSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Check If HH is Same In Length ...
                     ((xAU5Conditions.isXLHHHSameInLength &&
                       !xAU5Conditions.isXLHLLSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Not Same LL or HH in Lenght ...
                     ((!xAU5Conditions.isXLHHHSameInLength &&
                       !xAU5Conditions.isXLHLLSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     )
                 //
                 )
                //
                )
            //
            )
        //
        ;

    //
    return result;
}

//
// XSTFI Long Signal Checking ...
bool XAU5XSTFIHasLongSignal()
{
    //
    bool result = false;

    //
    // Validate Args ...
    if (!xAU5MXSTFIEnableSignaller ||
        !xAU5MXSTFIAllowLongSignals)
    {
        return result;
    }

    //
    // Start Analysing Market based On Conditions ...
    result =
        //
        // Base Condition:
        // each Strategy must has a Base Conditions, which they are usually common combinations
        // of Market Properties that must be happens to lookup for signals ...
        (
            //
            false
            //
            )
        //
        &&
        //
        // Next Step is combine sorts of Conditions which make our choice
        // so Exact in Market ...
        (
            //
            false
            //
            )
        //
        &&
        //
        // Exceptions:
        // there some commonly Exceptions which makes our choice incorrect,
        // here we are combined knownly Exceptions ...
        !(
            //
            // for Exception we used XLH Conditions as follow ...
            //
            // Check Conditions if Price In Signal Range ...
            (xAU5Conditions.isXLHPriceInSignalRange &&
             //
             (
                 //
                 // Next Step is to Check LL and HH Same Style ...
                 //
                 // Check if Both LL and HH Same In Length ...
                 ((xAU5Conditions.isXLHLLSameInLength &&
                   xAU5Conditions.isXLHHHSameInLength) &&
                  //
                  (
                      false)
                  //
                  )
                 //
                 ||
                 //
                 // Check If LL Same In Length ...
                 ((xAU5Conditions.isXLHLLSameInLength &&
                   !xAU5Conditions.isXLHHHSameInLength) &&
                  //
                  (
                      false)
                  //
                  )
                 //
                 ||
                 //
                 // Check If HH is Same In Length ...
                 ((xAU5Conditions.isXLHHHSameInLength &&
                   !xAU5Conditions.isXLHLLSameInLength) &&
                  //
                  (
                      false)
                  //
                  )
                 //
                 ||
                 //
                 // Not Same LL or HH in Lenght ...
                 ((!xAU5Conditions.isXLHHHSameInLength &&
                   !xAU5Conditions.isXLHLLSameInLength) &&
                  //
                  (
                      false)
                  //
                  )
                 //
                 )
             //
             )
            //
            ||
            //
            // Check Conditions if Price is Under Signal ...
            (
                //
                ((xAU5Conditions.isXLHPriceUnderSignal ||
                  xAU5Conditions.isXLHPriceCrossedUnderSignal) &&
                 (
                     //
                     // Next Step is to Check LL and HH Same Style ...
                     //
                     // Check if Both LL and HH Same In Length ...
                     ((xAU5Conditions.isXLHLLSameInLength &&
                       xAU5Conditions.isXLHHHSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Check If LL Same In Length ...
                     ((xAU5Conditions.isXLHLLSameInLength &&
                       !xAU5Conditions.isXLHHHSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Check If HH is Same In Length ...
                     ((xAU5Conditions.isXLHHHSameInLength &&
                       !xAU5Conditions.isXLHLLSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Not Same LL or HH in Lenght ...
                     ((!xAU5Conditions.isXLHHHSameInLength &&
                       !xAU5Conditions.isXLHLLSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     )
                 //
                 )
                //
                )
            //
            ||
            //
            // Check Conditions if Price is Over Signal ...
            (
                //
                ((xAU5Conditions.isXLHPriceOverSignal ||
                  xAU5Conditions.isXLHPriceCrossedOverSignal) &&
                 (
                     //
                     // Next Step is to Check LL and HH Same Style ...
                     //
                     // Check if Both LL and HH Same In Length ...
                     ((xAU5Conditions.isXLHLLSameInLength &&
                       xAU5Conditions.isXLHHHSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Check If LL Same In Length ...
                     ((xAU5Conditions.isXLHLLSameInLength &&
                       !xAU5Conditions.isXLHHHSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Check If HH is Same In Length ...
                     ((xAU5Conditions.isXLHHHSameInLength &&
                       !xAU5Conditions.isXLHLLSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Not Same LL or HH in Lenght ...
                     ((!xAU5Conditions.isXLHHHSameInLength &&
                       !xAU5Conditions.isXLHLLSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     )
                 //
                 )
                //
                )
            //
            ||
            //
            // Check Conditions if Price is not has clear state ...
            (
                //
                ((!xAU5Conditions.isXLHPriceOverSignal &&
                  !xAU5Conditions.isXLHPriceUnderSignal &&
                  !xAU5Conditions.isXLHPriceInSignalRange &&
                  !xAU5Conditions.isXLHPriceCrossedOverSignal &&
                  !xAU5Conditions.isXLHPriceCrossedUnderSignal) &&
                 (
                     //
                     // Next Step is to Check LL and HH Same Style ...
                     //
                     // Check if Both LL and HH Same In Length ...
                     ((xAU5Conditions.isXLHLLSameInLength &&
                       xAU5Conditions.isXLHHHSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Check If LL Same In Length ...
                     ((xAU5Conditions.isXLHLLSameInLength &&
                       !xAU5Conditions.isXLHHHSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Check If HH is Same In Length ...
                     ((xAU5Conditions.isXLHHHSameInLength &&
                       !xAU5Conditions.isXLHLLSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Not Same LL or HH in Lenght ...
                     ((!xAU5Conditions.isXLHHHSameInLength &&
                       !xAU5Conditions.isXLHLLSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     )
                 //
                 )
                //
                )
            //
            )
        //
        ;

    //
    return result;
}

//
// XSTFI Short Signal Checking ...
bool XAU5XSTFIHasShortSignal()
{
    //
    bool result = false;

    //
    // Validate Args ...
    if (!xAU5MXSTFIEnableSignaller ||
        !xAU5MXSTFIAllowShortSignals)
    {
        return result;
    }

    //
    // Start Analysing Market based On Conditions ...
    result =
        //
        // Base Condition:
        // each Strategy must has a Base Conditions, which they are usually common combinations
        // of Market Properties that must be happens to lookup for signals ...
        (
            //
            false
            //
            )
        //
        &&
        //
        // Next Step is combine sorts of Conditions which make our choice
        // so Exact in Market ...
        (
            //
            false
            //
            )
        //
        &&
        //
        // Exceptions:
        // there some commonly Exceptions which makes our choice incorrect,
        // here we are combined knownly Exceptions ...
        !(
            //
            // for Exception we used XLH Conditions as follow ...
            //
            // Check Conditions if Price In Signal Range ...
            (xAU5Conditions.isXLHPriceInSignalRange &&
             //
             (
                 //
                 // Next Step is to Check LL and HH Same Style ...
                 //
                 // Check if Both LL and HH Same In Length ...
                 ((xAU5Conditions.isXLHLLSameInLength &&
                   xAU5Conditions.isXLHHHSameInLength) &&
                  //
                  (
                      false)
                  //
                  )
                 //
                 ||
                 //
                 // Check If LL Same In Length ...
                 ((xAU5Conditions.isXLHLLSameInLength &&
                   !xAU5Conditions.isXLHHHSameInLength) &&
                  //
                  (
                      false)
                  //
                  )
                 //
                 ||
                 //
                 // Check If HH is Same In Length ...
                 ((xAU5Conditions.isXLHHHSameInLength &&
                   !xAU5Conditions.isXLHLLSameInLength) &&
                  //
                  (
                      false)
                  //
                  )
                 //
                 ||
                 //
                 // Not Same LL or HH in Lenght ...
                 ((!xAU5Conditions.isXLHHHSameInLength &&
                   !xAU5Conditions.isXLHLLSameInLength) &&
                  //
                  (
                      false)
                  //
                  )
                 //
                 )
             //
             )
            //
            ||
            //
            // Check Conditions if Price is Under Signal ...
            (
                //
                ((xAU5Conditions.isXLHPriceUnderSignal ||
                  xAU5Conditions.isXLHPriceCrossedUnderSignal) &&
                 (
                     //
                     // Next Step is to Check LL and HH Same Style ...
                     //
                     // Check if Both LL and HH Same In Length ...
                     ((xAU5Conditions.isXLHLLSameInLength &&
                       xAU5Conditions.isXLHHHSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Check If LL Same In Length ...
                     ((xAU5Conditions.isXLHLLSameInLength &&
                       !xAU5Conditions.isXLHHHSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Check If HH is Same In Length ...
                     ((xAU5Conditions.isXLHHHSameInLength &&
                       !xAU5Conditions.isXLHLLSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Not Same LL or HH in Lenght ...
                     ((!xAU5Conditions.isXLHHHSameInLength &&
                       !xAU5Conditions.isXLHLLSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     )
                 //
                 )
                //
                )
            //
            ||
            //
            // Check Conditions if Price is Over Signal ...
            (
                //
                ((xAU5Conditions.isXLHPriceOverSignal ||
                  xAU5Conditions.isXLHPriceCrossedOverSignal) &&
                 (
                     //
                     // Next Step is to Check LL and HH Same Style ...
                     //
                     // Check if Both LL and HH Same In Length ...
                     ((xAU5Conditions.isXLHLLSameInLength &&
                       xAU5Conditions.isXLHHHSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Check If LL Same In Length ...
                     ((xAU5Conditions.isXLHLLSameInLength &&
                       !xAU5Conditions.isXLHHHSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Check If HH is Same In Length ...
                     ((xAU5Conditions.isXLHHHSameInLength &&
                       !xAU5Conditions.isXLHLLSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Not Same LL or HH in Lenght ...
                     ((!xAU5Conditions.isXLHHHSameInLength &&
                       !xAU5Conditions.isXLHLLSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     )
                 //
                 )
                //
                )
            //
            ||
            //
            // Check Conditions if Price is not has clear state ...
            (
                //
                ((!xAU5Conditions.isXLHPriceOverSignal &&
                  !xAU5Conditions.isXLHPriceUnderSignal &&
                  !xAU5Conditions.isXLHPriceInSignalRange &&
                  !xAU5Conditions.isXLHPriceCrossedOverSignal &&
                  !xAU5Conditions.isXLHPriceCrossedUnderSignal) &&
                 (
                     //
                     // Next Step is to Check LL and HH Same Style ...
                     //
                     // Check if Both LL and HH Same In Length ...
                     ((xAU5Conditions.isXLHLLSameInLength &&
                       xAU5Conditions.isXLHHHSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Check If LL Same In Length ...
                     ((xAU5Conditions.isXLHLLSameInLength &&
                       !xAU5Conditions.isXLHHHSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Check If HH is Same In Length ...
                     ((xAU5Conditions.isXLHHHSameInLength &&
                       !xAU5Conditions.isXLHLLSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Not Same LL or HH in Lenght ...
                     ((!xAU5Conditions.isXLHHHSameInLength &&
                       !xAU5Conditions.isXLHLLSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     )
                 //
                 )
                //
                )
            //
            )
        //
        ;

    //
    return result;
}

//
// XOBDLH Long Signal Checking ...
bool XAU5XOBDLHHasLongSignal()
{
    //
    bool result = false;

    //
    // Validate Args ...
    if (!xAU5MXOBDLHEnableSignaller ||
        !xAU5MXOBDLHAllowLongSignals)
    {
        return result;
    }

    //
    // Start Analysing Market based On Conditions ...
    result =
        //
        // Base Condition:
        // each Strategy must has a Base Conditions, which they are usually common combinations
        // of Market Properties that must be happens to lookup for signals ...
        (
            //
            false
            //
            )
        //
        &&
        //
        // Next Step is combine sorts of Conditions which make our choice
        // so Exact in Market ...
        (
            //
            false
            //
            )
        //
        &&
        //
        // Exceptions:
        // there some commonly Exceptions which makes our choice incorrect,
        // here we are combined knownly Exceptions ...
        !(
            //
            // for Exception we used XLH Conditions as follow ...
            //
            // Check Conditions if Price In Signal Range ...
            (xAU5Conditions.isXLHPriceInSignalRange &&
             //
             (
                 //
                 // Next Step is to Check LL and HH Same Style ...
                 //
                 // Check if Both LL and HH Same In Length ...
                 ((xAU5Conditions.isXLHLLSameInLength &&
                   xAU5Conditions.isXLHHHSameInLength) &&
                  //
                  (
                      false)
                  //
                  )
                 //
                 ||
                 //
                 // Check If LL Same In Length ...
                 ((xAU5Conditions.isXLHLLSameInLength &&
                   !xAU5Conditions.isXLHHHSameInLength) &&
                  //
                  (
                      false)
                  //
                  )
                 //
                 ||
                 //
                 // Check If HH is Same In Length ...
                 ((xAU5Conditions.isXLHHHSameInLength &&
                   !xAU5Conditions.isXLHLLSameInLength) &&
                  //
                  (
                      false)
                  //
                  )
                 //
                 ||
                 //
                 // Not Same LL or HH in Lenght ...
                 ((!xAU5Conditions.isXLHHHSameInLength &&
                   !xAU5Conditions.isXLHLLSameInLength) &&
                  //
                  (
                      false)
                  //
                  )
                 //
                 )
             //
             )
            //
            ||
            //
            // Check Conditions if Price is Under Signal ...
            (
                //
                ((xAU5Conditions.isXLHPriceUnderSignal ||
                  xAU5Conditions.isXLHPriceCrossedUnderSignal) &&
                 (
                     //
                     // Next Step is to Check LL and HH Same Style ...
                     //
                     // Check if Both LL and HH Same In Length ...
                     ((xAU5Conditions.isXLHLLSameInLength &&
                       xAU5Conditions.isXLHHHSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Check If LL Same In Length ...
                     ((xAU5Conditions.isXLHLLSameInLength &&
                       !xAU5Conditions.isXLHHHSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Check If HH is Same In Length ...
                     ((xAU5Conditions.isXLHHHSameInLength &&
                       !xAU5Conditions.isXLHLLSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Not Same LL or HH in Lenght ...
                     ((!xAU5Conditions.isXLHHHSameInLength &&
                       !xAU5Conditions.isXLHLLSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     )
                 //
                 )
                //
                )
            //
            ||
            //
            // Check Conditions if Price is Over Signal ...
            (
                //
                ((xAU5Conditions.isXLHPriceOverSignal ||
                  xAU5Conditions.isXLHPriceCrossedOverSignal) &&
                 (
                     //
                     // Next Step is to Check LL and HH Same Style ...
                     //
                     // Check if Both LL and HH Same In Length ...
                     ((xAU5Conditions.isXLHLLSameInLength &&
                       xAU5Conditions.isXLHHHSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Check If LL Same In Length ...
                     ((xAU5Conditions.isXLHLLSameInLength &&
                       !xAU5Conditions.isXLHHHSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Check If HH is Same In Length ...
                     ((xAU5Conditions.isXLHHHSameInLength &&
                       !xAU5Conditions.isXLHLLSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Not Same LL or HH in Lenght ...
                     ((!xAU5Conditions.isXLHHHSameInLength &&
                       !xAU5Conditions.isXLHLLSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     )
                 //
                 )
                //
                )
            //
            ||
            //
            // Check Conditions if Price is not has clear state ...
            (
                //
                ((!xAU5Conditions.isXLHPriceOverSignal &&
                  !xAU5Conditions.isXLHPriceUnderSignal &&
                  !xAU5Conditions.isXLHPriceInSignalRange &&
                  !xAU5Conditions.isXLHPriceCrossedOverSignal &&
                  !xAU5Conditions.isXLHPriceCrossedUnderSignal) &&
                 (
                     //
                     // Next Step is to Check LL and HH Same Style ...
                     //
                     // Check if Both LL and HH Same In Length ...
                     ((xAU5Conditions.isXLHLLSameInLength &&
                       xAU5Conditions.isXLHHHSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Check If LL Same In Length ...
                     ((xAU5Conditions.isXLHLLSameInLength &&
                       !xAU5Conditions.isXLHHHSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Check If HH is Same In Length ...
                     ((xAU5Conditions.isXLHHHSameInLength &&
                       !xAU5Conditions.isXLHLLSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Not Same LL or HH in Lenght ...
                     ((!xAU5Conditions.isXLHHHSameInLength &&
                       !xAU5Conditions.isXLHLLSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     )
                 //
                 )
                //
                )
            //
            )
        //
        ;

    //
    return result;
}

//
// XOBDLH Short Signal Checking ...
bool XAU5XOBDLHHasShortSignal()
{
    //
    bool result = false;

    //
    // Validate Args ...
    if (!xAU5MXOBDLHEnableSignaller ||
        !xAU5MXOBDLHAllowShortSignals)
    {
        return result;
    }

    //
    // Start Analysing Market based On Conditions ...
    result =
        //
        // Base Condition:
        // each Strategy must has a Base Conditions, which they are usually common combinations
        // of Market Properties that must be happens to lookup for signals ...
        (
            //
            false
            //
            )
        //
        &&
        //
        // Next Step is combine sorts of Conditions which make our choice
        // so Exact in Market ...
        (
            //
            false
            //
            )
        //
        &&
        //
        // Exceptions:
        // there some commonly Exceptions which makes our choice incorrect,
        // here we are combined knownly Exceptions ...
        !(
            //
            // for Exception we used XLH Conditions as follow ...
            //
            // Check Conditions if Price In Signal Range ...
            (xAU5Conditions.isXLHPriceInSignalRange &&
             //
             (
                 //
                 // Next Step is to Check LL and HH Same Style ...
                 //
                 // Check if Both LL and HH Same In Length ...
                 ((xAU5Conditions.isXLHLLSameInLength &&
                   xAU5Conditions.isXLHHHSameInLength) &&
                  //
                  (
                      false)
                  //
                  )
                 //
                 ||
                 //
                 // Check If LL Same In Length ...
                 ((xAU5Conditions.isXLHLLSameInLength &&
                   !xAU5Conditions.isXLHHHSameInLength) &&
                  //
                  (
                      false)
                  //
                  )
                 //
                 ||
                 //
                 // Check If HH is Same In Length ...
                 ((xAU5Conditions.isXLHHHSameInLength &&
                   !xAU5Conditions.isXLHLLSameInLength) &&
                  //
                  (
                      false)
                  //
                  )
                 //
                 ||
                 //
                 // Not Same LL or HH in Lenght ...
                 ((!xAU5Conditions.isXLHHHSameInLength &&
                   !xAU5Conditions.isXLHLLSameInLength) &&
                  //
                  (
                      false)
                  //
                  )
                 //
                 )
             //
             )
            //
            ||
            //
            // Check Conditions if Price is Under Signal ...
            (
                //
                ((xAU5Conditions.isXLHPriceUnderSignal ||
                  xAU5Conditions.isXLHPriceCrossedUnderSignal) &&
                 (
                     //
                     // Next Step is to Check LL and HH Same Style ...
                     //
                     // Check if Both LL and HH Same In Length ...
                     ((xAU5Conditions.isXLHLLSameInLength &&
                       xAU5Conditions.isXLHHHSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Check If LL Same In Length ...
                     ((xAU5Conditions.isXLHLLSameInLength &&
                       !xAU5Conditions.isXLHHHSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Check If HH is Same In Length ...
                     ((xAU5Conditions.isXLHHHSameInLength &&
                       !xAU5Conditions.isXLHLLSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Not Same LL or HH in Lenght ...
                     ((!xAU5Conditions.isXLHHHSameInLength &&
                       !xAU5Conditions.isXLHLLSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     )
                 //
                 )
                //
                )
            //
            ||
            //
            // Check Conditions if Price is Over Signal ...
            (
                //
                ((xAU5Conditions.isXLHPriceOverSignal ||
                  xAU5Conditions.isXLHPriceCrossedOverSignal) &&
                 (
                     //
                     // Next Step is to Check LL and HH Same Style ...
                     //
                     // Check if Both LL and HH Same In Length ...
                     ((xAU5Conditions.isXLHLLSameInLength &&
                       xAU5Conditions.isXLHHHSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Check If LL Same In Length ...
                     ((xAU5Conditions.isXLHLLSameInLength &&
                       !xAU5Conditions.isXLHHHSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Check If HH is Same In Length ...
                     ((xAU5Conditions.isXLHHHSameInLength &&
                       !xAU5Conditions.isXLHLLSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Not Same LL or HH in Lenght ...
                     ((!xAU5Conditions.isXLHHHSameInLength &&
                       !xAU5Conditions.isXLHLLSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     )
                 //
                 )
                //
                )
            //
            ||
            //
            // Check Conditions if Price is not has clear state ...
            (
                //
                ((!xAU5Conditions.isXLHPriceOverSignal &&
                  !xAU5Conditions.isXLHPriceUnderSignal &&
                  !xAU5Conditions.isXLHPriceInSignalRange &&
                  !xAU5Conditions.isXLHPriceCrossedOverSignal &&
                  !xAU5Conditions.isXLHPriceCrossedUnderSignal) &&
                 (
                     //
                     // Next Step is to Check LL and HH Same Style ...
                     //
                     // Check if Both LL and HH Same In Length ...
                     ((xAU5Conditions.isXLHLLSameInLength &&
                       xAU5Conditions.isXLHHHSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Check If LL Same In Length ...
                     ((xAU5Conditions.isXLHLLSameInLength &&
                       !xAU5Conditions.isXLHHHSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Check If HH is Same In Length ...
                     ((xAU5Conditions.isXLHHHSameInLength &&
                       !xAU5Conditions.isXLHLLSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Not Same LL or HH in Lenght ...
                     ((!xAU5Conditions.isXLHHHSameInLength &&
                       !xAU5Conditions.isXLHLLSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     )
                 //
                 )
                //
                )
            //
            )
        //
        ;

    //
    return result;
}

//
// XCHMACC Long Signal Checking ...
bool XAU5XCHMACCHasLongSignal()
{
    //
    bool result = false;

    //
    // Validate Args ...
    if (!xAU5MXCHMACCEnableSignaller ||
        !xAU5MXCHMACCAllowLongSignals)
    {
        return result;
    }

    //
    // Start Analysing Market based On Conditions ...
    result =
        //
        // Base Condition:
        // each Strategy must has a Base Conditions, which they are usually common combinations
        // of Market Properties that must be happens to lookup for signals ...
        (
            //
            false
            //
            )
        //
        &&
        //
        // Next Step is combine sorts of Conditions which make our choice
        // so Exact in Market ...
        (
            //
            false
            //
            )
        //
        &&
        //
        // Exceptions:
        // there some commonly Exceptions which makes our choice incorrect,
        // here we are combined knownly Exceptions ...
        !(
            //
            // for Exception we used XLH Conditions as follow ...
            //
            // Check Conditions if Price In Signal Range ...
            (xAU5Conditions.isXLHPriceInSignalRange &&
             //
             (
                 //
                 // Next Step is to Check LL and HH Same Style ...
                 //
                 // Check if Both LL and HH Same In Length ...
                 ((xAU5Conditions.isXLHLLSameInLength &&
                   xAU5Conditions.isXLHHHSameInLength) &&
                  //
                  (
                      false)
                  //
                  )
                 //
                 ||
                 //
                 // Check If LL Same In Length ...
                 ((xAU5Conditions.isXLHLLSameInLength &&
                   !xAU5Conditions.isXLHHHSameInLength) &&
                  //
                  (
                      false)
                  //
                  )
                 //
                 ||
                 //
                 // Check If HH is Same In Length ...
                 ((xAU5Conditions.isXLHHHSameInLength &&
                   !xAU5Conditions.isXLHLLSameInLength) &&
                  //
                  (
                      false)
                  //
                  )
                 //
                 ||
                 //
                 // Not Same LL or HH in Lenght ...
                 ((!xAU5Conditions.isXLHHHSameInLength &&
                   !xAU5Conditions.isXLHLLSameInLength) &&
                  //
                  (
                      false)
                  //
                  )
                 //
                 )
             //
             )
            //
            ||
            //
            // Check Conditions if Price is Under Signal ...
            (
                //
                ((xAU5Conditions.isXLHPriceUnderSignal ||
                  xAU5Conditions.isXLHPriceCrossedUnderSignal) &&
                 (
                     //
                     // Next Step is to Check LL and HH Same Style ...
                     //
                     // Check if Both LL and HH Same In Length ...
                     ((xAU5Conditions.isXLHLLSameInLength &&
                       xAU5Conditions.isXLHHHSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Check If LL Same In Length ...
                     ((xAU5Conditions.isXLHLLSameInLength &&
                       !xAU5Conditions.isXLHHHSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Check If HH is Same In Length ...
                     ((xAU5Conditions.isXLHHHSameInLength &&
                       !xAU5Conditions.isXLHLLSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Not Same LL or HH in Lenght ...
                     ((!xAU5Conditions.isXLHHHSameInLength &&
                       !xAU5Conditions.isXLHLLSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     )
                 //
                 )
                //
                )
            //
            ||
            //
            // Check Conditions if Price is Over Signal ...
            (
                //
                ((xAU5Conditions.isXLHPriceOverSignal ||
                  xAU5Conditions.isXLHPriceCrossedOverSignal) &&
                 (
                     //
                     // Next Step is to Check LL and HH Same Style ...
                     //
                     // Check if Both LL and HH Same In Length ...
                     ((xAU5Conditions.isXLHLLSameInLength &&
                       xAU5Conditions.isXLHHHSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Check If LL Same In Length ...
                     ((xAU5Conditions.isXLHLLSameInLength &&
                       !xAU5Conditions.isXLHHHSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Check If HH is Same In Length ...
                     ((xAU5Conditions.isXLHHHSameInLength &&
                       !xAU5Conditions.isXLHLLSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Not Same LL or HH in Lenght ...
                     ((!xAU5Conditions.isXLHHHSameInLength &&
                       !xAU5Conditions.isXLHLLSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     )
                 //
                 )
                //
                )
            //
            ||
            //
            // Check Conditions if Price is not has clear state ...
            (
                //
                ((!xAU5Conditions.isXLHPriceOverSignal &&
                  !xAU5Conditions.isXLHPriceUnderSignal &&
                  !xAU5Conditions.isXLHPriceInSignalRange &&
                  !xAU5Conditions.isXLHPriceCrossedOverSignal &&
                  !xAU5Conditions.isXLHPriceCrossedUnderSignal) &&
                 (
                     //
                     // Next Step is to Check LL and HH Same Style ...
                     //
                     // Check if Both LL and HH Same In Length ...
                     ((xAU5Conditions.isXLHLLSameInLength &&
                       xAU5Conditions.isXLHHHSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Check If LL Same In Length ...
                     ((xAU5Conditions.isXLHLLSameInLength &&
                       !xAU5Conditions.isXLHHHSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Check If HH is Same In Length ...
                     ((xAU5Conditions.isXLHHHSameInLength &&
                       !xAU5Conditions.isXLHLLSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Not Same LL or HH in Lenght ...
                     ((!xAU5Conditions.isXLHHHSameInLength &&
                       !xAU5Conditions.isXLHLLSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     )
                 //
                 )
                //
                )
            //
            )
        //
        ;

    //
    return result;
}

//
// XCHMACC Short Signal Checking ...
bool XAU5XCHMACCHasShortSignal()
{
    //
    bool result = false;

    //
    // Validate Args ...
    if (!xAU5MXCHMACCEnableSignaller ||
        !xAU5MXCHMACCAllowShortSignals)
    {
        return result;
    }

    //
    // Start Analysing Market based On Conditions ...
    result =
        //
        // Base Condition:
        // each Strategy must has a Base Conditions, which they are usually common combinations
        // of Market Properties that must be happens to lookup for signals ...
        (
            //
            false
            //
            )
        //
        &&
        //
        // Next Step is combine sorts of Conditions which make our choice
        // so Exact in Market ...
        (
            //
            false
            //
            )
        //
        &&
        //
        // Exceptions:
        // there some commonly Exceptions which makes our choice incorrect,
        // here we are combined knownly Exceptions ...
        !(
            //
            // for Exception we used XLH Conditions as follow ...
            //
            // Check Conditions if Price In Signal Range ...
            (xAU5Conditions.isXLHPriceInSignalRange &&
             //
             (
                 //
                 // Next Step is to Check LL and HH Same Style ...
                 //
                 // Check if Both LL and HH Same In Length ...
                 ((xAU5Conditions.isXLHLLSameInLength &&
                   xAU5Conditions.isXLHHHSameInLength) &&
                  //
                  (
                      false)
                  //
                  )
                 //
                 ||
                 //
                 // Check If LL Same In Length ...
                 ((xAU5Conditions.isXLHLLSameInLength &&
                   !xAU5Conditions.isXLHHHSameInLength) &&
                  //
                  (
                      false)
                  //
                  )
                 //
                 ||
                 //
                 // Check If HH is Same In Length ...
                 ((xAU5Conditions.isXLHHHSameInLength &&
                   !xAU5Conditions.isXLHLLSameInLength) &&
                  //
                  (
                      false)
                  //
                  )
                 //
                 ||
                 //
                 // Not Same LL or HH in Lenght ...
                 ((!xAU5Conditions.isXLHHHSameInLength &&
                   !xAU5Conditions.isXLHLLSameInLength) &&
                  //
                  (
                      false)
                  //
                  )
                 //
                 )
             //
             )
            //
            ||
            //
            // Check Conditions if Price is Under Signal ...
            (
                //
                ((xAU5Conditions.isXLHPriceUnderSignal ||
                  xAU5Conditions.isXLHPriceCrossedUnderSignal) &&
                 (
                     //
                     // Next Step is to Check LL and HH Same Style ...
                     //
                     // Check if Both LL and HH Same In Length ...
                     ((xAU5Conditions.isXLHLLSameInLength &&
                       xAU5Conditions.isXLHHHSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Check If LL Same In Length ...
                     ((xAU5Conditions.isXLHLLSameInLength &&
                       !xAU5Conditions.isXLHHHSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Check If HH is Same In Length ...
                     ((xAU5Conditions.isXLHHHSameInLength &&
                       !xAU5Conditions.isXLHLLSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Not Same LL or HH in Lenght ...
                     ((!xAU5Conditions.isXLHHHSameInLength &&
                       !xAU5Conditions.isXLHLLSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     )
                 //
                 )
                //
                )
            //
            ||
            //
            // Check Conditions if Price is Over Signal ...
            (
                //
                ((xAU5Conditions.isXLHPriceOverSignal ||
                  xAU5Conditions.isXLHPriceCrossedOverSignal) &&
                 (
                     //
                     // Next Step is to Check LL and HH Same Style ...
                     //
                     // Check if Both LL and HH Same In Length ...
                     ((xAU5Conditions.isXLHLLSameInLength &&
                       xAU5Conditions.isXLHHHSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Check If LL Same In Length ...
                     ((xAU5Conditions.isXLHLLSameInLength &&
                       !xAU5Conditions.isXLHHHSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Check If HH is Same In Length ...
                     ((xAU5Conditions.isXLHHHSameInLength &&
                       !xAU5Conditions.isXLHLLSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Not Same LL or HH in Lenght ...
                     ((!xAU5Conditions.isXLHHHSameInLength &&
                       !xAU5Conditions.isXLHLLSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     )
                 //
                 )
                //
                )
            //
            ||
            //
            // Check Conditions if Price is not has clear state ...
            (
                //
                ((!xAU5Conditions.isXLHPriceOverSignal &&
                  !xAU5Conditions.isXLHPriceUnderSignal &&
                  !xAU5Conditions.isXLHPriceInSignalRange &&
                  !xAU5Conditions.isXLHPriceCrossedOverSignal &&
                  !xAU5Conditions.isXLHPriceCrossedUnderSignal) &&
                 (
                     //
                     // Next Step is to Check LL and HH Same Style ...
                     //
                     // Check if Both LL and HH Same In Length ...
                     ((xAU5Conditions.isXLHLLSameInLength &&
                       xAU5Conditions.isXLHHHSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Check If LL Same In Length ...
                     ((xAU5Conditions.isXLHLLSameInLength &&
                       !xAU5Conditions.isXLHHHSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Check If HH is Same In Length ...
                     ((xAU5Conditions.isXLHHHSameInLength &&
                       !xAU5Conditions.isXLHLLSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Not Same LL or HH in Lenght ...
                     ((!xAU5Conditions.isXLHHHSameInLength &&
                       !xAU5Conditions.isXLHLLSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     )
                 //
                 )
                //
                )
            //
            )
        //
        ;

    //
    return result;
}

//
// XCHMACMN Long Signal Checking ...
bool XAU5XCHMACMNHasLongSignal()
{
    //
    bool result = false;

    //
    // Validate Args ...
    if (!xAU5MXCHMACMNEnableSignaller ||
        !xAU5MXCHMACMNAllowLongSignals)
    {
        return result;
    }

    //
    // Start Analysing Market based On Conditions ...
    result =
        //
        // Base Condition:
        // each Strategy must has a Base Conditions, which they are usually common combinations
        // of Market Properties that must be happens to lookup for signals ...
        (
            //
            false
            //
            )
        //
        &&
        //
        // Next Step is combine sorts of Conditions which make our choice
        // so Exact in Market ...
        (
            //
            false
            //
            )
        //
        &&
        //
        // Exceptions:
        // there some commonly Exceptions which makes our choice incorrect,
        // here we are combined knownly Exceptions ...
        !(
            //
            // for Exception we used XLH Conditions as follow ...
            //
            // Check Conditions if Price In Signal Range ...
            (xAU5Conditions.isXLHPriceInSignalRange &&
             //
             (
                 //
                 // Next Step is to Check LL and HH Same Style ...
                 //
                 // Check if Both LL and HH Same In Length ...
                 ((xAU5Conditions.isXLHLLSameInLength &&
                   xAU5Conditions.isXLHHHSameInLength) &&
                  //
                  (
                      false)
                  //
                  )
                 //
                 ||
                 //
                 // Check If LL Same In Length ...
                 ((xAU5Conditions.isXLHLLSameInLength &&
                   !xAU5Conditions.isXLHHHSameInLength) &&
                  //
                  (
                      false)
                  //
                  )
                 //
                 ||
                 //
                 // Check If HH is Same In Length ...
                 ((xAU5Conditions.isXLHHHSameInLength &&
                   !xAU5Conditions.isXLHLLSameInLength) &&
                  //
                  (
                      false)
                  //
                  )
                 //
                 ||
                 //
                 // Not Same LL or HH in Lenght ...
                 ((!xAU5Conditions.isXLHHHSameInLength &&
                   !xAU5Conditions.isXLHLLSameInLength) &&
                  //
                  (
                      false)
                  //
                  )
                 //
                 )
             //
             )
            //
            ||
            //
            // Check Conditions if Price is Under Signal ...
            (
                //
                ((xAU5Conditions.isXLHPriceUnderSignal ||
                  xAU5Conditions.isXLHPriceCrossedUnderSignal) &&
                 (
                     //
                     // Next Step is to Check LL and HH Same Style ...
                     //
                     // Check if Both LL and HH Same In Length ...
                     ((xAU5Conditions.isXLHLLSameInLength &&
                       xAU5Conditions.isXLHHHSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Check If LL Same In Length ...
                     ((xAU5Conditions.isXLHLLSameInLength &&
                       !xAU5Conditions.isXLHHHSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Check If HH is Same In Length ...
                     ((xAU5Conditions.isXLHHHSameInLength &&
                       !xAU5Conditions.isXLHLLSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Not Same LL or HH in Lenght ...
                     ((!xAU5Conditions.isXLHHHSameInLength &&
                       !xAU5Conditions.isXLHLLSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     )
                 //
                 )
                //
                )
            //
            ||
            //
            // Check Conditions if Price is Over Signal ...
            (
                //
                ((xAU5Conditions.isXLHPriceOverSignal ||
                  xAU5Conditions.isXLHPriceCrossedOverSignal) &&
                 (
                     //
                     // Next Step is to Check LL and HH Same Style ...
                     //
                     // Check if Both LL and HH Same In Length ...
                     ((xAU5Conditions.isXLHLLSameInLength &&
                       xAU5Conditions.isXLHHHSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Check If LL Same In Length ...
                     ((xAU5Conditions.isXLHLLSameInLength &&
                       !xAU5Conditions.isXLHHHSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Check If HH is Same In Length ...
                     ((xAU5Conditions.isXLHHHSameInLength &&
                       !xAU5Conditions.isXLHLLSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Not Same LL or HH in Lenght ...
                     ((!xAU5Conditions.isXLHHHSameInLength &&
                       !xAU5Conditions.isXLHLLSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     )
                 //
                 )
                //
                )
            //
            ||
            //
            // Check Conditions if Price is not has clear state ...
            (
                //
                ((!xAU5Conditions.isXLHPriceOverSignal &&
                  !xAU5Conditions.isXLHPriceUnderSignal &&
                  !xAU5Conditions.isXLHPriceInSignalRange &&
                  !xAU5Conditions.isXLHPriceCrossedOverSignal &&
                  !xAU5Conditions.isXLHPriceCrossedUnderSignal) &&
                 (
                     //
                     // Next Step is to Check LL and HH Same Style ...
                     //
                     // Check if Both LL and HH Same In Length ...
                     ((xAU5Conditions.isXLHLLSameInLength &&
                       xAU5Conditions.isXLHHHSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Check If LL Same In Length ...
                     ((xAU5Conditions.isXLHLLSameInLength &&
                       !xAU5Conditions.isXLHHHSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Check If HH is Same In Length ...
                     ((xAU5Conditions.isXLHHHSameInLength &&
                       !xAU5Conditions.isXLHLLSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Not Same LL or HH in Lenght ...
                     ((!xAU5Conditions.isXLHHHSameInLength &&
                       !xAU5Conditions.isXLHLLSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     )
                 //
                 )
                //
                )
            //
            )
        //
        ;

    //
    return result;
}

//
// XCHMACMN Short Signal Checking ...
bool XAU5XCHMACMNHasShortSignal()
{
    //
    bool result = false;

    //
    // Validate Args ...
    if (!xAU5MXCHMACMNEnableSignaller ||
        !xAU5MXCHMACMNAllowShortSignals)
    {
        return result;
    }

    //
    // Start Analysing Market based On Conditions ...
    result =
        //
        // Base Condition:
        // each Strategy must has a Base Conditions, which they are usually common combinations
        // of Market Properties that must be happens to lookup for signals ...
        (
            //
            false
            //
            )
        //
        &&
        //
        // Next Step is combine sorts of Conditions which make our choice
        // so Exact in Market ...
        (
            //
            false
            //
            )
        //
        &&
        //
        // Exceptions:
        // there some commonly Exceptions which makes our choice incorrect,
        // here we are combined knownly Exceptions ...
        !(
            //
            // for Exception we used XLH Conditions as follow ...
            //
            // Check Conditions if Price In Signal Range ...
            (xAU5Conditions.isXLHPriceInSignalRange &&
             //
             (
                 //
                 // Next Step is to Check LL and HH Same Style ...
                 //
                 // Check if Both LL and HH Same In Length ...
                 ((xAU5Conditions.isXLHLLSameInLength &&
                   xAU5Conditions.isXLHHHSameInLength) &&
                  //
                  (
                      false)
                  //
                  )
                 //
                 ||
                 //
                 // Check If LL Same In Length ...
                 ((xAU5Conditions.isXLHLLSameInLength &&
                   !xAU5Conditions.isXLHHHSameInLength) &&
                  //
                  (
                      false)
                  //
                  )
                 //
                 ||
                 //
                 // Check If HH is Same In Length ...
                 ((xAU5Conditions.isXLHHHSameInLength &&
                   !xAU5Conditions.isXLHLLSameInLength) &&
                  //
                  (
                      false)
                  //
                  )
                 //
                 ||
                 //
                 // Not Same LL or HH in Lenght ...
                 ((!xAU5Conditions.isXLHHHSameInLength &&
                   !xAU5Conditions.isXLHLLSameInLength) &&
                  //
                  (
                      false)
                  //
                  )
                 //
                 )
             //
             )
            //
            ||
            //
            // Check Conditions if Price is Under Signal ...
            (
                //
                ((xAU5Conditions.isXLHPriceUnderSignal ||
                  xAU5Conditions.isXLHPriceCrossedUnderSignal) &&
                 (
                     //
                     // Next Step is to Check LL and HH Same Style ...
                     //
                     // Check if Both LL and HH Same In Length ...
                     ((xAU5Conditions.isXLHLLSameInLength &&
                       xAU5Conditions.isXLHHHSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Check If LL Same In Length ...
                     ((xAU5Conditions.isXLHLLSameInLength &&
                       !xAU5Conditions.isXLHHHSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Check If HH is Same In Length ...
                     ((xAU5Conditions.isXLHHHSameInLength &&
                       !xAU5Conditions.isXLHLLSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Not Same LL or HH in Lenght ...
                     ((!xAU5Conditions.isXLHHHSameInLength &&
                       !xAU5Conditions.isXLHLLSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     )
                 //
                 )
                //
                )
            //
            ||
            //
            // Check Conditions if Price is Over Signal ...
            (
                //
                ((xAU5Conditions.isXLHPriceOverSignal ||
                  xAU5Conditions.isXLHPriceCrossedOverSignal) &&
                 (
                     //
                     // Next Step is to Check LL and HH Same Style ...
                     //
                     // Check if Both LL and HH Same In Length ...
                     ((xAU5Conditions.isXLHLLSameInLength &&
                       xAU5Conditions.isXLHHHSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Check If LL Same In Length ...
                     ((xAU5Conditions.isXLHLLSameInLength &&
                       !xAU5Conditions.isXLHHHSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Check If HH is Same In Length ...
                     ((xAU5Conditions.isXLHHHSameInLength &&
                       !xAU5Conditions.isXLHLLSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Not Same LL or HH in Lenght ...
                     ((!xAU5Conditions.isXLHHHSameInLength &&
                       !xAU5Conditions.isXLHLLSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     )
                 //
                 )
                //
                )
            //
            ||
            //
            // Check Conditions if Price is not has clear state ...
            (
                //
                ((!xAU5Conditions.isXLHPriceOverSignal &&
                  !xAU5Conditions.isXLHPriceUnderSignal &&
                  !xAU5Conditions.isXLHPriceInSignalRange &&
                  !xAU5Conditions.isXLHPriceCrossedOverSignal &&
                  !xAU5Conditions.isXLHPriceCrossedUnderSignal) &&
                 (
                     //
                     // Next Step is to Check LL and HH Same Style ...
                     //
                     // Check if Both LL and HH Same In Length ...
                     ((xAU5Conditions.isXLHLLSameInLength &&
                       xAU5Conditions.isXLHHHSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Check If LL Same In Length ...
                     ((xAU5Conditions.isXLHLLSameInLength &&
                       !xAU5Conditions.isXLHHHSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Check If HH is Same In Length ...
                     ((xAU5Conditions.isXLHHHSameInLength &&
                       !xAU5Conditions.isXLHLLSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Not Same LL or HH in Lenght ...
                     ((!xAU5Conditions.isXLHHHSameInLength &&
                       !xAU5Conditions.isXLHLLSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     )
                 //
                 )
                //
                )
            //
            )
        //
        ;

    //
    return result;
}

//
// XCHMACMX Long Signal Checking ...
bool XAU5XCHMACMXHasLongSignal()
{
    //
    bool result = false;

    //
    // Validate Args ...
    if (!xAU5MXCHMACMXEnableSignaller ||
        !xAU5MXCHMACMXAllowLongSignals)
    {
        return result;
    }

    //
    // Start Analysing Market based On Conditions ...
    result =
        //
        // Base Condition:
        // each Strategy must has a Base Conditions, which they are usually common combinations
        // of Market Properties that must be happens to lookup for signals ...
        (
            //
            false
            //
            )
        //
        &&
        //
        // Next Step is combine sorts of Conditions which make our choice
        // so Exact in Market ...
        (
            //
            false
            //
            )
        //
        &&
        //
        // Exceptions:
        // there some commonly Exceptions which makes our choice incorrect,
        // here we are combined knownly Exceptions ...
        !(
            //
            // for Exception we used XLH Conditions as follow ...
            //
            // Check Conditions if Price In Signal Range ...
            (xAU5Conditions.isXLHPriceInSignalRange &&
             //
             (
                 //
                 // Next Step is to Check LL and HH Same Style ...
                 //
                 // Check if Both LL and HH Same In Length ...
                 ((xAU5Conditions.isXLHLLSameInLength &&
                   xAU5Conditions.isXLHHHSameInLength) &&
                  //
                  (
                      false)
                  //
                  )
                 //
                 ||
                 //
                 // Check If LL Same In Length ...
                 ((xAU5Conditions.isXLHLLSameInLength &&
                   !xAU5Conditions.isXLHHHSameInLength) &&
                  //
                  (
                      false)
                  //
                  )
                 //
                 ||
                 //
                 // Check If HH is Same In Length ...
                 ((xAU5Conditions.isXLHHHSameInLength &&
                   !xAU5Conditions.isXLHLLSameInLength) &&
                  //
                  (
                      false)
                  //
                  )
                 //
                 ||
                 //
                 // Not Same LL or HH in Lenght ...
                 ((!xAU5Conditions.isXLHHHSameInLength &&
                   !xAU5Conditions.isXLHLLSameInLength) &&
                  //
                  (
                      false)
                  //
                  )
                 //
                 )
             //
             )
            //
            ||
            //
            // Check Conditions if Price is Under Signal ...
            (
                //
                ((xAU5Conditions.isXLHPriceUnderSignal ||
                  xAU5Conditions.isXLHPriceCrossedUnderSignal) &&
                 (
                     //
                     // Next Step is to Check LL and HH Same Style ...
                     //
                     // Check if Both LL and HH Same In Length ...
                     ((xAU5Conditions.isXLHLLSameInLength &&
                       xAU5Conditions.isXLHHHSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Check If LL Same In Length ...
                     ((xAU5Conditions.isXLHLLSameInLength &&
                       !xAU5Conditions.isXLHHHSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Check If HH is Same In Length ...
                     ((xAU5Conditions.isXLHHHSameInLength &&
                       !xAU5Conditions.isXLHLLSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Not Same LL or HH in Lenght ...
                     ((!xAU5Conditions.isXLHHHSameInLength &&
                       !xAU5Conditions.isXLHLLSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     )
                 //
                 )
                //
                )
            //
            ||
            //
            // Check Conditions if Price is Over Signal ...
            (
                //
                ((xAU5Conditions.isXLHPriceOverSignal ||
                  xAU5Conditions.isXLHPriceCrossedOverSignal) &&
                 (
                     //
                     // Next Step is to Check LL and HH Same Style ...
                     //
                     // Check if Both LL and HH Same In Length ...
                     ((xAU5Conditions.isXLHLLSameInLength &&
                       xAU5Conditions.isXLHHHSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Check If LL Same In Length ...
                     ((xAU5Conditions.isXLHLLSameInLength &&
                       !xAU5Conditions.isXLHHHSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Check If HH is Same In Length ...
                     ((xAU5Conditions.isXLHHHSameInLength &&
                       !xAU5Conditions.isXLHLLSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Not Same LL or HH in Lenght ...
                     ((!xAU5Conditions.isXLHHHSameInLength &&
                       !xAU5Conditions.isXLHLLSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     )
                 //
                 )
                //
                )
            //
            ||
            //
            // Check Conditions if Price is not has clear state ...
            (
                //
                ((!xAU5Conditions.isXLHPriceOverSignal &&
                  !xAU5Conditions.isXLHPriceUnderSignal &&
                  !xAU5Conditions.isXLHPriceInSignalRange &&
                  !xAU5Conditions.isXLHPriceCrossedOverSignal &&
                  !xAU5Conditions.isXLHPriceCrossedUnderSignal) &&
                 (
                     //
                     // Next Step is to Check LL and HH Same Style ...
                     //
                     // Check if Both LL and HH Same In Length ...
                     ((xAU5Conditions.isXLHLLSameInLength &&
                       xAU5Conditions.isXLHHHSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Check If LL Same In Length ...
                     ((xAU5Conditions.isXLHLLSameInLength &&
                       !xAU5Conditions.isXLHHHSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Check If HH is Same In Length ...
                     ((xAU5Conditions.isXLHHHSameInLength &&
                       !xAU5Conditions.isXLHLLSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Not Same LL or HH in Lenght ...
                     ((!xAU5Conditions.isXLHHHSameInLength &&
                       !xAU5Conditions.isXLHLLSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     )
                 //
                 )
                //
                )
            //
            )
        //
        ;

    //
    return result;
}

//
// XCHMACMX Short Signal Checking ...
bool XAU5XCHMACMXHasShortSignal()
{
    //
    bool result = false;

    //
    // Validate Args ...
    if (!xAU5MXCHMACMXEnableSignaller ||
        !xAU5MXCHMACMXAllowShortSignals)
    {
        return result;
    }

    //
    // Start Analysing Market based On Conditions ...
    result =
        //
        // Base Condition:
        // each Strategy must has a Base Conditions, which they are usually common combinations
        // of Market Properties that must be happens to lookup for signals ...
        (
            //
            false
            //
            )
        //
        &&
        //
        // Next Step is combine sorts of Conditions which make our choice
        // so Exact in Market ...
        (
            //
            false
            //
            )
        //
        &&
        //
        // Exceptions:
        // there some commonly Exceptions which makes our choice incorrect,
        // here we are combined knownly Exceptions ...
        !(
            //
            // for Exception we used XLH Conditions as follow ...
            //
            // Check Conditions if Price In Signal Range ...
            (xAU5Conditions.isXLHPriceInSignalRange &&
             //
             (
                 //
                 // Next Step is to Check LL and HH Same Style ...
                 //
                 // Check if Both LL and HH Same In Length ...
                 ((xAU5Conditions.isXLHLLSameInLength &&
                   xAU5Conditions.isXLHHHSameInLength) &&
                  //
                  (
                      false)
                  //
                  )
                 //
                 ||
                 //
                 // Check If LL Same In Length ...
                 ((xAU5Conditions.isXLHLLSameInLength &&
                   !xAU5Conditions.isXLHHHSameInLength) &&
                  //
                  (
                      false)
                  //
                  )
                 //
                 ||
                 //
                 // Check If HH is Same In Length ...
                 ((xAU5Conditions.isXLHHHSameInLength &&
                   !xAU5Conditions.isXLHLLSameInLength) &&
                  //
                  (
                      false)
                  //
                  )
                 //
                 ||
                 //
                 // Not Same LL or HH in Lenght ...
                 ((!xAU5Conditions.isXLHHHSameInLength &&
                   !xAU5Conditions.isXLHLLSameInLength) &&
                  //
                  (
                      false)
                  //
                  )
                 //
                 )
             //
             )
            //
            ||
            //
            // Check Conditions if Price is Under Signal ...
            (
                //
                ((xAU5Conditions.isXLHPriceUnderSignal ||
                  xAU5Conditions.isXLHPriceCrossedUnderSignal) &&
                 (
                     //
                     // Next Step is to Check LL and HH Same Style ...
                     //
                     // Check if Both LL and HH Same In Length ...
                     ((xAU5Conditions.isXLHLLSameInLength &&
                       xAU5Conditions.isXLHHHSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Check If LL Same In Length ...
                     ((xAU5Conditions.isXLHLLSameInLength &&
                       !xAU5Conditions.isXLHHHSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Check If HH is Same In Length ...
                     ((xAU5Conditions.isXLHHHSameInLength &&
                       !xAU5Conditions.isXLHLLSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Not Same LL or HH in Lenght ...
                     ((!xAU5Conditions.isXLHHHSameInLength &&
                       !xAU5Conditions.isXLHLLSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     )
                 //
                 )
                //
                )
            //
            ||
            //
            // Check Conditions if Price is Over Signal ...
            (
                //
                ((xAU5Conditions.isXLHPriceOverSignal ||
                  xAU5Conditions.isXLHPriceCrossedOverSignal) &&
                 (
                     //
                     // Next Step is to Check LL and HH Same Style ...
                     //
                     // Check if Both LL and HH Same In Length ...
                     ((xAU5Conditions.isXLHLLSameInLength &&
                       xAU5Conditions.isXLHHHSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Check If LL Same In Length ...
                     ((xAU5Conditions.isXLHLLSameInLength &&
                       !xAU5Conditions.isXLHHHSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Check If HH is Same In Length ...
                     ((xAU5Conditions.isXLHHHSameInLength &&
                       !xAU5Conditions.isXLHLLSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Not Same LL or HH in Lenght ...
                     ((!xAU5Conditions.isXLHHHSameInLength &&
                       !xAU5Conditions.isXLHLLSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     )
                 //
                 )
                //
                )
            //
            ||
            //
            // Check Conditions if Price is not has clear state ...
            (
                //
                ((!xAU5Conditions.isXLHPriceOverSignal &&
                  !xAU5Conditions.isXLHPriceUnderSignal &&
                  !xAU5Conditions.isXLHPriceInSignalRange &&
                  !xAU5Conditions.isXLHPriceCrossedOverSignal &&
                  !xAU5Conditions.isXLHPriceCrossedUnderSignal) &&
                 (
                     //
                     // Next Step is to Check LL and HH Same Style ...
                     //
                     // Check if Both LL and HH Same In Length ...
                     ((xAU5Conditions.isXLHLLSameInLength &&
                       xAU5Conditions.isXLHHHSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Check If LL Same In Length ...
                     ((xAU5Conditions.isXLHLLSameInLength &&
                       !xAU5Conditions.isXLHHHSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Check If HH is Same In Length ...
                     ((xAU5Conditions.isXLHHHSameInLength &&
                       !xAU5Conditions.isXLHLLSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     ||
                     //
                     // Not Same LL or HH in Lenght ...
                     ((!xAU5Conditions.isXLHHHSameInLength &&
                       !xAU5Conditions.isXLHLLSameInLength) &&
                      //
                      (
                          false)
                      //
                      )
                     //
                     )
                 //
                 )
                //
                )
            //
            )
        //
        ;

    //
    return result;
}

//
// END Signal Providers ...
//

//
// START Utilities ...
//

//
// Converts Market Conditions to Specific String Representation ...
string XAU5GetConditionsString(
    XAU5MarketConditions &condition, // Specify Conditiond
    string separator = ",",          // Specify Separator
    bool ignoreFalses = true         // Ignore False Conditions
)
{
    //
    XAU5MarketConditions mConditions = {};

    //
    mConditions = condition;

    //
    string result = "\n";

    //
    // XOBD ...
    result +=
        "| XOBD |" + separator;

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXOBDSwingLow))
    {
        result += "isXOBDSwingLow: " + (string)mConditions.isXOBDSwingLow + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXOBDSwingHigh))
    {
        result += "isXOBDSwingHigh: " + (string)mConditions.isXOBDSwingHigh + separator;
    }

    //
    // Separator ...
    result += separator;

    //
    // XTM ...
    result +=
        "| XTM |" + separator;

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXTMPeak))
    {
        result += "isXTMPeak: " + (string)mConditions.isXTMPeak + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXTMVale))
    {
        result += "isXTMVale: " + (string)mConditions.isXTMVale + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXTMStartBullish))
    {
        result += "isXTMStartBullish: " + (string)mConditions.isXTMStartBullish + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXTMStartBullishAfterNeutural))
    {
        result += "isXTMStartBullishAfterNeutural: " + (string)mConditions.isXTMStartBullishAfterNeutural + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXTMBullish))
    {
        result += "isXTMBullish: " + (string)mConditions.isXTMBullish + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXTMEndBullish))
    {
        result += "isXTMEndBullish: " + (string)mConditions.isXTMEndBullish + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXTMEndBullishByNeutural))
    {
        result += "isXTMEndBullishByNeutural: " + (string)mConditions.isXTMEndBullishByNeutural + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXTMStartBearish))
    {
        result += "isXTMStartBearish: " + (string)mConditions.isXTMStartBearish + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXTMStartBearishAfterNeutural))
    {
        result += "isXTMStartBearishAfterNeutural: " + (string)mConditions.isXTMStartBearishAfterNeutural + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXTMBearish))
    {
        result += "isXTMBearish: " + (string)mConditions.isXTMBearish + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXTMEndBearish))
    {
        result += "isXTMEndBearish: " + (string)mConditions.isXTMEndBearish + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXTMEndBearishByNeutural))
    {
        result += "isXTMEndBearishByNeutural: " + (string)mConditions.isXTMEndBearishByNeutural + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXTMNeutural))
    {
        result += "isXTMNeutural: " + (string)mConditions.isXTMNeutural + separator;
    }

    //
    // Separator ...
    result += separator;

    //
    // XAMA ...
    result +=
        "| XAMA |" + separator;

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXAMAPeak))
    {
        result += "isXAMAPeak: " + (string)mConditions.isXAMAPeak + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXAMAVale))
    {
        result += "isXAMAVale: " + (string)mConditions.isXAMAVale + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXAMAStartBullish))
    {
        result += "isXAMAStartBullish: " + (string)mConditions.isXAMAStartBullish + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXAMAStartBullishAfterNeutural))
    {
        result += "isXAMAStartBullishAfterNeutural: " + (string)mConditions.isXAMAStartBullishAfterNeutural + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXAMABullish))
    {
        result += "isXAMABullish: " + (string)mConditions.isXAMABullish + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXAMAEndBullish))
    {
        result += "isXAMAEndBullish: " + (string)mConditions.isXAMAEndBullish + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXAMAEndBullishByNeutural))
    {
        result += "isXAMAEndBullishByNeutural: " + (string)mConditions.isXAMAEndBullishByNeutural + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXAMAStartBearish))
    {
        result += "isXAMAStartBearish: " + (string)mConditions.isXAMAStartBearish + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXAMAStartBearishAfterNeutural))
    {
        result += "isXAMAStartBearishAfterNeutural: " + (string)mConditions.isXAMAStartBearishAfterNeutural + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXAMABearish))
    {
        result += "isXAMABearish: " + (string)mConditions.isXAMABearish + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXAMAEndBearish))
    {
        result += "isXAMAEndBearish: " + (string)mConditions.isXAMAEndBearish + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXAMAEndBearishByNeutural))
    {
        result += "isXAMAEndBearishByNeutural: " + (string)mConditions.isXAMAEndBearishByNeutural + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXAMANeutural))
    {
        result += "isXAMANeutural: " + (string)mConditions.isXAMANeutural + separator;
    }

    //
    // Separator ...
    result += separator;

    //
    // XTD ...
    result +=
        "| XTD |" + separator;

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXTDSignalPeak))
    {
        result += "isXTDSignalPeak: " + (string)mConditions.isXTDSignalPeak + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXTDSignalVale))
    {
        result += "isXTDSignalVale: " + (string)mConditions.isXTDSignalVale + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXTDBullishPeak))
    {
        result += "isXTDBullishPeak: " + (string)mConditions.isXTDBullishPeak + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXTDBullishVale))
    {
        result += "isXTDBullishVale: " + (string)mConditions.isXTDBullishVale + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXTDBearishPeak))
    {
        result += "isXTDBearishPeak: " + (string)mConditions.isXTDBearishPeak + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXTDBearishVale))
    {
        result += "isXTDBearishVale: " + (string)mConditions.isXTDBearishVale + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXTDBullOverBear))
    {
        result += "isXTDBullOverBear: " + (string)mConditions.isXTDBullOverBear + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXTDBullUnderBear))
    {
        result += "isXTDBullUnderBear: " + (string)mConditions.isXTDBullUnderBear + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXTDSignalOverBear))
    {
        result += "isXTDSignalOverBear: " + (string)mConditions.isXTDSignalOverBear + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXTDSignalUnderBear))
    {
        result += "isXTDSignalUnderBear: " + (string)mConditions.isXTDSignalUnderBear + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXTDBullCrossedOverBear))
    {
        result += "isXTDBullCrossedOverBear: " + (string)mConditions.isXTDBullCrossedOverBear + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXTDBullCrossedUnderBear))
    {
        result += "isXTDBullCrossedUnderBear: " + (string)mConditions.isXTDBullCrossedUnderBear + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXTDSignalCrossedOverBear))
    {
        result += "isXTDSignalCrossedOverBear: " + (string)mConditions.isXTDSignalCrossedOverBear + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXTDSignalCrossedUnderBear))
    {
        result += "isXTDSignalCrossedUnderBear: " + (string)mConditions.isXTDSignalCrossedUnderBear + separator;
    }

    //
    // Separator ...
    result += separator;

    //
    // XFI ...
    result +=
        "| XFI |" + separator;

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXFIPeak))
    {
        result += "isXFIPeak: " + (string)mConditions.isXFIPeak + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXFIVale))
    {
        result += "isXFIVale: " + (string)mConditions.isXFIVale + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXFIOverZero))
    {
        result += "isXFIOverZero: " + (string)mConditions.isXFIOverZero + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXFIUnderZero))
    {
        result += "isXFIUnderZero: " + (string)mConditions.isXFIUnderZero + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXFICrossedOverZero))
    {
        result += "isXFICrossedOverZero: " + (string)mConditions.isXFICrossedOverZero + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXFICrossedUnderZero))
    {
        result += "isXFICrossedUnderZero: " + (string)mConditions.isXFICrossedUnderZero + separator;
    }

    //
    // Separator ...
    result += separator;

    //
    // XTS ...
    result +=
        "| XTS |" + separator;

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXTSAllSame))
    {
        result += "isXTSAllSame: " + (string)mConditions.isXTSAllSame + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXTSCurrentMin))
    {
        result += "isXTSCurrentMin: " + (string)mConditions.isXTSCurrentMin + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXTSCurrentMax))
    {
        result += "isXTSCurrentMax: " + (string)mConditions.isXTSCurrentMax + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXTSCurrentOverFarest))
    {
        result += "isXTSCurrentOverFarest: " + (string)mConditions.isXTSCurrentOverFarest + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXTSCurrentOverNearest))
    {
        result += "isXTSCurrentOverNearest: " + (string)mConditions.isXTSCurrentOverNearest + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXTSCurrentOverMediest))
    {
        result += "isXTSCurrentOverMediest: " + (string)mConditions.isXTSCurrentOverMediest + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXTSCurrentUnderFarest))
    {
        result += "isXTSCurrentUnderFarest: " + (string)mConditions.isXTSCurrentUnderFarest + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXTSCurrentUnderNearest))
    {
        result += "isXTSCurrentUnderNearest: " + (string)mConditions.isXTSCurrentUnderNearest + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXTSCurrentUnderMediest))
    {
        result += "isXTSCurrentUnderMediest: " + (string)mConditions.isXTSCurrentUnderMediest + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXTSCurrentCrossedOverFarest))
    {
        result += "isXTSCurrentCrossedOverFarest: " + (string)mConditions.isXTSCurrentCrossedOverFarest + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXTSCurrentCrossedOverNearest))
    {
        result += "isXTSCurrentCrossedOverNearest: " + (string)mConditions.isXTSCurrentCrossedOverNearest + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXTSCurrentCrossedOverMediest))
    {
        result += "isXTSCurrentCrossedOverMediest: " + (string)mConditions.isXTSCurrentCrossedOverMediest + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXTSCurrentCrossedUnderFarest))
    {
        result += "isXTSCurrentCrossedUnderFarest: " + (string)mConditions.isXTSCurrentCrossedUnderFarest + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXTSCurrentCrossedUnderNearest))
    {
        result += "isXTSCurrentCrossedUnderNearest: " + (string)mConditions.isXTSCurrentCrossedUnderNearest + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXTSCurrentCrossedUnderMediest))
    {
        result += "isXTSCurrentCrossedUnderMediest: " + (string)mConditions.isXTSCurrentCrossedUnderMediest + separator;
    }

    //
    // Separator ...
    result += separator;

    //
    // XLH ...
    result +=
        "| XLH |" + separator;

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXLHHHIncreased))
    {
        result += "isXLHHHIncreased: " + (string)mConditions.isXLHHHIncreased + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXLHHHDecreased))
    {
        result += "isXLHHHDecreased: " + (string)mConditions.isXLHHHDecreased + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXLHLLIncreased))
    {
        result += "isXLHLLIncreased: " + (string)mConditions.isXLHLLIncreased + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXLHLLDecreased))
    {
        result += "isXLHLLDecreased: " + (string)mConditions.isXLHLLDecreased + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXLHHighAttachedHH))
    {
        result += "isXLHHighAttachedHH: " + (string)mConditions.isXLHHighAttachedHH + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXLHLowAttachedLL))
    {
        result += "isXLHLowAttachedLL: " + (string)mConditions.isXLHLowAttachedLL + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXLHHHSameInLength))
    {
        result += "isXLHHHSameInLength: " + (string)mConditions.isXLHHHSameInLength + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXLHLLSameInLength))
    {
        result += "isXLHLLSameInLength: " + (string)mConditions.isXLHLLSameInLength + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXLHPriceCrossedOverSignal))
    {
        result += "isXLHPriceCrossedOverSignal: " + (string)mConditions.isXLHPriceCrossedOverSignal + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXLHPriceOverSignal))
    {
        result += "isXLHPriceOverSignal: " + (string)mConditions.isXLHPriceOverSignal + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXLHPriceCrossedUnderSignal))
    {
        result += "isXLHPriceCrossedUnderSignal: " + (string)mConditions.isXLHPriceCrossedUnderSignal + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXLHPriceUnderSignal))
    {
        result += "isXLHPriceUnderSignal: " + (string)mConditions.isXLHPriceUnderSignal + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXLHPriceInSignalRange))
    {
        result += "isXLHPriceInSignalRange: " + (string)mConditions.isXLHPriceInSignalRange + separator;
    }

    //
    // Separator ...
    result += separator;

    //
    // XRSI ...
    result +=
        "| XRSI |" + separator;

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXRSIPeak))
    {
        result += "isXRSIPeak: " + (string)mConditions.isXRSIPeak + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXRSIVale))
    {
        result += "isXRSIVale: " + (string)mConditions.isXRSIVale + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXRSICrossedOverLongExit))
    {
        result += "isXRSICrossedOverLongExit: " + (string)mConditions.isXRSICrossedOverLongExit + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXRSICrossedOverLongEntry))
    {
        result += "isXRSICrossedOverLongEntry: " + (string)mConditions.isXRSICrossedOverLongEntry + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXRSICrossedUnderShortExit))
    {
        result += "isXRSICrossedUnderShortExit: " + (string)mConditions.isXRSICrossedUnderShortExit + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXRSICrossedUnderShortEntry))
    {
        result += "isXRSICrossedUnderShortEntry: " + (string)mConditions.isXRSICrossedUnderShortEntry + separator;
    }

    //
    // Separator ...
    result += separator;

    //
    // XCHLH ...
    result +=
        "| XCHLH |" + separator;

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXCHLHSameHHs))
    {
        result += "isXCHLHSameHHs: " + (string)mConditions.isXCHLHSameHHs + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXCHLHSameLLs))
    {
        result += "isXCHLHSameLLs: " + (string)mConditions.isXCHLHSameLLs + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXCHLHSCMCHHSame))
    {
        result += "isXCHLHSCMCHHSame: " + (string)mConditions.isXCHLHSCMCHHSame + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXCHLHSCMCLLSame))
    {
        result += "isXCHLHSCMCLLSame: " + (string)mConditions.isXCHLHSCMCLLSame + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXCHLHSCLCHHSame))
    {
        result += "isXCHLHSCLCHHSame: " + (string)mConditions.isXCHLHSCLCHHSame + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXCHLHSCLCLLSame))
    {
        result += "isXCHLHSCLCLLSame: " + (string)mConditions.isXCHLHSCLCLLSame + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXCHLHMCLCHHSame))
    {
        result += "isXCHLHMCLCHHSame: " + (string)mConditions.isXCHLHMCLCHHSame + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXCHLHMCLCLLSame))
    {
        result += "isXCHLHMCLCLLSame: " + (string)mConditions.isXCHLHMCLCLLSame + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXCHLHMCOnTopOfLC))
    {
        result += "isXCHLHMCOnTopOfLC: " + (string)mConditions.isXCHLHMCOnTopOfLC + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXCHLHMCInBottomOfLC))
    {
        result += "isXCHLHMCInBottomOfLC: " + (string)mConditions.isXCHLHMCInBottomOfLC + separator;
    }

    //
    // Separator ...
    result += separator;

    //
    // XCHMA ...
    result +=
        "| XCHMA |" + separator;

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXCHMASCOverMax))
    {
        result += "isXCHMASCOverMax: " + (string)mConditions.isXCHMASCOverMax + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXCHMASCOverMin))
    {
        result += "isXCHMASCOverMin: " + (string)mConditions.isXCHMASCOverMin + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXCHMASCUnderMax))
    {
        result += "isXCHMASCUnderMax: " + (string)mConditions.isXCHMASCUnderMax + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXCHMASCUnderMin))
    {
        result += "isXCHMASCUnderMin: " + (string)mConditions.isXCHMASCUnderMin + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXCHMASCCrossedOverMax))
    {
        result += "isXCHMASCCrossedOverMax: " + (string)mConditions.isXCHMASCCrossedOverMax + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXCHMASCCrossedUnderMax))
    {
        result += "isXCHMASCCrossedUnderMax: " + (string)mConditions.isXCHMASCCrossedUnderMax + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXCHMASCCrossedOverMin))
    {
        result += "isXCHMASCCrossedOverMin: " + (string)mConditions.isXCHMASCCrossedOverMin + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXCHMASCCrossedUnderMin))
    {
        result += "isXCHMASCCrossedUnderMin: " + (string)mConditions.isXCHMASCCrossedUnderMin + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXCHMASCPeak))
    {
        result += "isXCHMASCPeak: " + (string)mConditions.isXCHMASCPeak + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXCHMASCVale))
    {
        result += "isXCHMASCVale: " + (string)mConditions.isXCHMASCVale + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXCHMASCTrendsUp))
    {
        result += "isXCHMASCTrendsUp: " + (string)mConditions.isXCHMASCTrendsUp + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXCHMASCTrendsDown))
    {
        result += "isXCHMASCTrendsDown: " + (string)mConditions.isXCHMASCTrendsDown + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXCHMASCFastOverSlow))
    {
        result += "isXCHMASCFastOverSlow: " + (string)mConditions.isXCHMASCFastOverSlow + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXCHMASCFastUnderSlow))
    {
        result += "isXCHMASCFastUnderSlow: " + (string)mConditions.isXCHMASCFastUnderSlow + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXCHMASCFastCrossedOverSlow))
    {
        result += "isXCHMASCFastCrossedOverSlow: " + (string)mConditions.isXCHMASCFastCrossedOverSlow + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXCHMASCFastCrossedUnderSlow))
    {
        result += "isXCHMASCFastCrossedUnderSlow: " + (string)mConditions.isXCHMASCFastCrossedUnderSlow + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXCHMAMCPeak))
    {
        result += "isXCHMAMCPeak: " + (string)mConditions.isXCHMAMCPeak + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXCHMAMCVale))
    {
        result += "isXCHMAMCVale: " + (string)mConditions.isXCHMAMCVale + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXCHMAMCTrendsUp))
    {
        result += "isXCHMAMCTrendsUp: " + (string)mConditions.isXCHMAMCTrendsUp + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXCHMAMCTrendsDown))
    {
        result += "isXCHMAMCTrendsDown: " + (string)mConditions.isXCHMAMCTrendsDown + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXCHMAMCFastOverSlow))
    {
        result += "isXCHMAMCFastOverSlow: " + (string)mConditions.isXCHMAMCFastOverSlow + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXCHMAMCFastUnderSlow))
    {
        result += "isXCHMAMCFastUnderSlow: " + (string)mConditions.isXCHMAMCFastUnderSlow + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXCHMAMCFastCrossedOverSlow))
    {
        result += "isXCHMAMCFastCrossedOverSlow: " + (string)mConditions.isXCHMAMCFastCrossedOverSlow + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXCHMAMCFastCrossedUnderSlow))
    {
        result += "isXCHMAMCFastCrossedUnderSlow: " + (string)mConditions.isXCHMAMCFastCrossedUnderSlow + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXCHMALCPeak))
    {
        result += "isXCHMALCPeak: " + (string)mConditions.isXCHMALCPeak + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXCHMALCVale))
    {
        result += "isXCHMALCVale: " + (string)mConditions.isXCHMALCVale + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXCHMALCTrendsUp))
    {
        result += "isXCHMALCTrendsUp: " + (string)mConditions.isXCHMALCTrendsUp + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXCHMALCTrendsDown))
    {
        result += "isXCHMALCTrendsDown: " + (string)mConditions.isXCHMALCTrendsDown + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXCHMALCFastOverSlow))
    {
        result += "isXCHMALCFastOverSlow: " + (string)mConditions.isXCHMALCFastOverSlow + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXCHMALCFastUnderSlow))
    {
        result += "isXCHMALCFastUnderSlow: " + (string)mConditions.isXCHMALCFastUnderSlow + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXCHMALCFastCrossedOverSlow))
    {
        result += "isXCHMALCFastCrossedOverSlow: " + (string)mConditions.isXCHMALCFastCrossedOverSlow + separator;
    }

    //
    if (
        !ignoreFalses ||
        (ignoreFalses && mConditions.isXCHMALCFastCrossedUnderSlow))
    {
        result += "isXCHMALCFastCrossedUnderSlow: " + (string)mConditions.isXCHMALCFastCrossedUnderSlow + separator;
    }

    //
    // Separator ...
    result += separator;

    //
    return result;
}

void Add(
    ENUM_XAU5_SIGNAL_PROVIDERS item,
    ENUM_XAU5_SIGNAL_PROVIDERS &items[])
{
    //
    ArrayResize(
        items,
        ArraySize(items) + 1);

    //
    items[ArraySize(items) - 1] = item;
}
//
// START Utilities ...
//