From c3eeb005f1a271a59ddee001976a6f04ebe32cdf Mon Sep 17 00:00:00 2001 From: Hadi Khazaee Asl Date: Fri, 23 Aug 2024 03:24:33 +0330 Subject: [PATCH] last ... --- .../x-saherelm.xch.audusd.long.parser.mq5 | 0 .../x-saherelm.xch.audusd.short.parser.mq5 | 0 .../x-saherelm.xch.chma.strategy.mq5 | 1962 +++++++++++++++++ .../x-saherelm.xch.dowj.long.parser.mq5 | 0 .../x-saherelm.xch.dowj.short.parser.mq5 | 0 .../x-saherelm.xch.empty.long.parser.mq5 | 0 .../x-saherelm.xch.empty.short.parser.mq5 | 0 .../x-saherelm.xch.eurcad.long.parser.mq5 | 0 .../x-saherelm.xch.eurcad.short.parser.mq5 | 0 .../x-saherelm.xch.eurchf.long.parser.mq5 | 0 .../x-saherelm.xch.eurchf.short.parser.mq5 | 0 .../x-saherelm.xch.eurgbp.long.parser.mq5 | 0 .../x-saherelm.xch.eurgbp.short.parser.mq5 | 0 .../x-saherelm.xch.eurjpy.long.parser.mq5 | 0 .../x-saherelm.xch.eurjpy.short.parser.mq5 | 0 .../x-saherelm.xch.eurusd.long.parser.mq5 | 0 .../x-saherelm.xch.eurusd.short.parser.mq5 | 0 .../x-saherelm.xch.gbpusd.long.parser.mq5 | 0 .../x-saherelm.xch.gbpusd.short.parser.mq5 | 0 .../x-saherelm.xch.nzdusd.long.parser.mq5 | 0 .../x-saherelm.xch.nzdusd.short.parser.mq5 | 0 .../x-saherelm.xch.parser copy.mq5 | 1235 +++++++++++ .../Requirements/x-saherelm.xch.parser.mq5 | 1235 +++++++++++ .../x-saherelm.xch.usdcad.long.parser.mq5 | 0 .../x-saherelm.xch.usdcad.short.parser.mq5 | 0 .../x-saherelm.xch.usdchf.long.parser.mq5 | 0 .../x-saherelm.xch.usdchf.short.parser.mq5 | 0 .../x-saherelm.xch.usdjpy.long.parser.mq5 | 0 .../x-saherelm.xch.usdjpy.short.parser.mq5 | 0 .../x-saherelm.xch.xauusd.long.parser.mq5 | 0 .../x-saherelm.xch.xauusd.short.parser.mq5 | 0 ...m.xch.amarkets.audusd.2019.long.parser.mq5 | 54 + ....xch.amarkets.audusd.2019.short.parser.mq5 | 54 + ...m.xch.amarkets.audusd.olds.long.parser.mq5 | 54 + ....xch.amarkets.audusd.olds.short.parser.mq5 | 54 + ...herelm.xch.amarkets.audusd.long.parser.mq5 | 33 +- ...erelm.xch.amarkets.audusd.short.parser.mq5 | 33 +- ...saherelm.xch.amarkets.us30.long.parser.mq5 | 1 + ...aherelm.xch.amarkets.us30.short.parser.mq5 | 1 + ...herelm.xch.amarkets.eurcad.long.parser.mq5 | 1 + ...erelm.xch.amarkets.eurcad.short.parser.mq5 | 1 + ...herelm.xch.amarkets.eurchf.long.parser.mq5 | 1 + ...erelm.xch.amarkets.eurchf.short.parser.mq5 | 1 + ...herelm.xch.amarkets.eurgbp.long.parser.mq5 | 1 + ...erelm.xch.amarkets.eurgbp.short.parser.mq5 | 1 + ...herelm.xch.amarkets.eurjpy.long.parser.mq5 | 1 + ...erelm.xch.amarkets.eurjpy.short.parser.mq5 | 1 + ...herelm.xch.amarkets.eurusd.long.parser.mq5 | 1 + ...erelm.xch.amarkets.eurusd.short.parser.mq5 | 1 + ...herelm.xch.amarkets.gbpusd.long.parser.mq5 | 1 + ...erelm.xch.amarkets.gbpusd.short.parser.mq5 | 1 + ...herelm.xch.amarkets.nzdusd.long.parser.mq5 | 1 + ...erelm.xch.amarkets.nzdusd.short.parser.mq5 | 1 + ...herelm.xch.amarkets.usdcad.long.parser.mq5 | 1 + ...erelm.xch.amarkets.usdcad.short.parser.mq5 | 1 + ...herelm.xch.amarkets.usdchf.long.parser.mq5 | 1 + ...erelm.xch.amarkets.usdchf.short.parser.mq5 | 1 + ...herelm.xch.amarkets.usdjpy.long.parser.mq5 | 1 + ...erelm.xch.amarkets.usdjpy.short.parser.mq5 | 1 + ...herelm.xch.amarkets.xauusd.long.parser.mq5 | 1 + .../x-saherelm.xch.amarkets.parser.mq5 | 518 +++++ Parsers/x-saherelm.xch.parser.mq5 | 452 +--- 62 files changed, 5257 insertions(+), 450 deletions(-) rename {Parsers => Documents/BKP/Requirements}/x-saherelm.xch.audusd.long.parser.mq5 (100%) rename {Parsers => Documents/BKP/Requirements}/x-saherelm.xch.audusd.short.parser.mq5 (100%) create mode 100644 Documents/BKP/Requirements/x-saherelm.xch.chma.strategy.mq5 rename {Parsers => Documents/BKP/Requirements}/x-saherelm.xch.dowj.long.parser.mq5 (100%) rename {Parsers => Documents/BKP/Requirements}/x-saherelm.xch.dowj.short.parser.mq5 (100%) rename {Parsers => Documents/BKP/Requirements}/x-saherelm.xch.empty.long.parser.mq5 (100%) rename {Parsers => Documents/BKP/Requirements}/x-saherelm.xch.empty.short.parser.mq5 (100%) rename {Parsers => Documents/BKP/Requirements}/x-saherelm.xch.eurcad.long.parser.mq5 (100%) rename {Parsers => Documents/BKP/Requirements}/x-saherelm.xch.eurcad.short.parser.mq5 (100%) rename {Parsers => Documents/BKP/Requirements}/x-saherelm.xch.eurchf.long.parser.mq5 (100%) rename {Parsers => Documents/BKP/Requirements}/x-saherelm.xch.eurchf.short.parser.mq5 (100%) rename {Parsers => Documents/BKP/Requirements}/x-saherelm.xch.eurgbp.long.parser.mq5 (100%) rename {Parsers => Documents/BKP/Requirements}/x-saherelm.xch.eurgbp.short.parser.mq5 (100%) rename {Parsers => Documents/BKP/Requirements}/x-saherelm.xch.eurjpy.long.parser.mq5 (100%) rename {Parsers => Documents/BKP/Requirements}/x-saherelm.xch.eurjpy.short.parser.mq5 (100%) rename {Parsers => Documents/BKP/Requirements}/x-saherelm.xch.eurusd.long.parser.mq5 (100%) rename {Parsers => Documents/BKP/Requirements}/x-saherelm.xch.eurusd.short.parser.mq5 (100%) rename {Parsers => Documents/BKP/Requirements}/x-saherelm.xch.gbpusd.long.parser.mq5 (100%) rename {Parsers => Documents/BKP/Requirements}/x-saherelm.xch.gbpusd.short.parser.mq5 (100%) rename {Parsers => Documents/BKP/Requirements}/x-saherelm.xch.nzdusd.long.parser.mq5 (100%) rename {Parsers => Documents/BKP/Requirements}/x-saherelm.xch.nzdusd.short.parser.mq5 (100%) create mode 100644 Documents/BKP/Requirements/x-saherelm.xch.parser copy.mq5 create mode 100644 Documents/BKP/Requirements/x-saherelm.xch.parser.mq5 rename {Parsers => Documents/BKP/Requirements}/x-saherelm.xch.usdcad.long.parser.mq5 (100%) rename {Parsers => Documents/BKP/Requirements}/x-saherelm.xch.usdcad.short.parser.mq5 (100%) rename {Parsers => Documents/BKP/Requirements}/x-saherelm.xch.usdchf.long.parser.mq5 (100%) rename {Parsers => Documents/BKP/Requirements}/x-saherelm.xch.usdchf.short.parser.mq5 (100%) rename {Parsers => Documents/BKP/Requirements}/x-saherelm.xch.usdjpy.long.parser.mq5 (100%) rename {Parsers => Documents/BKP/Requirements}/x-saherelm.xch.usdjpy.short.parser.mq5 (100%) rename {Parsers => Documents/BKP/Requirements}/x-saherelm.xch.xauusd.long.parser.mq5 (100%) rename {Parsers => Documents/BKP/Requirements}/x-saherelm.xch.xauusd.short.parser.mq5 (100%) create mode 100644 Parsers/AMarkets/AUDUSD/2019/x-saherelm.xch.amarkets.audusd.2019.long.parser.mq5 create mode 100644 Parsers/AMarkets/AUDUSD/2019/x-saherelm.xch.amarkets.audusd.2019.short.parser.mq5 create mode 100644 Parsers/AMarkets/AUDUSD/Olds/x-saherelm.xch.amarkets.audusd.olds.long.parser.mq5 create mode 100644 Parsers/AMarkets/AUDUSD/Olds/x-saherelm.xch.amarkets.audusd.olds.short.parser.mq5 diff --git a/Parsers/x-saherelm.xch.audusd.long.parser.mq5 b/Documents/BKP/Requirements/x-saherelm.xch.audusd.long.parser.mq5 similarity index 100% rename from Parsers/x-saherelm.xch.audusd.long.parser.mq5 rename to Documents/BKP/Requirements/x-saherelm.xch.audusd.long.parser.mq5 diff --git a/Parsers/x-saherelm.xch.audusd.short.parser.mq5 b/Documents/BKP/Requirements/x-saherelm.xch.audusd.short.parser.mq5 similarity index 100% rename from Parsers/x-saherelm.xch.audusd.short.parser.mq5 rename to Documents/BKP/Requirements/x-saherelm.xch.audusd.short.parser.mq5 diff --git a/Documents/BKP/Requirements/x-saherelm.xch.chma.strategy.mq5 b/Documents/BKP/Requirements/x-saherelm.xch.chma.strategy.mq5 new file mode 100644 index 00000000..35a200f6 --- /dev/null +++ b/Documents/BKP/Requirements/x-saherelm.xch.chma.strategy.mq5 @@ -0,0 +1,1962 @@ +/////////////////////////////////////////////////////// +// +// SaherElm IT Center MQL5 Class Library +// -------------------------------------- +// Name: XSCXCHCHMAStrategy +// Description: provides all based classes for use ... +// +// +// Maintainer: +// ------------ +// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) +// +////////////////////////////////////////////////////// +// +// Global Properties ... +#property library +#property copyright "Copyright 2023, SaherElm IT Center" +#property link "https://www.saherelm.ir" +#property version "1.00" +#property strict + +// +// Imports ... + +// +// Import(s) Helper(s) ... +#include "../Helpers/x-saherelm.xpv.helper.mq5" +#include "../Helpers/x-saherelm.xchm.helper.mq5" +#include "../Helpers/x-saherelm.xchhk.helper.mq5" +#include "../Helpers/x-saherelm.xchtd.helper.mq5" +#include "../Helpers/x-saherelm.xchche.helper.mq5" +#include "../Helpers/x-saherelm.xchstr.helper.mq5" +#include "../Helpers/x-saherelm.xchvlm.helper.mq5" +#include "../Helpers/x-saherelm.xchich.helper.mq5" +#include "../Helpers/x-saherelm.xchvwap.helper.mq5" +#include "../Helpers/x-saherelm.xchswings.helper.mq5" + +// +// Base Classes ... +#include "../Classes/x-saherelm.xstrategy.class.mq5" + +// +// Definitions ... + +// +// Specific Identifier(s) of XStrategy ... +string XCHCHMAStartegyToken = "XCHCHMA"; + +// +struct XCHCHMAStrategyConditions +{ + // + // Props ... + + // + // Common ... + string symbol; + ENUM_TIMEFRAMES period; + datetime time; + + // + // Important Ares attached ... + + // + XOHCL support; + XOHCL resistance; + XOHCL bullishOB; + XOHCL bearishOB; + + // + double bullishFVGUpper; + double bullishFVGLower; + XOHCL bullishFVG; + + // + double bearishFVGUpper; + double bearishFVGLower; + XOHCL bearishFVG; + + // + XOHCL bullishTrendSwingHighs[]; + XOHCL bullishTrendSwingLows[]; + XOHCL bullishTrend; + + // + XOHCL bearishTrendSwingHighs[]; + XOHCL bearishTrendSwingLows[]; + XOHCL bearishTrend; + + // + // Helper Conditions ... + XPVConditions pvConditions; + XCHMConditions chmConditions; + XCHHKConditions chhkConditions; + XCHTDConditions chtdConditions; + XCHCHEConditions chcheConditions; + XCHSTRConditions chstrConditions; + XCHVLMConditions chvlmConditions; + XCHICHConditions chichConditions; + XCHVWAPConditions chvwapConditions; + + // + // Constructor ... + void XCHCHMAStrategyConditions() + { + Clean(); + } + + // + // Tools ... + + // + // Cleanup ... + void Clean() + { + // + symbol = NULL; + period = NULL; + time = NULL; + + // + pvConditions.Clean(); + chmConditions.Clean(); + chhkConditions.Clean(); + chtdConditions.Clean(); + chcheConditions.Clean(); + chstrConditions.Clean(); + chvlmConditions.Clean(); + chvwapConditions.Clean(); + } + + // + // Validate ... + bool IsValid() + { + // + bool result = false; + + // + result = + // + IsValid(time) && + IsValid(symbol) && + IsValid(period) + // + ; + + // + return result; + } + + // + // Generate Provided Scores ... + void GenerateScore( + double &bullishScore, + double &bearishScore // + ) + { + // + bullishScore = 0; + bearishScore = 0; + + // + if (!IsValid()) + { + return; + } + + // + double bullScore = 0; + double bearScore = 0; + + // + // XPV ... + pvConditions.GenerateScore( + bullScore, + bearScore // + ); + bullishScore += bullScore; + bearishScore += bearScore; + + // + // XCHM ... + chmConditions.GenerateScore( + bullScore, + bearScore // + ); + bullishScore += bullScore; + bearishScore += bearScore; + + // + // XCHHK ... + chhkConditions.GenerateScore( + bullScore, + bearScore // + ); + bullishScore += bullScore; + bearishScore += bearScore; + + // + // XCHTD ... + chtdConditions.GenerateScore( + bullScore, + bearScore // + ); + bullishScore += bullScore; + bearishScore += bearScore; + + // + // XCHCHE ... + chcheConditions.GenerateScore( + bullScore, + bearScore // + ); + bullishScore += bullScore; + bearishScore += bearScore; + + // + // XCHSTR ... + chstrConditions.GenerateScore( + bullScore, + bearScore // + ); + bullishScore += bullScore; + bearishScore += bearScore; + + // + // XCHVLM ... + chvlmConditions.GenerateScore( + bullScore, + bearScore // + ); + bullishScore += bullScore; + bearishScore += bearScore; + + // + // XCHVWAP ... + chvwapConditions.GenerateScore( + bullScore, + bearScore // + ); + bullishScore += bullScore; + bearishScore += bearScore; + } + + // + // Generate Summary ... + string GenerateSummary( + bool onlyCommons = false, + bool onlyConditions = false, + bool includeScores = true, + bool ignoreFalseConditions = true, + string separator = "\n" // + ) + { + // + string result = NULL; + + // + double bullishScore = 0; + double bearishScore = 0; + GenerateScore( + bullishScore, + bearishScore // + ); + + // + string commonStr = GenerateSpecifiedCommonSummary( + this, + separator, + includeScores, + true // + ); + + // + // XPV ... + string pvStr = pvConditions.GenerateSummary( + false, + true, + false, + ignoreFalseConditions // + ); + + // + // XCHM ... + string chmStr = chmConditions.GenerateSummary( + false, + true, + false, + ignoreFalseConditions // + ); + + // + // XCHHK ... + string chhkStr = chhkConditions.GenerateSummary( + false, + true, + false, + ignoreFalseConditions // + ); + + // + // XCHTD ... + string chtdStr = chtdConditions.GenerateSummary( + false, + true, + false, + ignoreFalseConditions // + ); + + // + // XCHCHE ... + string chcheStr = chcheConditions.GenerateSummary( + false, + true, + false, + ignoreFalseConditions // + ); + + // + // XCHSTR ... + string chstrStr = chstrConditions.GenerateSummary( + false, + true, + false, + ignoreFalseConditions // + ); + + // + // XCHVLM ... + string chvlmStr = chvlmConditions.GenerateSummary( + false, + true, + false, + ignoreFalseConditions // + ); + + // + // XCHVWAP ... + string chvwapStr = chvwapConditions.GenerateSummary( + false, + true, + false, + ignoreFalseConditions // + ); + + // + string conditionsStr = + // + pvStr + separator + + chmStr + separator + + chhkStr + separator + + chtdStr + separator + + chcheStr + separator + + chstrStr + separator + + chvlmStr + separator + + chvwapStr + separator + + "" + // + ; + + // + result = + // + "[" + GetTag() + "]" + separator + + "----------" + separator + + (onlyConditions + ? "" + : commonStr) + + " " + separator + + (onlyCommons + ? "" + : conditionsStr) + + "" + // + ; + + // + return result; + } + + // + string GetTag() + { + return XCHCHMAStartegyToken; + } + + // +}; + +// +typedef void (*TOnXCHSignal)( + XSignal &signal, + XCHCHMAStrategyConditions &conditions // +); + +// +// XStrategy Class Implementation(s) ... +class XSCXCHCHMAStrategy : public XSCBaseStrategy +{ + // + // Public ... +public: + // + // Constructor(s) ... + void XSCXCHCHMAStrategy( + // + // Base ... + string _symbol, // Trading Symbol + ENUM_TIMEFRAMES _period, // Trading TimeFrame + ENUM_TIMEFRAMES _analizePeriod, // Important Area Detect Time Frame + double _volume, // Voluem + double _r2r, // Risk/Reward Ratio + int _slippage, // Trader Slippage + long _magicNumber, // Trader Magic Number + bool _ignoreSignalExecution = false, // Ignore Signal Execution + bool _useTPSLAsPoint = false, // Converts TP and SL by Provided Points + bool _forceMaxTPSLAsPoint = false, // Force Max TP and SL by Provided Points + double _tpPoint = 0, // TP As Point + double _slPoint = 0, // SL As Point + bool _ignoreTP = false, // TP set to 0 + bool _ignoreSL = false, // SL set to 0 + bool _allowLong = true, + bool _allowShort = true, + int _maxAllowedLongs = 0, + int _maxAllowedShorts = 0 // + ) : XSCBaseStrategy(_symbol, + _period, + _analizePeriod, + _volume, + _r2r, + _slippage, + _magicNumber, + _ignoreSignalExecution, + _useTPSLAsPoint, + _forceMaxTPSLAsPoint, + _tpPoint, + _slPoint, + _ignoreTP, + _ignoreSL, + _allowLong, + _allowShort, + _maxAllowedLongs, + _maxAllowedShorts // + ) + { + // + SetAlertPrefix(GetTag()); + + // + PrepareRequirements(); + } + + // + // Deconstructor ... + void ~XSCXCHCHMAStrategy() + { + // + delete pvHelper; + + // + delete chmHelper; + delete chhkHelper; + delete chstrHelper; + delete chcheHelper; + } + + // + // Getter / Setter (s) ... + + // + bool EnableXCHCHE() + { + return mEnableXCHCHE; + } + + // + void EnableXCHCHE(bool value) + { + mEnableXCHCHE = value; + } + + // + bool EnableXCHM() + { + return mEnableXCHM; + } + + // + void EnableXCHM(bool value) + { + mEnableXCHM = value; + } + + // + bool EnableXCHHK() + { + return mEnableXCHHK; + } + + // + void EnableXCHHK(bool value) + { + mEnableXCHHK = value; + } + + // + bool EnableXCHSTR() + { + return mEnableXCHSTR; + } + + // + void EnableXCHSTR(bool value) + { + mEnableXCHSTR = value; + } + + // + // Event Handlers ... + + // + // On Signal Handlers ... + void AddXCHSignalEventHandler(TOnXCHSignal handler) + { + // + Add( + handler, + mOnXCHSignalEventHandlers // + ); + } + + // + // Overrides ... + + // + // Customize Strategy Identifier ... + string GetTag() override + { + return XCHCHMAStartegyToken; + } + + // + // Check Conditions For Signal ... + bool HasSignal( + XSignal &signal // + ) override + { + // + bool result = false; + + // + signal.Clean(); + + // + double sl = 0; + double tp = 0; + double risk = 0; + double entry = 0; + double reward = 0; + double r2r = R2R(); + ENUM_POSITION_TYPE type = POSITION_TYPE_BUY; + ENUM_X_ORDER_MODES mode = X_ORDER_MODE_MARKET; + + // + bool hasLong = false; + bool hasShort = false; + + // + // Retrieve Conditions ... + + // + // XPV ... + XPVConditions pvConditions; + result = pvHelper.GetConditions(pvConditions); + if (!result) + { + return result; + } + + // + // XCHM ... + XCHMConditions chmConditions; + result = chmHelper.GetConditions(chmConditions); + if (!result) + { + return result; + } + + // + // XCHHK ... + XCHHKConditions chhkConditions; + result = chhkHelper.GetConditions(chhkConditions); + if (!result) + { + return result; + } + + // + // XCHTD ... + XCHTDConditions chtdConditions; + result = chtdHelper.GetConditions(chtdConditions); + if (!result) + { + return result; + } + + // + // XCHSTR ... + XCHSTRConditions chstrConditions; + result = chstrHelper.GetConditions(chstrConditions); + if (!result) + { + return result; + } + + // + // XCHCHE ... + XCHCHEConditions chcheConditions; + result = chcheHelper.GetConditions(chcheConditions); + if (!result) + { + return result; + } + + // + // XCHVLM ... + XCHVLMConditions chvlmConditions; + result = chvlmHelper.GetConditions(chvlmConditions); + if (!result) + { + return result; + } + + // + // XCHICH ... + XCHICHConditions chichConditions; + result = chichHelper.GetConditions(chichConditions); + if (!result) + { + return result; + } + + // + // XCHVWAP ... + XCHVWAPConditions chvwapConditions; + result = chvwapHelper.GetConditions(chvwapConditions); + if (!result) + { + return result; + } + + // + // Start Calculations ... + + // + double points = GetPoints(mSymbol); + + // + int zIndex = 0; + int cIndex = zIndex + 1; + int pIndex = cIndex + 1; + int ppIndex = pIndex + 1; + + // + // Retrieve Bars ... + + // + // Last Bar ... + XOHCL cBar; + result = cBar.Init( + mSymbol, + mPeriod, + cIndex // + ); + if (!result) + { + return result; + } + + // + // Prepare Conditions ... + + // + XCHCHMAStrategyConditions conditions; + + // + conditions.symbol = mSymbol; + conditions.period = mPeriod; + conditions.time = cBar.time; + + // + conditions.pvConditions = pvConditions; + conditions.chmConditions = chmConditions; + conditions.chhkConditions = chhkConditions; + conditions.chtdConditions = chtdConditions; + conditions.chstrConditions = chstrConditions; + conditions.chcheConditions = chcheConditions; + conditions.chvlmConditions = chvlmConditions; + conditions.chichConditions = chichConditions; + conditions.chvwapConditions = chvwapConditions; + + // + result = conditions.IsValid(); + if (!result) + { + return result; + } + + // + // Previous Bar of Last Bar ... + XOHCL pBar; + result = cBar.GetPreviousBar(pBar); + if (!result) + { + return result; + } + + // + // Last Swing Low Bar ... + XOHCL lastSwingLow; + result = cBar.FindLastSwingLow(lastSwingLow); + if (!result) + { + return result; + } + + // + // Last Swing High Bar ... + XOHCL lastSwingHigh; + result = cBar.FindLastSwingHigh(lastSwingHigh); + if (!result) + { + return result; + } + + // + // Retrieve Highest High(s) and Lowest Low(s) ... + + // + // Highest High ... + double hh5 = cBar.FindHighest( + 5, + MODE_HIGH // + ); + + // + // Lowest Low ... + double ll5 = cBar.FindLowest( + 5, + MODE_LOW // + ); + + // + // For Trend ... + XOHCL tmpHSW[]; + XOHCL tmpLSW[]; + + // + // Detect Bullish/Bearish Patterns and Trends ... + + // + // Bullish ... + bool hasBullishPower = cBar.HasBullishPower(); + bool hasBullishPattern = HasBullishPattern(cBar); + bool hasBullishPressure = cBar.HasBullishPressure(); + bool isBullishTrend = cBar.HasBullishTrend( + tmpHSW, + tmpLSW, + true // + ); + + // + // Bearish ... + bool hasBearishPower = cBar.HasBearishPower(); + bool hasBearishPattern = HasBearishPattern(cBar); + bool hasBearishPressure = cBar.HasBearishPressure(); + bool isBearishTrend = cBar.HasBearishTrend( + tmpHSW, + tmpLSW, + false // + ); + + // + // XCHM ... + + // + double chmBullishPower = chmHelper.GetBullishPower(cIndex); + double chmBearishPower = chmHelper.GetBearishPower(cIndex); + + // + double chmMaxBullishFast = chmHelper.GetMaxBullishFast(cIndex); + double chmMinBullishFast = chmHelper.GetMinBullishFast(cIndex); + double chmMaxBullishSlow = chmHelper.GetMaxBullishSlow(cIndex); + double chmMinBullishSlow = chmHelper.GetMinBullishSlow(cIndex); + double chmMaxBearishFast = chmHelper.GetMaxBearishFast(cIndex); + double chmMinBearishFast = chmHelper.GetMinBearishFast(cIndex); + double chmMaxBearishSlow = chmHelper.GetMaxBearishSlow(cIndex); + double chmMinBearishSlow = chmHelper.GetMinBearishSlow(cIndex); + + // + // XCHHK ... + + // + double chhkBullishPower = chhkHelper.GetBullishPower(cIndex); + double chhkBearishPower = chhkHelper.GetBearishPower(cIndex); + + // + double chhkMinBearishHigh = chhkHelper.GetMinBearishHigh(cIndex); + double chhkMaxBearishHigh = chhkHelper.GetMaxBearishHigh(cIndex); + double chhkMinBearishLow = chhkHelper.GetMinBearishLow(cIndex); + double chhkMaxBearishLow = chhkHelper.GetMaxBearishLow(cIndex); + double chhkMaxBullishHigh = chhkHelper.GetMaxBullishHigh(cIndex); + double chhkMinBullishHigh = chhkHelper.GetMinBullishHigh(cIndex); + double chhkMaxBullishLow = chhkHelper.GetMaxBullishLow(cIndex); + double chhkMinBullishLow = chhkHelper.GetMinBullishLow(cIndex); + + // + // XCHTD ... + + // + double chtdBullishPower = chtdHelper.GetBullishPower(cIndex); + double chtdBearishPower = chtdHelper.GetBearishPower(cIndex); + + // + // XCHSTR ... + + // + double chstrBullishPower = chstrHelper.GetBullishPower(cIndex); + double chstrBearishPower = chstrHelper.GetBearishPower(cIndex); + + // + double chstrMinBullish = chstrHelper.GetMinBullish(cIndex); + double chstrMaxBullish = chstrHelper.GetMaxBullish(cIndex); + double chstrMinBearish = chstrHelper.GetMinBearish(cIndex); + double chstrMaxBearish = chstrHelper.GetMaxBearish(cIndex); + + // + // XCHCHE ... + + // + double chcheBullishPower = chcheHelper.GetBullishPower(cIndex); + double chcheBearishPower = chcheHelper.GetBearishPower(cIndex); + + // + double chcheMaxBullish = chcheHelper.GetBullishMax(cIndex); + double chcheMinBullish = chcheHelper.GetBullishMin(cIndex); + double chcheMaxBearish = chcheHelper.GetBearishMax(cIndex); + double chcheMinBearish = chcheHelper.GetBearishMin(cIndex); + + // + // Change XCHCHE Current State ... + if (chcheConditions.cLE1[pIndex] > 0 && + chcheConditions.cLE2[pIndex] > 0 && + chcheConditions.cLE1[pIndex] != EMPTY_VALUE && + chcheConditions.cLE2[pIndex] != EMPTY_VALUE && + !chcheConditions.isCStrongBullish) + { + // + chcheCLastLongExitTime = pBar.time; + chcheCLastLongExit1 = chcheConditions.cLE1[pIndex]; + chcheCLastLongExit2 = chcheConditions.cLE2[pIndex]; + } + + // + if (chcheConditions.cSE1[pIndex] > 0 && + chcheConditions.cSE2[pIndex] > 0 && + chcheConditions.cSE1[pIndex] != EMPTY_VALUE && + chcheConditions.cSE2[pIndex] != EMPTY_VALUE && + !chcheConditions.isCStrongBearish) + { + // + chcheCLastShortExitTime = pBar.time; + chcheCLastShortExit1 = chcheConditions.cSE1[pIndex]; + chcheCLastShortExit2 = chcheConditions.cSE2[pIndex]; + } + + // + double chcheMinCBullish = chcheHelper.GetCycleBullishMin( + cIndex, + X_MARKET_CYCLE_UNKNOWN // Current ... + ); + double chcheMaxCBearish = chcheHelper.GetCycleBearishMax( + cIndex, + X_MARKET_CYCLE_UNKNOWN // Current ... + ); + + // + // XCHVLM ... + + // + double chvlmBullishPower = chvlmHelper.GetBullishPower(cIndex); + double chvlmBearishPower = chvlmHelper.GetBearishPower(cIndex); + + // + DetectImportantAreas(); + + // + // Attached Important Areas to Conditions ... + FillConditionsImportantAreas(conditions); + + // + int pushers = 0; + string signallers[]; + + // + bool notHaveBearishPower = (!chmConditions.hasBearishPower && + !chhkConditions.hasBearishPower && + !chtdConditions.hasBearishPower && + !chcheConditions.hasBearishPower && + !chstrConditions.hasBearishPower && + !chvlmConditions.hasBearishPower && + !chvwapConditions.hasBearishPower); + + // + bool notHaveBullishPower = (!chmConditions.hasBullishPower && + !chhkConditions.hasBullishPower && + !chtdConditions.hasBullishPower && + !chcheConditions.hasBullishPower && + !chstrConditions.hasBullishPower && + !chvlmConditions.hasBullishPower && + !chvwapConditions.hasBullishPower); + + // + // XCHM ... + if (mEnableXCHM) + { + // + if (chmConditions.isBullishPowerUp) + { + // + bool chmHasLong = + // + hasBullishPower && + cBar.IsBullish() && + hasBullishPattern && + hasBullishPressure && + notHaveBearishPower && + cBar.low > chmMinBullishFast && + chmConditions.isBullishPowerUp && + chcheConditions.isCStrongBullish + // + ; + + // + if (chmHasLong) + { + // + hasLong = chmHasLong; + if (hasLong) + { + // + pushers++; + Add( + "XCHM", + signallers // + ); + + // + sl = chmMaxBullishFast; + type = POSITION_TYPE_BUY; + } + } + } + + // + if (chmConditions.isBearishPowerUp) + { + // + bool chmHasShort = + // + hasBearishPower && + cBar.IsBearish() && + hasBearishPattern && + hasBearishPressure && + notHaveBullishPower && + cBar.high < chmMaxBearishFast && + chmConditions.isBearishPowerUp && + chcheConditions.isCStrongBearish + // + ; + + // + if (chmHasShort) + { + // + hasShort = chmHasShort; + if (hasShort) + { + // + pushers++; + Add( + "XCHM", + signallers // + ); + + // + sl = chmMinBearishFast; + type = POSITION_TYPE_SELL; + } + } + } + } + + // + // XCHHK ... + if (mEnableXCHHK) + { + // + if (chhkConditions.isBullishPowerUp) + { + // + bool chhkHasLong = + // + hasBullishPower && + cBar.IsBullish() && + hasBullishPattern && + hasBullishPressure && + notHaveBearishPower && + cBar.low > chhkMinBullishHigh && + chhkConditions.isBullishPowerUp && + chcheConditions.isCStrongBullish + // + ; + + // + if (chhkHasLong) + { + // + hasLong = chhkHasLong; + if (hasLong) + { + // + pushers++; + Add( + "XCHHK", + signallers // + ); + + // + sl = chhkMaxBullishLow; + type = POSITION_TYPE_BUY; + } + } + } + + // + if (chhkConditions.isBearishPowerUp) + { + // + bool chhkHasShort = + // + hasBearishPower && + cBar.IsBearish() && + hasBearishPattern && + hasBearishPressure && + notHaveBullishPower && + cBar.high < chhkMaxBearishLow && + chhkConditions.isBearishPowerUp && + chcheConditions.isCStrongBearish + // + ; + + // + if (chhkHasShort) + { + // + hasShort = chhkHasShort; + if (hasShort) + { + // + pushers++; + Add( + "XCHHK", + signallers // + ); + + // + sl = chhkMinBearishHigh; + type = POSITION_TYPE_SELL; + } + } + } + } + + // + // XCHSTR ... + if (mEnableXCHSTR) + { + // + if (chstrConditions.isBullishPowerUp) + { + // + bool chstrHasLong = + // + hasBullishPower && + cBar.IsBullish() && + hasBullishPattern && + hasBullishPressure && + notHaveBearishPower && + cBar.low > chstrMinBullish && + chstrConditions.isBullishPowerUp && + chcheConditions.isCStrongBullish + // + ; + + // + if (chstrHasLong) + { + // + hasLong = chstrHasLong; + if (hasLong) + { + // + pushers++; + Add( + "XCHSTR", + signallers // + ); + + // + sl = chstrMinBullish; + type = POSITION_TYPE_BUY; + } + } + } + + // + if (chstrConditions.isBearishPowerUp) + { + // + bool chstrHasShort = + // + hasBearishPower && + cBar.IsBearish() && + hasBearishPattern && + hasBearishPressure && + notHaveBullishPower && + cBar.high < chstrMaxBearish && + chstrConditions.isBearishPowerUp && + chcheConditions.isCStrongBearish + // + ; + + // + if (chstrHasShort) + { + // + hasShort = chstrHasShort; + if (hasShort) + { + // + pushers++; + Add( + "XCHSTR", + signallers // + ); + + // + sl = chstrMaxBearish; + type = POSITION_TYPE_SELL; + } + } + } + } + + // + // XCHCHE ... + if (mEnableXCHCHE) + { + // + if (chcheConditions.isCStrongBullish) + { + // + bool chcheHasLong = + // + hasBullishPower && + HasCHCHECLast() && + cBar.IsBullish() && + hasBullishPattern && + hasBullishPressure && + notHaveBearishPower && + chcheMinCBullish > 0 && + chcheConditions.hasBullishPower && + chcheConditions.isCStrongBullish && + chcheMinCBullish > GetMaxCHCHECLast() + // + ; + + // + if (chcheHasLong) + { + // + hasLong = chcheHasLong; + if (hasLong) + { + // + pushers++; + Add( + "XCHCHE", + signallers // + ); + + // + sl = chcheMinBullish; + type = POSITION_TYPE_BUY; + } + } + } + + // + if (chcheConditions.isCStrongBearish) + { + // + bool chcheHasShort = + // + hasBearishPower && + HasCHCHECLast() && + cBar.IsBearish() && + hasBearishPattern && + hasBearishPressure && + notHaveBullishPower && + chcheMaxCBearish > 0 && + chcheConditions.hasBearishPower && + chcheConditions.isCStrongBearish && + chcheMaxCBearish > GetMaxCHCHECLast() + // + ; + + // + if (chcheHasShort) + { + // + hasShort = chcheHasShort; + if (hasShort) + { + // + pushers++; + Add( + "XCHCHE", + signallers // + ); + + // + sl = chcheMaxBearish; + type = POSITION_TYPE_SELL; + } + } + } + } + + // + result = hasLong || hasShort; + if (!result) + { + // + CheckImportantAreasValidation(); + + // + return result; + } + + // + DestroyImportantAreas(); + + // + // Retrieve Entry Price based on Position Type ... + entry = GetEntry(mSymbol, type); + + // + // Calculate TP and SL ... + // based on Strategy ... + // only when on of TP or SL Provides, using provided R2R ... + if ((tp <= 0 && sl > 0) || (tp > 0 && sl <= 0)) + { + // + CalculateTPSLByPrice( + sl, + tp, + type, + entry, + r2r // + ); + } + + // + // Prepare Signal ... + result = signal.Prepare( + mSymbol, + signallers[0], + mPeriod, + type, + mode, + entry, + mVolume, + sl, + tp // + ); + if (!result) + { + return result; + } + + // + signal.pushers = pushers; + + // + // Prepare and Normalize Signal for Execution in Strategy ... + result = PrepareSignal(signal); + if (!result) + { + return result; + } + + // + // Notify XCH Specified Signal Event Handlers ... + NotifyOnXCHSignalEventHandlers( + signal, + conditions // + ); + + // + // Since we Ignore Signal Execution in this Strategy ... + // Make it the result false here for Preventing Double Execution ... + result = false; + + // + return result; + } + + // + // Protected ... +protected: + // + // Props ... + + // + bool mEnableXCHM; // Enable XCHM Signaller + bool mEnableXCHHK; // Enable XCHHK Signaller + bool mEnableXCHSTR; // Enable XCHSTR Signaller + bool mEnableXCHCHE; // Enable XCHCHE Signaller + + // + // XPV ... + XPVInputs pvInputs; + XSCXPVHelper *pvHelper; + + // + // XCHMA ... + XCHMInputs chmInputs; + XSCXCHMHelper *chmHelper; + + // + // XCHHK ... + XCHHKInputs chhkInputs; + XSCXCHHKHelper *chhkHelper; + + // + // XCHTD ... + XCHTDInputs chtdInputs; + XSCXCHTDHelper *chtdHelper; + + // + // XSTR ... + XCHSTRInputs chstrInputs; + XSCXCHSTRHelper *chstrHelper; + + // + // XCHCHE ... + XCHCHEInputs chcheInputs; + XSCXCHCHEHelper *chcheHelper; + + // + // XCHVLM ... + XCHVLMInputs chvlmInputs; + XSCXCHVLMHelper *chvlmHelper; + + // + // XCHICH ... + XCHICHInputs chichInputs; + XSCXCHICHHelper *chichHelper; + + // + // XCHVWAP ... + XCHVWAPInputs chvwapInputs; + XSCXCHVWAPHelper *chvwapHelper; + + // + // XCHSWINGS ... + XCHSwingsInputs chswingsInputs; + XSCXCHSwingsHelper *chswingsHelper; + + // + + // + // Private ... +private: + // + // Props ... + + // + // On XCH Signal Recieved Event Handler(s) ... + TOnXCHSignal mOnXCHSignalEventHandlers[]; + + // + // Notified Signal Event Handler(s) ... + void NotifyOnXCHSignalEventHandlers( + XSignal &signal, + XCHCHMAStrategyConditions &conditions // + ) + { + // + if (!signal.IsValid() || !conditions.IsValid()) + { + return; + } + + // + int count = ArraySize(mOnXCHSignalEventHandlers); + if (!IsValidSize(count)) + { + return; + } + + // + for (int i = 0; i < count; i++) + { + // + mOnXCHSignalEventHandlers[i]( + signal, + conditions // + ); + } + } + + // + // Install all Helpers and Prepare all + // Configurations for required Indicators ... + void PrepareRequirements() + { + // + mEnableXCHM = true; + mEnableXCHHK = true; + mEnableXCHSTR = true; + mEnableXCHCHE = true; + + // + support.Clean(); + supportTime = NULL; + isSupportTested = false; + + // + resistance.Clean(); + resistanceTime = NULL; + isResistanceTested = false; + + // + // Short ... + ENUM_X_PERIOD_METHOD scMethod = X_PERIOD_AUTO; // X_PERIOD_MANUALLY; // How to Find Period + ENUM_TIMEFRAMES scPeriod = NULL; // PERIOD_M20; // Time Period + + // + // Medium ... + ENUM_X_PERIOD_METHOD mcMethod = X_PERIOD_AUTO; // X_PERIOD_MANUALLY; // How to Find Period + ENUM_TIMEFRAMES mcPeriod = NULL; // PERIOD_M30; // Time Period + + // + // Long ... + ENUM_X_PERIOD_METHOD lcMethod = X_PERIOD_AUTO; // X_PERIOD_MANUALLY; // How to Find Period + ENUM_TIMEFRAMES lcPeriod = NULL; // PERIOD_H1; // Time Period + + // + // Hind ... + ENUM_X_PERIOD_METHOD hcMethod = X_PERIOD_AUTO; // X_PERIOD_MANUALLY; // How to Find Period + ENUM_TIMEFRAMES hcPeriod = NULL; // PERIOD_H2; // Time Period + + // + // XPV ... + + // + pvInputs.Default(); + + // + pvInputs.scMethod = scMethod; + pvInputs.scPeriod = scPeriod; + pvInputs.mcMethod = mcMethod; + pvInputs.mcPeriod = mcPeriod; + pvInputs.lcMethod = lcMethod; + pvInputs.lcPeriod = lcPeriod; + pvInputs.hcMethod = hcMethod; + pvInputs.hcPeriod = hcPeriod; + + // + pvInputs.showPeaksAndVales = false; + pvInputs.showLevels = false; + pvInputs.showConsolidations = false; + pvInputs.showFibo1Levels = false; + pvInputs.showFibo2Levels = false; + pvInputs.showFibo3Levels = false; + pvInputs.showFibo4Levels = false; + pvInputs.showFibo5Levels = false; + + // + pvHelper = new XSCXPVHelper(); + pvHelper.Init( + mSymbol, + mPeriod, + pvInputs // + ); + + // + // XCHM ... + + // + chmInputs.Default(); + + // + chmInputs.scMethod = scMethod; + chmInputs.scPeriod = scPeriod; + chmInputs.mcMethod = mcMethod; + chmInputs.mcPeriod = mcPeriod; + chmInputs.lcMethod = lcMethod; + chmInputs.lcPeriod = lcPeriod; + chmInputs.hcMethod = hcMethod; + chmInputs.hcPeriod = hcPeriod; + + // + chmInputs.showFast = false; + chmInputs.showSlow = false; + chmInputs.showCCFast = false; + chmInputs.showCCSlow = false; + chmInputs.showSCFast = false; + chmInputs.showSCSlow = false; + chmInputs.showMCFast = false; + chmInputs.showMCSlow = false; + chmInputs.showLCFast = false; + chmInputs.showLCSlow = false; + chmInputs.showHCFast = false; + chmInputs.showHCSlow = false; + + // + chmHelper = new XSCXCHMHelper(); + chmHelper.Init( + mSymbol, + mPeriod, + chmInputs // + ); + + // + // XCHHK ... + + // + chhkInputs.Default(); + + // + chhkInputs.scMethod = scMethod; + chhkInputs.scPeriod = scPeriod; + chhkInputs.mcMethod = mcMethod; + chhkInputs.mcPeriod = mcPeriod; + chhkInputs.lcMethod = lcMethod; + chhkInputs.lcPeriod = lcPeriod; + chhkInputs.hcMethod = hcMethod; + chhkInputs.hcPeriod = hcPeriod; + + // + chhkInputs.ignoreShadows = true; + + // + chhkInputs.showCurrent = false; + chhkInputs.showShort = false; + chhkInputs.showMedium = false; + chhkInputs.showLong = false; + chhkInputs.showHind = false; + + // + chhkHelper = new XSCXCHHKHelper(); + chhkHelper.Init( + mSymbol, + mPeriod, + chhkInputs // + ); + + // + // XCHTD ... + + // + chtdInputs.Default(); + + // + chtdInputs.scMethod = scMethod; + chtdInputs.scPeriod = scPeriod; + chtdInputs.mcMethod = mcMethod; + chtdInputs.mcPeriod = mcPeriod; + chtdInputs.lcMethod = lcMethod; + chtdInputs.lcPeriod = lcPeriod; + chtdInputs.hcMethod = hcMethod; + chtdInputs.hcPeriod = hcPeriod; + + // + chtdInputs.showCurrent = false; + chtdInputs.showShort = false; + chtdInputs.showMedium = false; + chtdInputs.showLong = false; + chtdInputs.showHind = false; + + // + chtdHelper = new XSCXCHTDHelper(); + chtdHelper.Init( + mSymbol, + mPeriod, + chtdInputs // + ); + + // + // XCHSTR ... + + // + chstrInputs.Default(); + + // + chstrInputs.scMethod = scMethod; + chstrInputs.scPeriod = scPeriod; + chstrInputs.mcMethod = mcMethod; + chstrInputs.mcPeriod = mcPeriod; + chstrInputs.lcMethod = lcMethod; + chstrInputs.lcPeriod = lcPeriod; + chstrInputs.hcMethod = hcMethod; + chstrInputs.hcPeriod = hcPeriod; + + // + chstrInputs.showCurrent = false; + chstrInputs.showShort = false; + chstrInputs.showMedium = false; + chstrInputs.showLong = false; + chstrInputs.showHind = false; + + // + chstrHelper = new XSCXCHSTRHelper(); + chstrHelper.Init( + mSymbol, + mPeriod, + chstrInputs // + ); + + // + // XCHCHE ... + + // + chcheInputs.Default(); + + // + chcheInputs.scMethod = scMethod; + chcheInputs.scPeriod = scPeriod; + chcheInputs.mcMethod = mcMethod; + chcheInputs.mcPeriod = mcPeriod; + chcheInputs.lcMethod = lcMethod; + chcheInputs.lcPeriod = lcPeriod; + chcheInputs.hcMethod = hcMethod; + chcheInputs.hcPeriod = hcPeriod; + + // + chcheInputs.showCurrentLE1 = false; + chcheInputs.showCurrentLE2 = false; + chcheInputs.showCurrentSE1 = false; + chcheInputs.showCurrentSE2 = false; + chcheInputs.showShortLE1 = false; + chcheInputs.showShortLE2 = false; + chcheInputs.showShortSE1 = false; + chcheInputs.showShortSE2 = false; + chcheInputs.showMediumLE1 = false; + chcheInputs.showMediumLE2 = false; + chcheInputs.showMediumSE1 = false; + chcheInputs.showMediumSE2 = false; + chcheInputs.showLongLE1 = false; + chcheInputs.showLongLE2 = false; + chcheInputs.showLongSE1 = false; + chcheInputs.showLongSE2 = false; + chcheInputs.showHindLE1 = false; + chcheInputs.showHindLE2 = false; + chcheInputs.showHindSE1 = false; + chcheInputs.showHindSE2 = false; + + // + chcheHelper = new XSCXCHCHEHelper(); + chcheHelper.Init( + mSymbol, + mPeriod, + chcheInputs // + ); + + // + // XCHVLM ... + + // + chvlmInputs.Default(); + + // + chvlmInputs.scMethod = scMethod; + chvlmInputs.scPeriod = scPeriod; + chvlmInputs.mcMethod = mcMethod; + chvlmInputs.mcPeriod = mcPeriod; + chvlmInputs.lcMethod = lcMethod; + chvlmInputs.lcPeriod = lcPeriod; + chvlmInputs.hcMethod = hcMethod; + chvlmInputs.hcPeriod = hcPeriod; + + // + chvlmInputs.showCurrent = true; + chvlmInputs.showShort = true; + chvlmInputs.showMedium = true; + chvlmInputs.showLong = true; + chvlmInputs.showHind = true; + + // + chvlmHelper = new XSCXCHVLMHelper(); + chvlmHelper.Init( + mSymbol, + mPeriod, + chvlmInputs // + ); + + // + // XCHICH ... + + // + chichInputs.Default(); + + // + chichInputs.scMethod = scMethod; + chichInputs.scPeriod = scPeriod; + chichInputs.mcMethod = mcMethod; + chichInputs.mcPeriod = mcPeriod; + chichInputs.lcMethod = lcMethod; + chichInputs.lcPeriod = lcPeriod; + chichInputs.hcMethod = hcMethod; + chichInputs.hcPeriod = hcPeriod; + + // + chichInputs.showTenkanSen = false; + chichInputs.showKijunSen = false; + chichInputs.showChikouSpan = false; + chichInputs.showSenkouSpanA = false; + chichInputs.showSenkouSpanB = false; + chichInputs.showKumo = false; + + // + chichInputs.showCurrent = false; + chichInputs.showShort = false; + chichInputs.showMedium = false; + chichInputs.showLong = false; + chichInputs.showHind = false; + + // + chichHelper = new XSCXCHICHHelper(); + chichHelper.Init( + mSymbol, + mPeriod, + chichInputs // + ); + + // + // XCHVWAP ... + + // + chvwapInputs.Default(); + + // + chvwapInputs.scMethod = scMethod; + chvwapInputs.scPeriod = scPeriod; + chvwapInputs.mcMethod = mcMethod; + chvwapInputs.mcPeriod = mcPeriod; + chvwapInputs.lcMethod = lcMethod; + chvwapInputs.lcPeriod = lcPeriod; + chvwapInputs.hcMethod = hcMethod; + chvwapInputs.hcPeriod = hcPeriod; + + // + chvwapInputs.showShort = false; + chvwapInputs.showMedium = false; + chvwapInputs.showLong = false; + chvwapInputs.showHind = false; + + // + chvwapHelper = new XSCXCHVWAPHelper(); + chvwapHelper.Init( + mSymbol, + mPeriod, + chvwapInputs // + ); + + // + // XCHSwings ... + + // + chswingsInputs.Default(); + + // + chswingsInputs.showSwingHighs = false; + chswingsInputs.showSwingLows = false; + chswingsInputs.showCurrent = false; + chswingsInputs.showShort = false; + chswingsInputs.showMedium = false; + chswingsInputs.showLong = false; + chswingsInputs.showHind = false; + + // + chswingsInputs.scMethod = scMethod; + chswingsInputs.scPeriod = scPeriod; + chswingsInputs.mcMethod = mcMethod; + chswingsInputs.mcPeriod = mcPeriod; + chswingsInputs.lcMethod = lcMethod; + chswingsInputs.lcPeriod = lcPeriod; + chswingsInputs.hcMethod = hcMethod; + chswingsInputs.hcPeriod = hcPeriod; + + // + chswingsHelper = new XSCXCHSwingsHelper(); + chswingsHelper.Init( + mSymbol, + mPeriod, + chswingsInputs // + ); + + // + } + + // + void FillConditionsImportantAreas(XCHCHMAStrategyConditions &conditions) + { + // + if (!conditions.IsValid()) + { + return; + } + + // + conditions.support = support; + conditions.resistance = resistance; + conditions.bullishOB = bullishOB; + conditions.bearishOB = bearishOB; + conditions.bullishFVG = bullishFVG; + conditions.bearishFVG = bearishFVG; + conditions.bullishTrend = bullishTrend; + conditions.bearishTrend = bearishTrend; + + // + conditions.bullishFVGUpper = bullishFVGUpper; + conditions.bullishFVGLower = bullishFVGLower; + conditions.bearishFVGUpper = bearishFVGUpper; + conditions.bearishFVGLower = bearishFVGLower; + + // + Copy( + bullishTrendSwingHighs, + conditions.bullishTrendSwingHighs, + true // + ); + + // + Copy( + bullishTrendSwingLows, + conditions.bullishTrendSwingLows, + true // + ); + + // + Copy( + bearishTrendSwingHighs, + conditions.bearishTrendSwingHighs, + true // + ); + + // + Copy( + bearishTrendSwingLows, + conditions.bearishTrendSwingLows, + true // + ); + } + + // + // XCHE Custom Data ... + + // + double chcheCLastLongExit1; + double chcheCLastLongExit2; + datetime chcheCLastLongExitTime; + double GetMaxCHCHECLastLong() + { + // + return MathMax( + chcheCLastLongExit1, + chcheCLastLongExit2 // + ); + } + double GetMinCHCHECLastLong() + { + // + return MathMin( + chcheCLastLongExit1, + chcheCLastLongExit2 // + ); + } + + // + double chcheCLastShortExit1; + double chcheCLastShortExit2; + datetime chcheCLastShortExitTime; + double GetMaxCHCHECLastShort() + { + // + return MathMax( + chcheCLastShortExit1, + chcheCLastShortExit2 // + ); + } + double GetMinCHCHECLastShort() + { + // + return MathMin( + chcheCLastShortExit1, + chcheCLastShortExit2 // + ); + } + + // + double GetMaxCHCHECLast() + { + // + return MathMax( + GetMaxCHCHECLastLong(), + GetMaxCHCHECLastShort() // + ); + } + double GetMinCHCHECLast() + { + // + return MathMin( + GetMinCHCHECLastLong(), + GetMinCHCHECLastShort() // + ); + } + + // + bool HasCHCHECLast() + { + // + bool result = false; + + // + result = + IsValid(chcheCLastLongExitTime) || + IsValid(chcheCLastShortExitTime); + + // + return result; + } + + // +}; + +// \ No newline at end of file diff --git a/Parsers/x-saherelm.xch.dowj.long.parser.mq5 b/Documents/BKP/Requirements/x-saherelm.xch.dowj.long.parser.mq5 similarity index 100% rename from Parsers/x-saherelm.xch.dowj.long.parser.mq5 rename to Documents/BKP/Requirements/x-saherelm.xch.dowj.long.parser.mq5 diff --git a/Parsers/x-saherelm.xch.dowj.short.parser.mq5 b/Documents/BKP/Requirements/x-saherelm.xch.dowj.short.parser.mq5 similarity index 100% rename from Parsers/x-saherelm.xch.dowj.short.parser.mq5 rename to Documents/BKP/Requirements/x-saherelm.xch.dowj.short.parser.mq5 diff --git a/Parsers/x-saherelm.xch.empty.long.parser.mq5 b/Documents/BKP/Requirements/x-saherelm.xch.empty.long.parser.mq5 similarity index 100% rename from Parsers/x-saherelm.xch.empty.long.parser.mq5 rename to Documents/BKP/Requirements/x-saherelm.xch.empty.long.parser.mq5 diff --git a/Parsers/x-saherelm.xch.empty.short.parser.mq5 b/Documents/BKP/Requirements/x-saherelm.xch.empty.short.parser.mq5 similarity index 100% rename from Parsers/x-saherelm.xch.empty.short.parser.mq5 rename to Documents/BKP/Requirements/x-saherelm.xch.empty.short.parser.mq5 diff --git a/Parsers/x-saherelm.xch.eurcad.long.parser.mq5 b/Documents/BKP/Requirements/x-saherelm.xch.eurcad.long.parser.mq5 similarity index 100% rename from Parsers/x-saherelm.xch.eurcad.long.parser.mq5 rename to Documents/BKP/Requirements/x-saherelm.xch.eurcad.long.parser.mq5 diff --git a/Parsers/x-saherelm.xch.eurcad.short.parser.mq5 b/Documents/BKP/Requirements/x-saherelm.xch.eurcad.short.parser.mq5 similarity index 100% rename from Parsers/x-saherelm.xch.eurcad.short.parser.mq5 rename to Documents/BKP/Requirements/x-saherelm.xch.eurcad.short.parser.mq5 diff --git a/Parsers/x-saherelm.xch.eurchf.long.parser.mq5 b/Documents/BKP/Requirements/x-saherelm.xch.eurchf.long.parser.mq5 similarity index 100% rename from Parsers/x-saherelm.xch.eurchf.long.parser.mq5 rename to Documents/BKP/Requirements/x-saherelm.xch.eurchf.long.parser.mq5 diff --git a/Parsers/x-saherelm.xch.eurchf.short.parser.mq5 b/Documents/BKP/Requirements/x-saherelm.xch.eurchf.short.parser.mq5 similarity index 100% rename from Parsers/x-saherelm.xch.eurchf.short.parser.mq5 rename to Documents/BKP/Requirements/x-saherelm.xch.eurchf.short.parser.mq5 diff --git a/Parsers/x-saherelm.xch.eurgbp.long.parser.mq5 b/Documents/BKP/Requirements/x-saherelm.xch.eurgbp.long.parser.mq5 similarity index 100% rename from Parsers/x-saherelm.xch.eurgbp.long.parser.mq5 rename to Documents/BKP/Requirements/x-saherelm.xch.eurgbp.long.parser.mq5 diff --git a/Parsers/x-saherelm.xch.eurgbp.short.parser.mq5 b/Documents/BKP/Requirements/x-saherelm.xch.eurgbp.short.parser.mq5 similarity index 100% rename from Parsers/x-saherelm.xch.eurgbp.short.parser.mq5 rename to Documents/BKP/Requirements/x-saherelm.xch.eurgbp.short.parser.mq5 diff --git a/Parsers/x-saherelm.xch.eurjpy.long.parser.mq5 b/Documents/BKP/Requirements/x-saherelm.xch.eurjpy.long.parser.mq5 similarity index 100% rename from Parsers/x-saherelm.xch.eurjpy.long.parser.mq5 rename to Documents/BKP/Requirements/x-saherelm.xch.eurjpy.long.parser.mq5 diff --git a/Parsers/x-saherelm.xch.eurjpy.short.parser.mq5 b/Documents/BKP/Requirements/x-saherelm.xch.eurjpy.short.parser.mq5 similarity index 100% rename from Parsers/x-saherelm.xch.eurjpy.short.parser.mq5 rename to Documents/BKP/Requirements/x-saherelm.xch.eurjpy.short.parser.mq5 diff --git a/Parsers/x-saherelm.xch.eurusd.long.parser.mq5 b/Documents/BKP/Requirements/x-saherelm.xch.eurusd.long.parser.mq5 similarity index 100% rename from Parsers/x-saherelm.xch.eurusd.long.parser.mq5 rename to Documents/BKP/Requirements/x-saherelm.xch.eurusd.long.parser.mq5 diff --git a/Parsers/x-saherelm.xch.eurusd.short.parser.mq5 b/Documents/BKP/Requirements/x-saherelm.xch.eurusd.short.parser.mq5 similarity index 100% rename from Parsers/x-saherelm.xch.eurusd.short.parser.mq5 rename to Documents/BKP/Requirements/x-saherelm.xch.eurusd.short.parser.mq5 diff --git a/Parsers/x-saherelm.xch.gbpusd.long.parser.mq5 b/Documents/BKP/Requirements/x-saherelm.xch.gbpusd.long.parser.mq5 similarity index 100% rename from Parsers/x-saherelm.xch.gbpusd.long.parser.mq5 rename to Documents/BKP/Requirements/x-saherelm.xch.gbpusd.long.parser.mq5 diff --git a/Parsers/x-saherelm.xch.gbpusd.short.parser.mq5 b/Documents/BKP/Requirements/x-saherelm.xch.gbpusd.short.parser.mq5 similarity index 100% rename from Parsers/x-saherelm.xch.gbpusd.short.parser.mq5 rename to Documents/BKP/Requirements/x-saherelm.xch.gbpusd.short.parser.mq5 diff --git a/Parsers/x-saherelm.xch.nzdusd.long.parser.mq5 b/Documents/BKP/Requirements/x-saherelm.xch.nzdusd.long.parser.mq5 similarity index 100% rename from Parsers/x-saherelm.xch.nzdusd.long.parser.mq5 rename to Documents/BKP/Requirements/x-saherelm.xch.nzdusd.long.parser.mq5 diff --git a/Parsers/x-saherelm.xch.nzdusd.short.parser.mq5 b/Documents/BKP/Requirements/x-saherelm.xch.nzdusd.short.parser.mq5 similarity index 100% rename from Parsers/x-saherelm.xch.nzdusd.short.parser.mq5 rename to Documents/BKP/Requirements/x-saherelm.xch.nzdusd.short.parser.mq5 diff --git a/Documents/BKP/Requirements/x-saherelm.xch.parser copy.mq5 b/Documents/BKP/Requirements/x-saherelm.xch.parser copy.mq5 new file mode 100644 index 00000000..2c40d59a --- /dev/null +++ b/Documents/BKP/Requirements/x-saherelm.xch.parser copy.mq5 @@ -0,0 +1,1235 @@ +/////////////////////////////////////////////////////// +// +// SaherElm IT Center MQL5 Strategy Parser Library +// ------------------------------------------------ +// Name: XCHStartegyConditionsParser +// Description: provide all conditions parsing +// for XCH Strategy ... +// +// +// Maintainer: +// ------------ +// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) +// +////////////////////////////////////////////////////// +// +// Global Properties ... +#property library +#property copyright "Copyright 2023, SaherElm IT Center" +#property link "https://www.saherelm.ir" +#property version "1.00" +#property strict + +// +// Imports ... +#include "../Strategies/x-saherelm.xch.strategy.mq5" + +// +#include "../Parsers/x-saherelm.xch.dowj.long.parser.mq5" +#include "../Parsers/x-saherelm.xch.dowj.short.parser.mq5" +#include "../Parsers/x-saherelm.xch.eurgbp.long.parser.mq5" +#include "../Parsers/x-saherelm.xch.eurgbp.short.parser.mq5" +#include "../Parsers/x-saherelm.xch.eurjpy.long.parser.mq5" +#include "../Parsers/x-saherelm.xch.eurjpy.short.parser.mq5" +#include "../Parsers/x-saherelm.xch.eurchf.long.parser.mq5" +#include "../Parsers/x-saherelm.xch.eurchf.short.parser.mq5" +#include "../Parsers/x-saherelm.xch.audusd.long.parser.mq5" +#include "../Parsers/x-saherelm.xch.audusd.short.parser.mq5" +#include "../Parsers/x-saherelm.xch.nzdusd.long.parser.mq5" +#include "../Parsers/x-saherelm.xch.nzdusd.short.parser.mq5" +#include "../Parsers/x-saherelm.xch.usdcad.long.parser.mq5" +#include "../Parsers/x-saherelm.xch.usdcad.short.parser.mq5" +#include "../Parsers/x-saherelm.xch.eurcad.long.parser.mq5" +#include "../Parsers/x-saherelm.xch.eurcad.short.parser.mq5" +#include "../Parsers/x-saherelm.xch.eurusd.long.parser.mq5" +#include "../Parsers/x-saherelm.xch.eurusd.short.parser.mq5" +#include "../Parsers/x-saherelm.xch.usdjpy.long.parser.mq5" +#include "../Parsers/x-saherelm.xch.usdjpy.short.parser.mq5" +#include "../Parsers/x-saherelm.xch.usdchf.long.parser.mq5" +#include "../Parsers/x-saherelm.xch.usdchf.short.parser.mq5" +#include "../Parsers/x-saherelm.xch.gbpusd.long.parser.mq5" +#include "../Parsers/x-saherelm.xch.gbpusd.short.parser.mq5" +#include "../Parsers/x-saherelm.xch.xauusd.long.parser.mq5" +#include "../Parsers/x-saherelm.xch.xauusd.short.parser.mq5" + +// +// Conditions Parser ... +struct XCHStartegyConditionsParser +{ + // + string _version; + + // + // Parsers ... + + // + XSCAccount _account; + XSymbolParser _symbolParser; + XMarketParser _marketParser; + + // + // EURUSD ... + XCHStartegyEURUSDLongConditionsParser _eurusdLongParser; + XCHStartegyEURUSDShortConditionsParser _eurusdShortParser; + + // + // GBPUSD ... + XCHStartegyGBPUSDLongConditionsParser _gbpusdLongParser; + XCHStartegyGBPUSDShortConditionsParser _gbpusdShortParser; + + // + // EURGBP ... + XCHStartegyEURGBPLongConditionsParser _eurgbpLongParser; + XCHStartegyEURGBPShortConditionsParser _eurgbpShortParser; + + // + // USDJPY ... + XCHStartegyUSDJPYLongConditionsParser _usdjpyLongParser; + XCHStartegyUSDJPYShortConditionsParser _usdjpyShortParser; + + // + // EURJPY ... + XCHStartegyEURJPYLongConditionsParser _eurjpyLongParser; + XCHStartegyEURJPYShortConditionsParser _eurjpyShortParser; + + // + // USDCHF ... + XCHStartegyUSDCHFLongConditionsParser _usdchfLongParser; + XCHStartegyUSDCHFShortConditionsParser _usdchfShortParser; + + // + // EURCHF ... + XCHStartegyEURCHFLongConditionsParser _eurchfLongParser; + XCHStartegyEURCHFShortConditionsParser _eurchfShortParser; + + // + // XAUUSD ... + XCHStartegyXAUUSDLongConditionsParser _xauusdLongParser; + XCHStartegyXAUUSDShortConditionsParser _xauusdShortParser; + + // + // DOWJONES ... + XCHStartegyDOWJONESLongConditionsParser _dowjonesLongParser; + XCHStartegyDOWJONESShortConditionsParser _dowjonesShortParser; + + // + // AUDUSD ... + XCHStartegyAUDUSDLongConditionsParser _audusdLongParser; + XCHStartegyAUDUSDShortConditionsParser _audusdShortParser; + + // + // NZDUSD ... + XCHStartegyNZDUSDLongConditionsParser _nzdusdLongParser; + XCHStartegyNZDUSDShortConditionsParser _nzdusdShortParser; + + // + // USDCAD ... + XCHStartegyUSDCADLongConditionsParser _usdcadLongParser; + XCHStartegyUSDCADShortConditionsParser _usdcadShortParser; + + // + // EURCAD ... + XCHStartegyEURCADLongConditionsParser _eurcadLongParser; + XCHStartegyEURCADShortConditionsParser _eurcadShortParser; + + // + string GenerateSignalConditions( + XSignal &signal, + XCHStrategyConditions &conditions // + ) + { + // + // Calculate Score ... + double bullishScore = 0; + double bearishScore = 0; + conditions.GenerateScore( + bullishScore, + bearishScore // + ); + + // + // Generate Signal Parser Structured Conditions ... + string result = + "(" + + "\n" + + "// Symbol: " + signal.symbol + "\n" + + "// ---------------" + "\n" + + "// Scores:" + "\n" + + "// ---------------" + "\n" + + "// Bullish: " + ToString(bullishScore) + "\n" + + "// Bearish: " + ToString(bearishScore) + "\n" + + "// ---------------" + "\n" + + "// Time: " + ToString(TimeCurrent()) + "\n" + + "// ---------------" + "\n" + + "//" + "\n" + + "// XPV ..." + "\n" + + "//" + "\n" + + // + // True(s) ... + (conditions.pvConditions.isNewPeak ? "conditions.pvConditions.isNewPeak &&" + "\n" : "") + + (conditions.pvConditions.isNewPeakOverLast ? "conditions.pvConditions.isNewPeakOverLast &&" + "\n" : "") + + (conditions.pvConditions.isNewPeakUnderLast ? "conditions.pvConditions.isNewPeakUnderLast &&" + "\n" : "") + + (conditions.pvConditions.isNewVale ? "conditions.pvConditions.isNewVale &&" + "\n" : "") + + (conditions.pvConditions.isNewValeOverLast ? "conditions.pvConditions.isNewValeOverLast &&" + "\n" : "") + + (conditions.pvConditions.isNewValeUnderLast ? "conditions.pvConditions.isNewValeUnderLast &&" + "\n" : "") + + (conditions.pvConditions.isFiboIncreased ? "conditions.pvConditions.isFiboIncreased &&" + "\n" : "") + + (conditions.pvConditions.isFiboDecreased ? "conditions.pvConditions.isFiboDecreased &&" + "\n" : "") + + (conditions.pvConditions.isFiboSectionChanged ? "conditions.pvConditions.isFiboSectionChanged &&" + "\n" : "") + + (conditions.pvConditions.isCloseOverFib1 ? "conditions.pvConditions.isCloseOverFib1 &&" + "\n" : "") + + (conditions.pvConditions.isCloseOverFib2 ? "conditions.pvConditions.isCloseOverFib2 &&" + "\n" : "") + + (conditions.pvConditions.isCloseOverFib3 ? "conditions.pvConditions.isCloseOverFib3 &&" + "\n" : "") + + (conditions.pvConditions.isCloseOverFib4 ? "conditions.pvConditions.isCloseOverFib4 &&" + "\n" : "") + + (conditions.pvConditions.isCloseOverFib5 ? "conditions.pvConditions.isCloseOverFib5 &&" + "\n" : "") + + (conditions.pvConditions.isCloseUnderFib1 ? "conditions.pvConditions.isCloseUnderFib1 &&" + "\n" : "") + + (conditions.pvConditions.isCloseUnderFib2 ? "conditions.pvConditions.isCloseUnderFib2 &&" + "\n" : "") + + (conditions.pvConditions.isCloseUnderFib3 ? "conditions.pvConditions.isCloseUnderFib3 &&" + "\n" : "") + + (conditions.pvConditions.isCloseUnderFib4 ? "conditions.pvConditions.isCloseUnderFib4 &&" + "\n" : "") + + (conditions.pvConditions.isCloseUnderFib5 ? "conditions.pvConditions.isCloseUnderFib5 &&" + "\n" : "") + + (conditions.pvConditions.isCloseCrossedOverFib1 ? "conditions.pvConditions.isCloseCrossedOverFib1 &&" + "\n" : "") + + (conditions.pvConditions.isCloseCrossedOverFib2 ? "conditions.pvConditions.isCloseCrossedOverFib2 &&" + "\n" : "") + + (conditions.pvConditions.isCloseCrossedOverFib3 ? "conditions.pvConditions.isCloseCrossedOverFib3 &&" + "\n" : "") + + (conditions.pvConditions.isCloseCrossedOverFib4 ? "conditions.pvConditions.isCloseCrossedOverFib4 &&" + "\n" : "") + + (conditions.pvConditions.isCloseCrossedOverFib5 ? "conditions.pvConditions.isCloseCrossedOverFib5 &&" + "\n" : "") + + (conditions.pvConditions.isCloseCrossedUnderFib1 ? "conditions.pvConditions.isCloseCrossedUnderFib1 &&" + "\n" : "") + + (conditions.pvConditions.isCloseCrossedUnderFib2 ? "conditions.pvConditions.isCloseCrossedUnderFib2 &&" + "\n" : "") + + (conditions.pvConditions.isCloseCrossedUnderFib3 ? "conditions.pvConditions.isCloseCrossedUnderFib3 &&" + "\n" : "") + + (conditions.pvConditions.isCloseCrossedUnderFib4 ? "conditions.pvConditions.isCloseCrossedUnderFib4 &&" + "\n" : "") + + (conditions.pvConditions.isCloseCrossedUnderFib5 ? "conditions.pvConditions.isCloseCrossedUnderFib5 &&" + "\n" : "") + + (conditions.pvConditions.isSCBullish ? "conditions.pvConditions.isSCBullish &&" + "\n" : "") + + (conditions.pvConditions.isSCHHBullish ? "conditions.pvConditions.isSCHHBullish &&" + "\n" : "") + + (conditions.pvConditions.isSCLLBullish ? "conditions.pvConditions.isSCLLBullish &&" + "\n" : "") + + (conditions.pvConditions.isSCSwitchedToBullish ? "conditions.pvConditions.isSCSwitchedToBullish &&" + "\n" : "") + + (conditions.pvConditions.isSCHHSwitchedToBullish ? "conditions.pvConditions.isSCHHSwitchedToBullish &&" + "\n" : "") + + (conditions.pvConditions.isSCLLSwitchedToBullish ? "conditions.pvConditions.isSCLLSwitchedToBullish &&" + "\n" : "") + + (conditions.pvConditions.isSCBearish ? "conditions.pvConditions.isSCBearish &&" + "\n" : "") + + (conditions.pvConditions.isSCHHBearish ? "conditions.pvConditions.isSCHHBearish &&" + "\n" : "") + + (conditions.pvConditions.isSCLLBearish ? "conditions.pvConditions.isSCLLBearish &&" + "\n" : "") + + (conditions.pvConditions.isSCSwitchedToBearish ? "conditions.pvConditions.isSCSwitchedToBearish &&" + "\n" : "") + + (conditions.pvConditions.isSCHHSwitchedToBearish ? "conditions.pvConditions.isSCHHSwitchedToBearish &&" + "\n" : "") + + (conditions.pvConditions.isSCLLSwitchedToBeraish ? "conditions.pvConditions.isSCLLSwitchedToBeraish &&" + "\n" : "") + + (conditions.pvConditions.isMCBullish ? "conditions.pvConditions.isMCBullish &&" + "\n" : "") + + (conditions.pvConditions.isMCHHBullish ? "conditions.pvConditions.isMCHHBullish &&" + "\n" : "") + + (conditions.pvConditions.isMCLLBullish ? "conditions.pvConditions.isMCLLBullish &&" + "\n" : "") + + (conditions.pvConditions.isMCSwitchedToBullish ? "conditions.pvConditions.isMCSwitchedToBullish &&" + "\n" : "") + + (conditions.pvConditions.isMCHHSwitchedToBullish ? "conditions.pvConditions.isMCHHSwitchedToBullish &&" + "\n" : "") + + (conditions.pvConditions.isMCLLSwitchedToBullish ? "conditions.pvConditions.isMCLLSwitchedToBullish &&" + "\n" : "") + + (conditions.pvConditions.isMCBearish ? "conditions.pvConditions.isMCBearish &&" + "\n" : "") + + (conditions.pvConditions.isMCHHBearish ? "conditions.pvConditions.isMCHHBearish &&" + "\n" : "") + + (conditions.pvConditions.isMCLLBearish ? "conditions.pvConditions.isMCLLBearish &&" + "\n" : "") + + (conditions.pvConditions.isMCSwitchedToBearish ? "conditions.pvConditions.isMCSwitchedToBearish &&" + "\n" : "") + + (conditions.pvConditions.isMCHHSwitchedToBearish ? "conditions.pvConditions.isMCHHSwitchedToBearish &&" + "\n" : "") + + (conditions.pvConditions.isMCLLSwitchedToBeraish ? "conditions.pvConditions.isMCLLSwitchedToBeraish &&" + "\n" : "") + + (conditions.pvConditions.isLCBullish ? "conditions.pvConditions.isLCBullish &&" + "\n" : "") + + (conditions.pvConditions.isLCHHBullish ? "conditions.pvConditions.isLCHHBullish &&" + "\n" : "") + + (conditions.pvConditions.isLCLLBullish ? "conditions.pvConditions.isLCLLBullish &&" + "\n" : "") + + (conditions.pvConditions.isLCSwitchedToBullish ? "conditions.pvConditions.isLCSwitchedToBullish &&" + "\n" : "") + + (conditions.pvConditions.isLCHHSwitchedToBullish ? "conditions.pvConditions.isLCHHSwitchedToBullish &&" + "\n" : "") + + (conditions.pvConditions.isLCLLSwitchedToBullish ? "conditions.pvConditions.isLCLLSwitchedToBullish &&" + "\n" : "") + + (conditions.pvConditions.isLCBearish ? "conditions.pvConditions.isLCBearish &&" + "\n" : "") + + (conditions.pvConditions.isLCHHBearish ? "conditions.pvConditions.isLCHHBearish &&" + "\n" : "") + + (conditions.pvConditions.isLCLLBearish ? "conditions.pvConditions.isLCLLBearish &&" + "\n" : "") + + (conditions.pvConditions.isLCSwitchedToBearish ? "conditions.pvConditions.isLCSwitchedToBearish &&" + "\n" : "") + + (conditions.pvConditions.isLCHHSwitchedToBearish ? "conditions.pvConditions.isLCHHSwitchedToBearish &&" + "\n" : "") + + (conditions.pvConditions.isLCLLSwitchedToBeraish ? "conditions.pvConditions.isLCLLSwitchedToBeraish &&" + "\n" : "") + + (conditions.pvConditions.isHCBullish ? "conditions.pvConditions.isHCBullish &&" + "\n" : "") + + (conditions.pvConditions.isHCHHBullish ? "conditions.pvConditions.isHCHHBullish &&" + "\n" : "") + + (conditions.pvConditions.isHCLLBullish ? "conditions.pvConditions.isHCLLBullish &&" + "\n" : "") + + (conditions.pvConditions.isHCSwitchedToBullish ? "conditions.pvConditions.isHCSwitchedToBullish &&" + "\n" : "") + + (conditions.pvConditions.isHCHHSwitchedToBullish ? "conditions.pvConditions.isHCHHSwitchedToBullish &&" + "\n" : "") + + (conditions.pvConditions.isHCLLSwitchedToBullish ? "conditions.pvConditions.isHCLLSwitchedToBullish &&" + "\n" : "") + + (conditions.pvConditions.isHCBearish ? "conditions.pvConditions.isHCBearish &&" + "\n" : "") + + (conditions.pvConditions.isHCHHBearish ? "conditions.pvConditions.isHCHHBearish &&" + "\n" : "") + + (conditions.pvConditions.isHCLLBearish ? "conditions.pvConditions.isHCLLBearish &&" + "\n" : "") + + (conditions.pvConditions.isHCSwitchedToBearish ? "conditions.pvConditions.isHCSwitchedToBearish &&" + "\n" : "") + + (conditions.pvConditions.isHCHHSwitchedToBearish ? "conditions.pvConditions.isHCHHSwitchedToBearish &&" + "\n" : "") + + (conditions.pvConditions.isHCLLSwitchedToBeraish ? "conditions.pvConditions.isHCLLSwitchedToBeraish &&" + "\n" : "") + + // "//" + "\n" + + // // + // // False(s) ... + // (!conditions.pvConditions.isNewPeak ? "!conditions.pvConditions.isNewPeak &&" + "\n" : "") + + // (!conditions.pvConditions.isNewPeakOverLast ? "!conditions.pvConditions.isNewPeakOverLast &&" + "\n" : "") + + // (!conditions.pvConditions.isNewPeakUnderLast ? "!conditions.pvConditions.isNewPeakUnderLast &&" + "\n" : "") + + // (!conditions.pvConditions.isNewVale ? "!conditions.pvConditions.isNewVale &&" + "\n" : "") + + // (!conditions.pvConditions.isNewValeOverLast ? "!conditions.pvConditions.isNewValeOverLast &&" + "\n" : "") + + // (!conditions.pvConditions.isNewValeUnderLast ? "!conditions.pvConditions.isNewValeUnderLast &&" + "\n" : "") + + // (!conditions.pvConditions.isFiboIncreased ? "!conditions.pvConditions.isFiboIncreased &&" + "\n" : "") + + // (!conditions.pvConditions.isFiboDecreased ? "!conditions.pvConditions.isFiboDecreased &&" + "\n" : "") + + // (!conditions.pvConditions.isFiboSectionChanged ? "!conditions.pvConditions.isFiboSectionChanged &&" + "\n" : "") + + // (!conditions.pvConditions.isCloseOverFib1 ? "!conditions.pvConditions.isCloseOverFib1 &&" + "\n" : "") + + // (!conditions.pvConditions.isCloseOverFib2 ? "!conditions.pvConditions.isCloseOverFib2 &&" + "\n" : "") + + // (!conditions.pvConditions.isCloseOverFib3 ? "!conditions.pvConditions.isCloseOverFib3 &&" + "\n" : "") + + // (!conditions.pvConditions.isCloseOverFib4 ? "!conditions.pvConditions.isCloseOverFib4 &&" + "\n" : "") + + // (!conditions.pvConditions.isCloseOverFib5 ? "!conditions.pvConditions.isCloseOverFib5 &&" + "\n" : "") + + // (!conditions.pvConditions.isCloseUnderFib1 ? "!conditions.pvConditions.isCloseUnderFib1 &&" + "\n" : "") + + // (!conditions.pvConditions.isCloseUnderFib2 ? "!conditions.pvConditions.isCloseUnderFib2 &&" + "\n" : "") + + // (!conditions.pvConditions.isCloseUnderFib3 ? "!conditions.pvConditions.isCloseUnderFib3 &&" + "\n" : "") + + // (!conditions.pvConditions.isCloseUnderFib4 ? "!conditions.pvConditions.isCloseUnderFib4 &&" + "\n" : "") + + // (!conditions.pvConditions.isCloseUnderFib5 ? "!conditions.pvConditions.isCloseUnderFib5 &&" + "\n" : "") + + // (!conditions.pvConditions.isCloseCrossedOverFib1 ? "!conditions.pvConditions.isCloseCrossedOverFib1 &&" + "\n" : "") + + // (!conditions.pvConditions.isCloseCrossedOverFib2 ? "!conditions.pvConditions.isCloseCrossedOverFib2 &&" + "\n" : "") + + // (!conditions.pvConditions.isCloseCrossedOverFib3 ? "!conditions.pvConditions.isCloseCrossedOverFib3 &&" + "\n" : "") + + // (!conditions.pvConditions.isCloseCrossedOverFib4 ? "!conditions.pvConditions.isCloseCrossedOverFib4 &&" + "\n" : "") + + // (!conditions.pvConditions.isCloseCrossedOverFib5 ? "!conditions.pvConditions.isCloseCrossedOverFib5 &&" + "\n" : "") + + // (!conditions.pvConditions.isCloseCrossedUnderFib1 ? "!conditions.pvConditions.isCloseCrossedUnderFib1 &&" + "\n" : "") + + // (!conditions.pvConditions.isCloseCrossedUnderFib2 ? "!conditions.pvConditions.isCloseCrossedUnderFib2 &&" + "\n" : "") + + // (!conditions.pvConditions.isCloseCrossedUnderFib3 ? "!conditions.pvConditions.isCloseCrossedUnderFib3 &&" + "\n" : "") + + // (!conditions.pvConditions.isCloseCrossedUnderFib4 ? "!conditions.pvConditions.isCloseCrossedUnderFib4 &&" + "\n" : "") + + // (!conditions.pvConditions.isCloseCrossedUnderFib5 ? "!conditions.pvConditions.isCloseCrossedUnderFib5 &&" + "\n" : "") + + // (!conditions.pvConditions.isSCBullish ? "!conditions.pvConditions.isSCBullish &&" + "\n" : "") + + // (!conditions.pvConditions.isSCHHBullish ? "!conditions.pvConditions.isSCHHBullish &&" + "\n" : "") + + // (!conditions.pvConditions.isSCLLBullish ? "!conditions.pvConditions.isSCLLBullish &&" + "\n" : "") + + // (!conditions.pvConditions.isSCSwitchedToBullish ? "!conditions.pvConditions.isSCSwitchedToBullish &&" + "\n" : "") + + // (!conditions.pvConditions.isSCHHSwitchedToBullish ? "!conditions.pvConditions.isSCHHSwitchedToBullish &&" + "\n" : "") + + // (!conditions.pvConditions.isSCLLSwitchedToBullish ? "!conditions.pvConditions.isSCLLSwitchedToBullish &&" + "\n" : "") + + // (!conditions.pvConditions.isSCBearish ? "!conditions.pvConditions.isSCBearish &&" + "\n" : "") + + // (!conditions.pvConditions.isSCHHBearish ? "!conditions.pvConditions.isSCHHBearish &&" + "\n" : "") + + // (!conditions.pvConditions.isSCLLBearish ? "!conditions.pvConditions.isSCLLBearish &&" + "\n" : "") + + // (!conditions.pvConditions.isSCSwitchedToBearish ? "!conditions.pvConditions.isSCSwitchedToBearish &&" + "\n" : "") + + // (!conditions.pvConditions.isSCHHSwitchedToBearish ? "!conditions.pvConditions.isSCHHSwitchedToBearish &&" + "\n" : "") + + // (!conditions.pvConditions.isSCLLSwitchedToBeraish ? "!conditions.pvConditions.isSCLLSwitchedToBeraish &&" + "\n" : "") + + // (!conditions.pvConditions.isMCBullish ? "!conditions.pvConditions.isMCBullish &&" + "\n" : "") + + // (!conditions.pvConditions.isMCHHBullish ? "!conditions.pvConditions.isMCHHBullish &&" + "\n" : "") + + // (!conditions.pvConditions.isMCLLBullish ? "!conditions.pvConditions.isMCLLBullish &&" + "\n" : "") + + // (!conditions.pvConditions.isMCSwitchedToBullish ? "!conditions.pvConditions.isMCSwitchedToBullish &&" + "\n" : "") + + // (!conditions.pvConditions.isMCHHSwitchedToBullish ? "!conditions.pvConditions.isMCHHSwitchedToBullish &&" + "\n" : "") + + // (!conditions.pvConditions.isMCLLSwitchedToBullish ? "!conditions.pvConditions.isMCLLSwitchedToBullish &&" + "\n" : "") + + // (!conditions.pvConditions.isMCBearish ? "!conditions.pvConditions.isMCBearish &&" + "\n" : "") + + // (!conditions.pvConditions.isMCHHBearish ? "!conditions.pvConditions.isMCHHBearish &&" + "\n" : "") + + // (!conditions.pvConditions.isMCLLBearish ? "!conditions.pvConditions.isMCLLBearish &&" + "\n" : "") + + // (!conditions.pvConditions.isMCSwitchedToBearish ? "!conditions.pvConditions.isMCSwitchedToBearish &&" + "\n" : "") + + // (!conditions.pvConditions.isMCHHSwitchedToBearish ? "!conditions.pvConditions.isMCHHSwitchedToBearish &&" + "\n" : "") + + // (!conditions.pvConditions.isMCLLSwitchedToBeraish ? "!conditions.pvConditions.isMCLLSwitchedToBeraish &&" + "\n" : "") + + // (!conditions.pvConditions.isLCBullish ? "!conditions.pvConditions.isLCBullish &&" + "\n" : "") + + // (!conditions.pvConditions.isLCHHBullish ? "!conditions.pvConditions.isLCHHBullish &&" + "\n" : "") + + // (!conditions.pvConditions.isLCLLBullish ? "!conditions.pvConditions.isLCLLBullish &&" + "\n" : "") + + // (!conditions.pvConditions.isLCSwitchedToBullish ? "!conditions.pvConditions.isLCSwitchedToBullish &&" + "\n" : "") + + // (!conditions.pvConditions.isLCHHSwitchedToBullish ? "!conditions.pvConditions.isLCHHSwitchedToBullish &&" + "\n" : "") + + // (!conditions.pvConditions.isLCLLSwitchedToBullish ? "!conditions.pvConditions.isLCLLSwitchedToBullish &&" + "\n" : "") + + // (!conditions.pvConditions.isLCBearish ? "!conditions.pvConditions.isLCBearish &&" + "\n" : "") + + // (!conditions.pvConditions.isLCHHBearish ? "!conditions.pvConditions.isLCHHBearish &&" + "\n" : "") + + // (!conditions.pvConditions.isLCLLBearish ? "!conditions.pvConditions.isLCLLBearish &&" + "\n" : "") + + // (!conditions.pvConditions.isLCSwitchedToBearish ? "!conditions.pvConditions.isLCSwitchedToBearish &&" + "\n" : "") + + // (!conditions.pvConditions.isLCHHSwitchedToBearish ? "!conditions.pvConditions.isLCHHSwitchedToBearish &&" + "\n" : "") + + // (!conditions.pvConditions.isLCLLSwitchedToBeraish ? "!conditions.pvConditions.isLCLLSwitchedToBeraish &&" + "\n" : "") + + // (!conditions.pvConditions.isHCBullish ? "!conditions.pvConditions.isHCBullish &&" + "\n" : "") + + // (!conditions.pvConditions.isHCHHBullish ? "!conditions.pvConditions.isHCHHBullish &&" + "\n" : "") + + // (!conditions.pvConditions.isHCLLBullish ? "!conditions.pvConditions.isHCLLBullish &&" + "\n" : "") + + // (!conditions.pvConditions.isHCSwitchedToBullish ? "!conditions.pvConditions.isHCSwitchedToBullish &&" + "\n" : "") + + // (!conditions.pvConditions.isHCHHSwitchedToBullish ? "!conditions.pvConditions.isHCHHSwitchedToBullish &&" + "\n" : "") + + // (!conditions.pvConditions.isHCLLSwitchedToBullish ? "!conditions.pvConditions.isHCLLSwitchedToBullish &&" + "\n" : "") + + // (!conditions.pvConditions.isHCBearish ? "!conditions.pvConditions.isHCBearish &&" + "\n" : "") + + // (!conditions.pvConditions.isHCHHBearish ? "!conditions.pvConditions.isHCHHBearish &&" + "\n" : "") + + // (!conditions.pvConditions.isHCLLBearish ? "!conditions.pvConditions.isHCLLBearish &&" + "\n" : "") + + // (!conditions.pvConditions.isHCSwitchedToBearish ? "!conditions.pvConditions.isHCSwitchedToBearish &&" + "\n" : "") + + // (!conditions.pvConditions.isHCHHSwitchedToBearish ? "!conditions.pvConditions.isHCHHSwitchedToBearish &&" + "\n" : "") + + // (!conditions.pvConditions.isHCLLSwitchedToBeraish ? "!conditions.pvConditions.isHCLLSwitchedToBeraish &&" + "\n" : "") + + "//" + "\n" + + "// XCHM ..." + "\n" + + "//" + "\n" + + (conditions.chmConditions.hasBullishPower ? "conditions.chmConditions.hasBullishPower &&" + "\n" : "") + + (conditions.chmConditions.hasBearishPower ? "conditions.chmConditions.hasBearishPower &&" + "\n" : "") + + (conditions.chmConditions.isBullishPowerUp ? "conditions.chmConditions.isBullishPowerUp &&" + "\n" : "") + + (conditions.chmConditions.isBearishPowerUp ? "conditions.chmConditions.isBearishPowerUp &&" + "\n" : "") + + (conditions.chmConditions.isBullishPowerIncreasing ? "conditions.chmConditions.isBullishPowerIncreasing &&" + "\n" : "") + + (conditions.chmConditions.isBullishPowerDecreasing ? "conditions.chmConditions.isBullishPowerDecreasing &&" + "\n" : "") + + (conditions.chmConditions.isBearishPowerIncreasing ? "conditions.chmConditions.isBearishPowerIncreasing &&" + "\n" : "") + + (conditions.chmConditions.isBearishPowerDecreasing ? "conditions.chmConditions.isBearishPowerDecreasing &&" + "\n" : "") + + (conditions.chmConditions.isFastOverSlow ? "conditions.chmConditions.isFastOverSlow &&" + "\n" : "") + + (conditions.chmConditions.isFastUnderSlow ? "conditions.chmConditions.isFastUnderSlow &&" + "\n" : "") + + (conditions.chmConditions.isFastCrossedOverSlow ? "conditions.chmConditions.isFastCrossedOverSlow &&" + "\n" : "") + + (conditions.chmConditions.isFastCrossedUnderSlow ? "conditions.chmConditions.isFastCrossedUnderSlow &&" + "\n" : "") + + (conditions.chmConditions.isClosedOverFast ? "conditions.chmConditions.isClosedOverFast &&" + "\n" : "") + + (conditions.chmConditions.isClosedUnderFast ? "conditions.chmConditions.isClosedUnderFast &&" + "\n" : "") + + (conditions.chmConditions.isCFastOverSlow ? "conditions.chmConditions.isCFastOverSlow &&" + "\n" : "") + + (conditions.chmConditions.isCFastUnderSlow ? "conditions.chmConditions.isCFastUnderSlow &&" + "\n" : "") + + (conditions.chmConditions.isCFastCrossedOverSlow ? "conditions.chmConditions.isCFastCrossedOverSlow &&" + "\n" : "") + + (conditions.chmConditions.isCFastCrossedUnderSlow ? "conditions.chmConditions.isCFastCrossedUnderSlow &&" + "\n" : "") + + (conditions.chmConditions.isClosedOverCFast ? "conditions.chmConditions.isClosedOverCFast &&" + "\n" : "") + + (conditions.chmConditions.isClosedUnderCFast ? "conditions.chmConditions.isClosedUnderCFast &&" + "\n" : "") + + (conditions.chmConditions.isSFastOverSlow ? "conditions.chmConditions.isSFastOverSlow &&" + "\n" : "") + + (conditions.chmConditions.isSFastUnderSlow ? "conditions.chmConditions.isSFastUnderSlow &&" + "\n" : "") + + (conditions.chmConditions.isSFastCrossedOverSlow ? "conditions.chmConditions.isSFastCrossedOverSlow &&" + "\n" : "") + + (conditions.chmConditions.isSFastCrossedUnderSlow ? "conditions.chmConditions.isSFastCrossedUnderSlow &&" + "\n" : "") + + (conditions.chmConditions.isClosedOverSFast ? "conditions.chmConditions.isClosedOverSFast &&" + "\n" : "") + + (conditions.chmConditions.isClosedUnderSFast ? "conditions.chmConditions.isClosedUnderSFast &&" + "\n" : "") + + (conditions.chmConditions.isMFastOverSlow ? "conditions.chmConditions.isMFastOverSlow &&" + "\n" : "") + + (conditions.chmConditions.isMFastUnderSlow ? "conditions.chmConditions.isMFastUnderSlow &&" + "\n" : "") + + (conditions.chmConditions.isMFastCrossedOverSlow ? "conditions.chmConditions.isMFastCrossedOverSlow &&" + "\n" : "") + + (conditions.chmConditions.isMFastCrossedUnderSlow ? "conditions.chmConditions.isMFastCrossedUnderSlow &&" + "\n" : "") + + (conditions.chmConditions.isClosedOverMFast ? "conditions.chmConditions.isClosedOverMFast &&" + "\n" : "") + + (conditions.chmConditions.isClosedUnderMFast ? "conditions.chmConditions.isClosedUnderMFast &&" + "\n" : "") + + (conditions.chmConditions.isLFastOverSlow ? "conditions.chmConditions.isLFastOverSlow &&" + "\n" : "") + + (conditions.chmConditions.isLFastUnderSlow ? "conditions.chmConditions.isLFastUnderSlow &&" + "\n" : "") + + (conditions.chmConditions.isLFastCrossedOverSlow ? "conditions.chmConditions.isLFastCrossedOverSlow &&" + "\n" : "") + + (conditions.chmConditions.isLFastCrossedUnderSlow ? "conditions.chmConditions.isLFastCrossedUnderSlow &&" + "\n" : "") + + (conditions.chmConditions.isClosedOverLFast ? "conditions.chmConditions.isClosedOverLFast &&" + "\n" : "") + + (conditions.chmConditions.isClosedUnderLFast ? "conditions.chmConditions.isClosedUnderLFast &&" + "\n" : "") + + (conditions.chmConditions.isHFastOverSlow ? "conditions.chmConditions.isHFastOverSlow &&" + "\n" : "") + + (conditions.chmConditions.isHFastUnderSlow ? "conditions.chmConditions.isHFastUnderSlow &&" + "\n" : "") + + (conditions.chmConditions.isHFastCrossedOverSlow ? "conditions.chmConditions.isHFastCrossedOverSlow &&" + "\n" : "") + + (conditions.chmConditions.isHFastCrossedUnderSlow ? "conditions.chmConditions.isHFastCrossedUnderSlow &&" + "\n" : "") + + (conditions.chmConditions.isClosedOverHFast ? "conditions.chmConditions.isClosedOverHFast &&" + "\n" : "") + + (conditions.chmConditions.isClosedUnderHFast ? "conditions.chmConditions.isClosedUnderHFast &&" + "\n" : "") + + // "//" + "\n" + + // (!conditions.chmConditions.hasBullishPower ? "!conditions.chmConditions.hasBullishPower &&" + "\n" : "") + + // (!conditions.chmConditions.hasBearishPower ? "!conditions.chmConditions.hasBearishPower &&" + "\n" : "") + + // (!conditions.chmConditions.isBullishPowerUp ? "!conditions.chmConditions.isBullishPowerUp &&" + "\n" : "") + + // (!conditions.chmConditions.isBearishPowerUp ? "!conditions.chmConditions.isBearishPowerUp &&" + "\n" : "") + + // (!conditions.chmConditions.isBullishPowerIncreasing ? "!conditions.chmConditions.isBullishPowerIncreasing &&" + "\n" : "") + + // (!conditions.chmConditions.isBullishPowerDecreasing ? "!conditions.chmConditions.isBullishPowerDecreasing &&" + "\n" : "") + + // (!conditions.chmConditions.isBearishPowerIncreasing ? "!conditions.chmConditions.isBearishPowerIncreasing &&" + "\n" : "") + + // (!conditions.chmConditions.isBearishPowerDecreasing ? "!conditions.chmConditions.isBearishPowerDecreasing &&" + "\n" : "") + + // (!conditions.chmConditions.isFastOverSlow ? "!conditions.chmConditions.isFastOverSlow &&" + "\n" : "") + + // (!conditions.chmConditions.isFastUnderSlow ? "!conditions.chmConditions.isFastUnderSlow &&" + "\n" : "") + + // (!conditions.chmConditions.isFastCrossedOverSlow ? "!conditions.chmConditions.isFastCrossedOverSlow &&" + "\n" : "") + + // (!conditions.chmConditions.isFastCrossedUnderSlow ? "!conditions.chmConditions.isFastCrossedUnderSlow &&" + "\n" : "") + + // (!conditions.chmConditions.isClosedOverFast ? "!conditions.chmConditions.isClosedOverFast &&" + "\n" : "") + + // (!conditions.chmConditions.isClosedUnderFast ? "!conditions.chmConditions.isClosedUnderFast &&" + "\n" : "") + + // (!conditions.chmConditions.isCFastOverSlow ? "!conditions.chmConditions.isCFastOverSlow &&" + "\n" : "") + + // (!conditions.chmConditions.isCFastUnderSlow ? "!conditions.chmConditions.isCFastUnderSlow &&" + "\n" : "") + + // (!conditions.chmConditions.isCFastCrossedOverSlow ? "!conditions.chmConditions.isCFastCrossedOverSlow &&" + "\n" : "") + + // (!conditions.chmConditions.isCFastCrossedUnderSlow ? "!conditions.chmConditions.isCFastCrossedUnderSlow &&" + "\n" : "") + + // (!conditions.chmConditions.isClosedOverCFast ? "!conditions.chmConditions.isClosedOverCFast &&" + "\n" : "") + + // (!conditions.chmConditions.isClosedUnderCFast ? "!conditions.chmConditions.isClosedUnderCFast &&" + "\n" : "") + + // (!conditions.chmConditions.isSFastOverSlow ? "!conditions.chmConditions.isSFastOverSlow &&" + "\n" : "") + + // (!conditions.chmConditions.isSFastUnderSlow ? "!conditions.chmConditions.isSFastUnderSlow &&" + "\n" : "") + + // (!conditions.chmConditions.isSFastCrossedOverSlow ? "!conditions.chmConditions.isSFastCrossedOverSlow &&" + "\n" : "") + + // (!conditions.chmConditions.isSFastCrossedUnderSlow ? "!conditions.chmConditions.isSFastCrossedUnderSlow &&" + "\n" : "") + + // (!conditions.chmConditions.isClosedOverSFast ? "!conditions.chmConditions.isClosedOverSFast &&" + "\n" : "") + + // (!conditions.chmConditions.isClosedUnderSFast ? "!conditions.chmConditions.isClosedUnderSFast &&" + "\n" : "") + + // (!conditions.chmConditions.isMFastOverSlow ? "!conditions.chmConditions.isMFastOverSlow &&" + "\n" : "") + + // (!conditions.chmConditions.isMFastUnderSlow ? "!conditions.chmConditions.isMFastUnderSlow &&" + "\n" : "") + + // (!conditions.chmConditions.isMFastCrossedOverSlow ? "!conditions.chmConditions.isMFastCrossedOverSlow &&" + "\n" : "") + + // (!conditions.chmConditions.isMFastCrossedUnderSlow ? "!conditions.chmConditions.isMFastCrossedUnderSlow &&" + "\n" : "") + + // (!conditions.chmConditions.isClosedOverMFast ? "!conditions.chmConditions.isClosedOverMFast &&" + "\n" : "") + + // (!conditions.chmConditions.isClosedUnderMFast ? "!conditions.chmConditions.isClosedUnderMFast &&" + "\n" : "") + + // (!conditions.chmConditions.isLFastOverSlow ? "!conditions.chmConditions.isLFastOverSlow &&" + "\n" : "") + + // (!conditions.chmConditions.isLFastUnderSlow ? "!conditions.chmConditions.isLFastUnderSlow &&" + "\n" : "") + + // (!conditions.chmConditions.isLFastCrossedOverSlow ? "!conditions.chmConditions.isLFastCrossedOverSlow &&" + "\n" : "") + + // (!conditions.chmConditions.isLFastCrossedUnderSlow ? "!conditions.chmConditions.isLFastCrossedUnderSlow &&" + "\n" : "") + + // (!conditions.chmConditions.isClosedOverLFast ? "!conditions.chmConditions.isClosedOverLFast &&" + "\n" : "") + + // (!conditions.chmConditions.isClosedUnderLFast ? "!conditions.chmConditions.isClosedUnderLFast &&" + "\n" : "") + + // (!conditions.chmConditions.isHFastOverSlow ? "!conditions.chmConditions.isHFastOverSlow &&" + "\n" : "") + + // (!conditions.chmConditions.isHFastUnderSlow ? "!conditions.chmConditions.isHFastUnderSlow &&" + "\n" : "") + + // (!conditions.chmConditions.isHFastCrossedOverSlow ? "!conditions.chmConditions.isHFastCrossedOverSlow &&" + "\n" : "") + + // (!conditions.chmConditions.isHFastCrossedUnderSlow ? "!conditions.chmConditions.isHFastCrossedUnderSlow &&" + "\n" : "") + + // (!conditions.chmConditions.isClosedOverHFast ? "!conditions.chmConditions.isClosedOverHFast &&" + "\n" : "") + + // (!conditions.chmConditions.isClosedUnderHFast ? "!conditions.chmConditions.isClosedUnderHFast &&" + "\n" : "") + + "//" + "\n" + + "// XCHHK ..." + "\n" + + "//" + "\n" + + (conditions.chhkConditions.hasBullishPower ? "conditions.chhkConditions.hasBullishPower &&" + "\n" : "") + + (conditions.chhkConditions.hasBearishPower ? "conditions.chhkConditions.hasBearishPower &&" + "\n" : "") + + (conditions.chhkConditions.isBullishPowerUp ? "conditions.chhkConditions.isBullishPowerUp &&" + "\n" : "") + + (conditions.chhkConditions.isBearishPowerUp ? "conditions.chhkConditions.isBearishPowerUp &&" + "\n" : "") + + (conditions.chhkConditions.isBullishPowerIncreasing ? "conditions.chhkConditions.isBullishPowerIncreasing &&" + "\n" : "") + + (conditions.chhkConditions.isBullishPowerDecreasing ? "conditions.chhkConditions.isBullishPowerDecreasing &&" + "\n" : "") + + (conditions.chhkConditions.isBearishPowerIncreasing ? "conditions.chhkConditions.isBearishPowerIncreasing &&" + "\n" : "") + + (conditions.chhkConditions.isBearishPowerDecreasing ? "conditions.chhkConditions.isBearishPowerDecreasing &&" + "\n" : "") + + (conditions.chhkConditions.isCBullish ? "conditions.chhkConditions.isCBullish &&" + "\n" : "") + + (conditions.chhkConditions.isCSwitchedToBullish ? "conditions.chhkConditions.isCSwitchedToBullish &&" + "\n" : "") + + (conditions.chhkConditions.isCBearish ? "conditions.chhkConditions.isCBearish &&" + "\n" : "") + + (conditions.chhkConditions.isCSwitchedToBearish ? "conditions.chhkConditions.isCSwitchedToBearish &&" + "\n" : "") + + (conditions.chhkConditions.isCloseOverCHigh ? "conditions.chhkConditions.isCloseOverCHigh &&" + "\n" : "") + + (conditions.chhkConditions.isCloseUnderCLow ? "conditions.chhkConditions.isCloseUnderCLow &&" + "\n" : "") + + (conditions.chhkConditions.isSBullish ? "conditions.chhkConditions.isSBullish &&" + "\n" : "") + + (conditions.chhkConditions.isSSwitchedToBullish ? "conditions.chhkConditions.isSSwitchedToBullish &&" + "\n" : "") + + (conditions.chhkConditions.isSBearish ? "conditions.chhkConditions.isSBearish &&" + "\n" : "") + + (conditions.chhkConditions.isSSwitchedToBearish ? "conditions.chhkConditions.isSSwitchedToBearish &&" + "\n" : "") + + (conditions.chhkConditions.isCloseOverSHigh ? "conditions.chhkConditions.isCloseOverSHigh &&" + "\n" : "") + + (conditions.chhkConditions.isCloseUnderSLow ? "conditions.chhkConditions.isCloseUnderSLow &&" + "\n" : "") + + (conditions.chhkConditions.isMBullish ? "conditions.chhkConditions.isMBullish &&" + "\n" : "") + + (conditions.chhkConditions.isMSwitchedToBullish ? "conditions.chhkConditions.isMSwitchedToBullish &&" + "\n" : "") + + (conditions.chhkConditions.isMBearish ? "conditions.chhkConditions.isMBearish &&" + "\n" : "") + + (conditions.chhkConditions.isMSwitchedToBearish ? "conditions.chhkConditions.isMSwitchedToBearish &&" + "\n" : "") + + (conditions.chhkConditions.isCloseOverMHigh ? "conditions.chhkConditions.isCloseOverMHigh &&" + "\n" : "") + + (conditions.chhkConditions.isCloseUnderMLow ? "conditions.chhkConditions.isCloseUnderMLow &&" + "\n" : "") + + (conditions.chhkConditions.isLBullish ? "conditions.chhkConditions.isLBullish &&" + "\n" : "") + + (conditions.chhkConditions.isLSwitchedToBullish ? "conditions.chhkConditions.isLSwitchedToBullish &&" + "\n" : "") + + (conditions.chhkConditions.isLBearish ? "conditions.chhkConditions.isLBearish &&" + "\n" : "") + + (conditions.chhkConditions.isLSwitchedToBearish ? "conditions.chhkConditions.isLSwitchedToBearish &&" + "\n" : "") + + (conditions.chhkConditions.isCloseOverLHigh ? "conditions.chhkConditions.isCloseOverLHigh &&" + "\n" : "") + + (conditions.chhkConditions.isCloseUnderLLow ? "conditions.chhkConditions.isCloseUnderLLow &&" + "\n" : "") + + (conditions.chhkConditions.isHBullish ? "conditions.chhkConditions.isHBullish &&" + "\n" : "") + + (conditions.chhkConditions.isHSwitchedToBullish ? "conditions.chhkConditions.isHSwitchedToBullish &&" + "\n" : "") + + (conditions.chhkConditions.isHBearish ? "conditions.chhkConditions.isHBearish &&" + "\n" : "") + + (conditions.chhkConditions.isHSwitchedToBearish ? "conditions.chhkConditions.isHSwitchedToBearish &&" + "\n" : "") + + (conditions.chhkConditions.isCloseOverHHigh ? "conditions.chhkConditions.isCloseOverHHigh &&" + "\n" : "") + + (conditions.chhkConditions.isCloseUnderHLow ? "conditions.chhkConditions.isCloseUnderHLow &&" + "\n" : "") + + // "//" + "\n" + + // (!conditions.chhkConditions.hasBullishPower ? "!conditions.chhkConditions.hasBullishPower && " + "\n" : "") + + // (!conditions.chhkConditions.hasBearishPower ? "!conditions.chhkConditions.hasBearishPower && " + "\n" : "") + + // (!conditions.chhkConditions.isBullishPowerUp ? "!conditions.chhkConditions.isBullishPowerUp && " + "\n" : "") + + // (!conditions.chhkConditions.isBearishPowerUp ? "!conditions.chhkConditions.isBearishPowerUp && " + "\n" : "") + + // (!conditions.chhkConditions.isBullishPowerIncreasing ? "!conditions.chhkConditions.isBullishPowerIncreasing && " + "\n" : "") + + // (!conditions.chhkConditions.isBullishPowerDecreasing ? "!conditions.chhkConditions.isBullishPowerDecreasing && " + "\n" : "") + + // (!conditions.chhkConditions.isBearishPowerIncreasing ? "!conditions.chhkConditions.isBearishPowerIncreasing && " + "\n" : "") + + // (!conditions.chhkConditions.isBearishPowerDecreasing ? "!conditions.chhkConditions.isBearishPowerDecreasing && " + "\n" : "") + + // (!conditions.chhkConditions.isCBullish ? "!conditions.chhkConditions.isCBullish && " + "\n" : "") + + // (!conditions.chhkConditions.isCSwitchedToBullish ? "!conditions.chhkConditions.isCSwitchedToBullish && " + "\n" : "") + + // (!conditions.chhkConditions.isCBearish ? "!conditions.chhkConditions.isCBearish && " + "\n" : "") + + // (!conditions.chhkConditions.isCSwitchedToBearish ? "!conditions.chhkConditions.isCSwitchedToBearish && " + "\n" : "") + + // (!conditions.chhkConditions.isCloseOverCHigh ? "!conditions.chhkConditions.isCloseOverCHigh && " + "\n" : "") + + // (!conditions.chhkConditions.isCloseUnderCLow ? "!conditions.chhkConditions.isCloseUnderCLow && " + "\n" : "") + + // (!conditions.chhkConditions.isSBullish ? "!conditions.chhkConditions.isSBullish && " + "\n" : "") + + // (!conditions.chhkConditions.isSSwitchedToBullish ? "!conditions.chhkConditions.isSSwitchedToBullish && " + "\n" : "") + + // (!conditions.chhkConditions.isSBearish ? "!conditions.chhkConditions.isSBearish && " + "\n" : "") + + // (!conditions.chhkConditions.isSSwitchedToBearish ? "!conditions.chhkConditions.isSSwitchedToBearish && " + "\n" : "") + + // (!conditions.chhkConditions.isCloseOverSHigh ? "!conditions.chhkConditions.isCloseOverSHigh && " + "\n" : "") + + // (!conditions.chhkConditions.isCloseUnderSLow ? "!conditions.chhkConditions.isCloseUnderSLow && " + "\n" : "") + + // (!conditions.chhkConditions.isMBullish ? "!conditions.chhkConditions.isMBullish && " + "\n" : "") + + // (!conditions.chhkConditions.isMSwitchedToBullish ? "!conditions.chhkConditions.isMSwitchedToBullish && " + "\n" : "") + + // (!conditions.chhkConditions.isMBearish ? "!conditions.chhkConditions.isMBearish && " + "\n" : "") + + // (!conditions.chhkConditions.isMSwitchedToBearish ? "!conditions.chhkConditions.isMSwitchedToBearish && " + "\n" : "") + + // (!conditions.chhkConditions.isCloseOverMHigh ? "!conditions.chhkConditions.isCloseOverMHigh && " + "\n" : "") + + // (!conditions.chhkConditions.isCloseUnderMLow ? "!conditions.chhkConditions.isCloseUnderMLow && " + "\n" : "") + + // (!conditions.chhkConditions.isLBullish ? "!conditions.chhkConditions.isLBullish && " + "\n" : "") + + // (!conditions.chhkConditions.isLSwitchedToBullish ? "!conditions.chhkConditions.isLSwitchedToBullish && " + "\n" : "") + + // (!conditions.chhkConditions.isLBearish ? "!conditions.chhkConditions.isLBearish && " + "\n" : "") + + // (!conditions.chhkConditions.isLSwitchedToBearish ? "!conditions.chhkConditions.isLSwitchedToBearish && " + "\n" : "") + + // (!conditions.chhkConditions.isCloseOverLHigh ? "!conditions.chhkConditions.isCloseOverLHigh && " + "\n" : "") + + // (!conditions.chhkConditions.isCloseUnderLLow ? "!conditions.chhkConditions.isCloseUnderLLow && " + "\n" : "") + + // (!conditions.chhkConditions.isHBullish ? "!conditions.chhkConditions.isHBullish && " + "\n" : "") + + // (!conditions.chhkConditions.isHSwitchedToBullish ? "!conditions.chhkConditions.isHSwitchedToBullish && " + "\n" : "") + + // (!conditions.chhkConditions.isHBearish ? "!conditions.chhkConditions.isHBearish && " + "\n" : "") + + // (!conditions.chhkConditions.isHSwitchedToBearish ? "!conditions.chhkConditions.isHSwitchedToBearish && " + "\n" : "") + + // (!conditions.chhkConditions.isCloseOverHHigh ? "!conditions.chhkConditions.isCloseOverHHigh && " + "\n" : "") + + // (!conditions.chhkConditions.isCloseUnderHLow ? "!conditions.chhkConditions.isCloseUnderHLow && " + "\n" : "") + + "//" + "\n" + + "// XCHTD ..." + "\n" + + "//" + "\n" + + (conditions.chtdConditions.hasBullishPower ? "conditions.chtdConditions.hasBullishPower &&" + "\n" : "") + + (conditions.chtdConditions.hasBearishPower ? "conditions.chtdConditions.hasBearishPower &&" + "\n" : "") + + (conditions.chtdConditions.isBullishPowerUp ? "conditions.chtdConditions.isBullishPowerUp &&" + "\n" : "") + + (conditions.chtdConditions.isBearishPowerUp ? "conditions.chtdConditions.isBearishPowerUp &&" + "\n" : "") + + (conditions.chtdConditions.isBullishPowerIncreasing ? "conditions.chtdConditions.isBullishPowerIncreasing &&" + "\n" : "") + + (conditions.chtdConditions.isBullishPowerDecreasing ? "conditions.chtdConditions.isBullishPowerDecreasing &&" + "\n" : "") + + (conditions.chtdConditions.isBearishPowerIncreasing ? "conditions.chtdConditions.isBearishPowerIncreasing &&" + "\n" : "") + + (conditions.chtdConditions.isBearishPowerDecreasing ? "conditions.chtdConditions.isBearishPowerDecreasing &&" + "\n" : "") + + (conditions.chtdConditions.isCBullish ? "conditions.chtdConditions.isCBullish &&" + "\n" : "") + + (conditions.chtdConditions.isCBearish ? "conditions.chtdConditions.isCBearish &&" + "\n" : "") + + (conditions.chtdConditions.isCSwitchedToBullish ? "conditions.chtdConditions.isCSwitchedToBullish &&" + "\n" : "") + + (conditions.chtdConditions.isCSwitchedToBearish ? "conditions.chtdConditions.isCSwitchedToBearish &&" + "\n" : "") + + (conditions.chtdConditions.isSBullish ? "conditions.chtdConditions.isSBullish &&" + "\n" : "") + + (conditions.chtdConditions.isSBearish ? "conditions.chtdConditions.isSBearish &&" + "\n" : "") + + (conditions.chtdConditions.isSSwitchedToBullish ? "conditions.chtdConditions.isSSwitchedToBullish &&" + "\n" : "") + + (conditions.chtdConditions.isSSwitchedToBearish ? "conditions.chtdConditions.isSSwitchedToBearish &&" + "\n" : "") + + (conditions.chtdConditions.isMBullish ? "conditions.chtdConditions.isMBullish &&" + "\n" : "") + + (conditions.chtdConditions.isMBearish ? "conditions.chtdConditions.isMBearish &&" + "\n" : "") + + (conditions.chtdConditions.isMSwitchedToBullish ? "conditions.chtdConditions.isMSwitchedToBullish &&" + "\n" : "") + + (conditions.chtdConditions.isMSwitchedToBearish ? "conditions.chtdConditions.isMSwitchedToBearish &&" + "\n" : "") + + (conditions.chtdConditions.isLBullish ? "conditions.chtdConditions.isLBullish &&" + "\n" : "") + + (conditions.chtdConditions.isLBearish ? "conditions.chtdConditions.isLBearish &&" + "\n" : "") + + (conditions.chtdConditions.isLSwitchedToBullish ? "conditions.chtdConditions.isLSwitchedToBullish &&" + "\n" : "") + + (conditions.chtdConditions.isLSwitchedToBearish ? "conditions.chtdConditions.isLSwitchedToBearish &&" + "\n" : "") + + (conditions.chtdConditions.isHBullish ? "conditions.chtdConditions.isHBullish &&" + "\n" : "") + + (conditions.chtdConditions.isHBearish ? "conditions.chtdConditions.isHBearish &&" + "\n" : "") + + (conditions.chtdConditions.isHSwitchedToBullish ? "conditions.chtdConditions.isHSwitchedToBullish &&" + "\n" : "") + + (conditions.chtdConditions.isHSwitchedToBearish ? "conditions.chtdConditions.isHSwitchedToBearish &&" + "\n" : "") + + // "//" + "\n" + + // (!conditions.chtdConditions.hasBullishPower ? "!conditions.chtdConditions.hasBullishPower &&" + "\n" : "") + + // (!conditions.chtdConditions.hasBearishPower ? "!conditions.chtdConditions.hasBearishPower &&" + "\n" : "") + + // (!conditions.chtdConditions.isBullishPowerUp ? "!conditions.chtdConditions.isBullishPowerUp &&" + "\n" : "") + + // (!conditions.chtdConditions.isBearishPowerUp ? "!conditions.chtdConditions.isBearishPowerUp &&" + "\n" : "") + + // (!conditions.chtdConditions.isBullishPowerIncreasing ? "!conditions.chtdConditions.isBullishPowerIncreasing &&" + "\n" : "") + + // (!conditions.chtdConditions.isBullishPowerDecreasing ? "!conditions.chtdConditions.isBullishPowerDecreasing &&" + "\n" : "") + + // (!conditions.chtdConditions.isBearishPowerIncreasing ? "!conditions.chtdConditions.isBearishPowerIncreasing &&" + "\n" : "") + + // (!conditions.chtdConditions.isBearishPowerDecreasing ? "!conditions.chtdConditions.isBearishPowerDecreasing &&" + "\n" : "") + + // (!conditions.chtdConditions.isCBullish ? "!conditions.chtdConditions.isCBullish &&" + "\n" : "") + + // (!conditions.chtdConditions.isCBearish ? "!conditions.chtdConditions.isCBearish &&" + "\n" : "") + + // (!conditions.chtdConditions.isCSwitchedToBullish ? "!conditions.chtdConditions.isCSwitchedToBullish &&" + "\n" : "") + + // (!conditions.chtdConditions.isCSwitchedToBearish ? "!conditions.chtdConditions.isCSwitchedToBearish &&" + "\n" : "") + + // (!conditions.chtdConditions.isSBullish ? "!conditions.chtdConditions.isSBullish &&" + "\n" : "") + + // (!conditions.chtdConditions.isSBearish ? "!conditions.chtdConditions.isSBearish &&" + "\n" : "") + + // (!conditions.chtdConditions.isSSwitchedToBullish ? "!conditions.chtdConditions.isSSwitchedToBullish &&" + "\n" : "") + + // (!conditions.chtdConditions.isSSwitchedToBearish ? "!conditions.chtdConditions.isSSwitchedToBearish &&" + "\n" : "") + + // (!conditions.chtdConditions.isMBullish ? "!conditions.chtdConditions.isMBullish &&" + "\n" : "") + + // (!conditions.chtdConditions.isMBearish ? "!conditions.chtdConditions.isMBearish &&" + "\n" : "") + + // (!conditions.chtdConditions.isMSwitchedToBullish ? "!conditions.chtdConditions.isMSwitchedToBullish &&" + "\n" : "") + + // (!conditions.chtdConditions.isMSwitchedToBearish ? "!conditions.chtdConditions.isMSwitchedToBearish &&" + "\n" : "") + + // (!conditions.chtdConditions.isLBullish ? "!conditions.chtdConditions.isLBullish &&" + "\n" : "") + + // (!conditions.chtdConditions.isLBearish ? "!conditions.chtdConditions.isLBearish &&" + "\n" : "") + + // (!conditions.chtdConditions.isLSwitchedToBullish ? "!conditions.chtdConditions.isLSwitchedToBullish &&" + "\n" : "") + + // (!conditions.chtdConditions.isLSwitchedToBearish ? "!conditions.chtdConditions.isLSwitchedToBearish &&" + "\n" : "") + + // (!conditions.chtdConditions.isHBullish ? "!conditions.chtdConditions.isHBullish &&" + "\n" : "") + + // (!conditions.chtdConditions.isHBearish ? "!conditions.chtdConditions.isHBearish &&" + "\n" : "") + + // (!conditions.chtdConditions.isHSwitchedToBullish ? "!conditions.chtdConditions.isHSwitchedToBullish &&" + "\n" : "") + + // (!conditions.chtdConditions.isHSwitchedToBearish ? "!conditions.chtdConditions.isHSwitchedToBearish &&" + "\n" : "") + + "//" + "\n" + + "// XCHCHE ..." + "\n" + + "//" + "\n" + + (conditions.chcheConditions.hasBullishPower ? "conditions.chcheConditions.hasBullishPower &&" + "\n" : "") + + (conditions.chcheConditions.hasBearishPower ? "conditions.chcheConditions.hasBearishPower &&" + "\n" : "") + + (conditions.chcheConditions.isBullishPowerUp ? "conditions.chcheConditions.isBullishPowerUp &&" + "\n" : "") + + (conditions.chcheConditions.isBearishPowerUp ? "conditions.chcheConditions.isBearishPowerUp &&" + "\n" : "") + + (conditions.chcheConditions.isBullishPowerIncreasing ? "conditions.chcheConditions.isBullishPowerIncreasing &&" + "\n" : "") + + (conditions.chcheConditions.isBullishPowerDecreasing ? "conditions.chcheConditions.isBullishPowerDecreasing &&" + "\n" : "") + + (conditions.chcheConditions.isBearishPowerIncreasing ? "conditions.chcheConditions.isBearishPowerIncreasing &&" + "\n" : "") + + (conditions.chcheConditions.isBearishPowerDecreasing ? "conditions.chcheConditions.isBearishPowerDecreasing &&" + "\n" : "") + + (conditions.chcheConditions.isCBullish ? "conditions.chcheConditions.isCBullish &&" + "\n" : "") + + (conditions.chcheConditions.isCBearish ? "conditions.chcheConditions.isCBearish &&" + "\n" : "") + + (conditions.chcheConditions.isCStrongBullish ? "conditions.chcheConditions.isCStrongBullish &&" + "\n" : "") + + (conditions.chcheConditions.isCStrongBearish ? "conditions.chcheConditions.isCStrongBearish &&" + "\n" : "") + + (conditions.chcheConditions.isCSwitchedToBullish ? "conditions.chcheConditions.isCSwitchedToBullish &&" + "\n" : "") + + (conditions.chcheConditions.isCSwitchedToBearish ? "conditions.chcheConditions.isCSwitchedToBearish &&" + "\n" : "") + + (conditions.chcheConditions.isCStrongSwitchedToBullish ? "conditions.chcheConditions.isCStrongSwitchedToBullish &&" + "\n" : "") + + (conditions.chcheConditions.isCStrongSwitchedToBearish ? "conditions.chcheConditions.isCStrongSwitchedToBearish &&" + "\n" : "") + + (conditions.chcheConditions.isSBullish ? "conditions.chcheConditions.isSBullish &&" + "\n" : "") + + (conditions.chcheConditions.isSBearish ? "conditions.chcheConditions.isSBearish &&" + "\n" : "") + + (conditions.chcheConditions.isSStrongBullish ? "conditions.chcheConditions.isSStrongBullish &&" + "\n" : "") + + (conditions.chcheConditions.isSStrongBearish ? "conditions.chcheConditions.isSStrongBearish &&" + "\n" : "") + + (conditions.chcheConditions.isSSwitchedToBullish ? "conditions.chcheConditions.isSSwitchedToBullish &&" + "\n" : "") + + (conditions.chcheConditions.isSSwitchedToBearish ? "conditions.chcheConditions.isSSwitchedToBearish &&" + "\n" : "") + + (conditions.chcheConditions.isSStrongSwitchedToBullish ? "conditions.chcheConditions.isSStrongSwitchedToBullish &&" + "\n" : "") + + (conditions.chcheConditions.isSStrongSwitchedToBearish ? "conditions.chcheConditions.isSStrongSwitchedToBearish &&" + "\n" : "") + + (conditions.chcheConditions.isMBullish ? "conditions.chcheConditions.isMBullish &&" + "\n" : "") + + (conditions.chcheConditions.isMBearish ? "conditions.chcheConditions.isMBearish &&" + "\n" : "") + + (conditions.chcheConditions.isMStrongBullish ? "conditions.chcheConditions.isMStrongBullish &&" + "\n" : "") + + (conditions.chcheConditions.isMStrongBearish ? "conditions.chcheConditions.isMStrongBearish &&" + "\n" : "") + + (conditions.chcheConditions.isMSwitchedToBullish ? "conditions.chcheConditions.isMSwitchedToBullish &&" + "\n" : "") + + (conditions.chcheConditions.isMSwitchedToBearish ? "conditions.chcheConditions.isMSwitchedToBearish &&" + "\n" : "") + + (conditions.chcheConditions.isMStrongSwitchedToBullish ? "conditions.chcheConditions.isMStrongSwitchedToBullish &&" + "\n" : "") + + (conditions.chcheConditions.isMStrongSwitchedToBearish ? "conditions.chcheConditions.isMStrongSwitchedToBearish &&" + "\n" : "") + + (conditions.chcheConditions.isLBullish ? "conditions.chcheConditions.isLBullish &&" + "\n" : "") + + (conditions.chcheConditions.isLBearish ? "conditions.chcheConditions.isLBearish &&" + "\n" : "") + + (conditions.chcheConditions.isLStrongBullish ? "conditions.chcheConditions.isLStrongBullish &&" + "\n" : "") + + (conditions.chcheConditions.isLStrongBearish ? "conditions.chcheConditions.isLStrongBearish &&" + "\n" : "") + + (conditions.chcheConditions.isLSwitchedToBullish ? "conditions.chcheConditions.isLSwitchedToBullish &&" + "\n" : "") + + (conditions.chcheConditions.isLSwitchedToBearish ? "conditions.chcheConditions.isLSwitchedToBearish &&" + "\n" : "") + + (conditions.chcheConditions.isLStrongSwitchedToBullish ? "conditions.chcheConditions.isLStrongSwitchedToBullish &&" + "\n" : "") + + (conditions.chcheConditions.isLStrongSwitchedToBearish ? "conditions.chcheConditions.isLStrongSwitchedToBearish &&" + "\n" : "") + + (conditions.chcheConditions.isHBullish ? "conditions.chcheConditions.isHBullish &&" + "\n" : "") + + (conditions.chcheConditions.isHBearish ? "conditions.chcheConditions.isHBearish &&" + "\n" : "") + + (conditions.chcheConditions.isHStrongBullish ? "conditions.chcheConditions.isHStrongBullish &&" + "\n" : "") + + (conditions.chcheConditions.isHStrongBearish ? "conditions.chcheConditions.isHStrongBearish &&" + "\n" : "") + + (conditions.chcheConditions.isHSwitchedToBullish ? "conditions.chcheConditions.isHSwitchedToBullish &&" + "\n" : "") + + (conditions.chcheConditions.isHSwitchedToBearish ? "conditions.chcheConditions.isHSwitchedToBearish &&" + "\n" : "") + + (conditions.chcheConditions.isHStrongSwitchedToBullish ? "conditions.chcheConditions.isHStrongSwitchedToBullish &&" + "\n" : "") + + (conditions.chcheConditions.isHStrongSwitchedToBearish ? "conditions.chcheConditions.isHStrongSwitchedToBearish &&" + "\n" : "") + + // "//" + "\n" + + // (!conditions.chcheConditions.hasBullishPower ? "!conditions.chcheConditions.hasBullishPower &&" + "\n" : "") + + // (!conditions.chcheConditions.hasBearishPower ? "!conditions.chcheConditions.hasBearishPower &&" + "\n" : "") + + // (!conditions.chcheConditions.isBullishPowerUp ? "!conditions.chcheConditions.isBullishPowerUp &&" + "\n" : "") + + // (!conditions.chcheConditions.isBearishPowerUp ? "!conditions.chcheConditions.isBearishPowerUp &&" + "\n" : "") + + // (!conditions.chcheConditions.isBullishPowerIncreasing ? "!conditions.chcheConditions.isBullishPowerIncreasing &&" + "\n" : "") + + // (!conditions.chcheConditions.isBullishPowerDecreasing ? "!conditions.chcheConditions.isBullishPowerDecreasing &&" + "\n" : "") + + // (!conditions.chcheConditions.isBearishPowerIncreasing ? "!conditions.chcheConditions.isBearishPowerIncreasing &&" + "\n" : "") + + // (!conditions.chcheConditions.isBearishPowerDecreasing ? "!conditions.chcheConditions.isBearishPowerDecreasing &&" + "\n" : "") + + // (!conditions.chcheConditions.isCBullish ? "!conditions.chcheConditions.isCBullish &&" + "\n" : "") + + // (!conditions.chcheConditions.isCBearish ? "!conditions.chcheConditions.isCBearish &&" + "\n" : "") + + // (!conditions.chcheConditions.isCStrongBullish ? "!conditions.chcheConditions.isCStrongBullish &&" + "\n" : "") + + // (!conditions.chcheConditions.isCStrongBearish ? "!conditions.chcheConditions.isCStrongBearish &&" + "\n" : "") + + // (!conditions.chcheConditions.isCSwitchedToBullish ? "!conditions.chcheConditions.isCSwitchedToBullish &&" + "\n" : "") + + // (!conditions.chcheConditions.isCSwitchedToBearish ? "!conditions.chcheConditions.isCSwitchedToBearish &&" + "\n" : "") + + // (!conditions.chcheConditions.isCStrongSwitchedToBullish ? "!conditions.chcheConditions.isCStrongSwitchedToBullish &&" + "\n" : "") + + // (!conditions.chcheConditions.isCStrongSwitchedToBearish ? "!conditions.chcheConditions.isCStrongSwitchedToBearish &&" + "\n" : "") + + // (!conditions.chcheConditions.isSBullish ? "!conditions.chcheConditions.isSBullish &&" + "\n" : "") + + // (!conditions.chcheConditions.isSBearish ? "!conditions.chcheConditions.isSBearish &&" + "\n" : "") + + // (!conditions.chcheConditions.isSStrongBullish ? "!conditions.chcheConditions.isSStrongBullish &&" + "\n" : "") + + // (!conditions.chcheConditions.isSStrongBearish ? "!conditions.chcheConditions.isSStrongBearish &&" + "\n" : "") + + // (!conditions.chcheConditions.isSSwitchedToBullish ? "!conditions.chcheConditions.isSSwitchedToBullish &&" + "\n" : "") + + // (!conditions.chcheConditions.isSSwitchedToBearish ? "!conditions.chcheConditions.isSSwitchedToBearish &&" + "\n" : "") + + // (!conditions.chcheConditions.isSStrongSwitchedToBullish ? "!conditions.chcheConditions.isSStrongSwitchedToBullish &&" + "\n" : "") + + // (!conditions.chcheConditions.isSStrongSwitchedToBearish ? "!conditions.chcheConditions.isSStrongSwitchedToBearish &&" + "\n" : "") + + // (!conditions.chcheConditions.isMBullish ? "!conditions.chcheConditions.isMBullish &&" + "\n" : "") + + // (!conditions.chcheConditions.isMBearish ? "!conditions.chcheConditions.isMBearish &&" + "\n" : "") + + // (!conditions.chcheConditions.isMStrongBullish ? "!conditions.chcheConditions.isMStrongBullish &&" + "\n" : "") + + // (!conditions.chcheConditions.isMStrongBearish ? "!conditions.chcheConditions.isMStrongBearish &&" + "\n" : "") + + // (!conditions.chcheConditions.isMSwitchedToBullish ? "!conditions.chcheConditions.isMSwitchedToBullish &&" + "\n" : "") + + // (!conditions.chcheConditions.isMSwitchedToBearish ? "!conditions.chcheConditions.isMSwitchedToBearish &&" + "\n" : "") + + // (!conditions.chcheConditions.isMStrongSwitchedToBullish ? "!conditions.chcheConditions.isMStrongSwitchedToBullish &&" + "\n" : "") + + // (!conditions.chcheConditions.isMStrongSwitchedToBearish ? "!conditions.chcheConditions.isMStrongSwitchedToBearish &&" + "\n" : "") + + // (!conditions.chcheConditions.isLBullish ? "!conditions.chcheConditions.isLBullish &&" + "\n" : "") + + // (!conditions.chcheConditions.isLBearish ? "!conditions.chcheConditions.isLBearish &&" + "\n" : "") + + // (!conditions.chcheConditions.isLStrongBullish ? "!conditions.chcheConditions.isLStrongBullish &&" + "\n" : "") + + // (!conditions.chcheConditions.isLStrongBearish ? "!conditions.chcheConditions.isLStrongBearish &&" + "\n" : "") + + // (!conditions.chcheConditions.isLSwitchedToBullish ? "!conditions.chcheConditions.isLSwitchedToBullish &&" + "\n" : "") + + // (!conditions.chcheConditions.isLSwitchedToBearish ? "!conditions.chcheConditions.isLSwitchedToBearish &&" + "\n" : "") + + // (!conditions.chcheConditions.isLStrongSwitchedToBullish ? "!conditions.chcheConditions.isLStrongSwitchedToBullish &&" + "\n" : "") + + // (!conditions.chcheConditions.isLStrongSwitchedToBearish ? "!conditions.chcheConditions.isLStrongSwitchedToBearish &&" + "\n" : "") + + // (!conditions.chcheConditions.isHBullish ? "!conditions.chcheConditions.isHBullish &&" + "\n" : "") + + // (!conditions.chcheConditions.isHBearish ? "!conditions.chcheConditions.isHBearish &&" + "\n" : "") + + // (!conditions.chcheConditions.isHStrongBullish ? "!conditions.chcheConditions.isHStrongBullish &&" + "\n" : "") + + // (!conditions.chcheConditions.isHStrongBearish ? "!conditions.chcheConditions.isHStrongBearish &&" + "\n" : "") + + // (!conditions.chcheConditions.isHSwitchedToBullish ? "!conditions.chcheConditions.isHSwitchedToBullish &&" + "\n" : "") + + // (!conditions.chcheConditions.isHSwitchedToBearish ? "!conditions.chcheConditions.isHSwitchedToBearish &&" + "\n" : "") + + // (!conditions.chcheConditions.isHStrongSwitchedToBullish ? "!conditions.chcheConditions.isHStrongSwitchedToBullish &&" + "\n" : "") + + // (!conditions.chcheConditions.isHStrongSwitchedToBearish ? "!conditions.chcheConditions.isHStrongSwitchedToBearish &&" + "\n" : "") + + "//" + "\n" + + "// XCHSTR ..." + "\n" + + "//" + "\n" + + (conditions.chstrConditions.hasBullishPower ? "conditions.chstrConditions.hasBullishPower &&" + "\n" : "") + + (conditions.chstrConditions.hasBearishPower ? "conditions.chstrConditions.hasBearishPower &&" + "\n" : "") + + (conditions.chstrConditions.isBullishPowerUp ? "conditions.chstrConditions.isBullishPowerUp &&" + "\n" : "") + + (conditions.chstrConditions.isBearishPowerUp ? "conditions.chstrConditions.isBearishPowerUp &&" + "\n" : "") + + (conditions.chstrConditions.isBullishPowerIncreasing ? "conditions.chstrConditions.isBullishPowerIncreasing &&" + "\n" : "") + + (conditions.chstrConditions.isBullishPowerDecreasing ? "conditions.chstrConditions.isBullishPowerDecreasing &&" + "\n" : "") + + (conditions.chstrConditions.isBearishPowerIncreasing ? "conditions.chstrConditions.isBearishPowerIncreasing &&" + "\n" : "") + + (conditions.chstrConditions.isBearishPowerDecreasing ? "conditions.chstrConditions.isBearishPowerDecreasing &&" + "\n" : "") + + (conditions.chstrConditions.isCBullish ? "conditions.chstrConditions.isCBullish &&" + "\n" : "") + + (conditions.chstrConditions.isCBearish ? "conditions.chstrConditions.isCBearish &&" + "\n" : "") + + (conditions.chstrConditions.isCSwitchedToBullish ? "conditions.chstrConditions.isCSwitchedToBullish &&" + "\n" : "") + + (conditions.chstrConditions.isCSwitchedToBearish ? "conditions.chstrConditions.isCSwitchedToBearish &&" + "\n" : "") + + (conditions.chstrConditions.isSBullish ? "conditions.chstrConditions.isSBullish &&" + "\n" : "") + + (conditions.chstrConditions.isSBearish ? "conditions.chstrConditions.isSBearish &&" + "\n" : "") + + (conditions.chstrConditions.isSSwitchedToBullish ? "conditions.chstrConditions.isSSwitchedToBullish &&" + "\n" : "") + + (conditions.chstrConditions.isSSwitchedToBearish ? "conditions.chstrConditions.isSSwitchedToBearish &&" + "\n" : "") + + (conditions.chstrConditions.isMBullish ? "conditions.chstrConditions.isMBullish &&" + "\n" : "") + + (conditions.chstrConditions.isMBearish ? "conditions.chstrConditions.isMBearish &&" + "\n" : "") + + (conditions.chstrConditions.isMSwitchedToBullish ? "conditions.chstrConditions.isMSwitchedToBullish &&" + "\n" : "") + + (conditions.chstrConditions.isMSwitchedToBearish ? "conditions.chstrConditions.isMSwitchedToBearish &&" + "\n" : "") + + (conditions.chstrConditions.isLBullish ? "conditions.chstrConditions.isLBullish &&" + "\n" : "") + + (conditions.chstrConditions.isLBearish ? "conditions.chstrConditions.isLBearish &&" + "\n" : "") + + (conditions.chstrConditions.isLSwitchedToBullish ? "conditions.chstrConditions.isLSwitchedToBullish &&" + "\n" : "") + + (conditions.chstrConditions.isLSwitchedToBearish ? "conditions.chstrConditions.isLSwitchedToBearish &&" + "\n" : "") + + (conditions.chstrConditions.isHBullish ? "conditions.chstrConditions.isHBullish &&" + "\n" : "") + + (conditions.chstrConditions.isHBearish ? "conditions.chstrConditions.isHBearish &&" + "\n" : "") + + (conditions.chstrConditions.isHSwitchedToBullish ? "conditions.chstrConditions.isHSwitchedToBullish &&" + "\n" : "") + + (conditions.chstrConditions.isHSwitchedToBearish ? "conditions.chstrConditions.isHSwitchedToBearish &&" + "\n" : "") + + // "//" + "\n" + + // (!conditions.chstrConditions.hasBullishPower ? "!conditions.chstrConditions.hasBullishPower &&" + "\n" : "") + + // (!conditions.chstrConditions.hasBearishPower ? "!conditions.chstrConditions.hasBearishPower &&" + "\n" : "") + + // (!conditions.chstrConditions.isBullishPowerUp ? "!conditions.chstrConditions.isBullishPowerUp &&" + "\n" : "") + + // (!conditions.chstrConditions.isBearishPowerUp ? "!conditions.chstrConditions.isBearishPowerUp &&" + "\n" : "") + + // (!conditions.chstrConditions.isBullishPowerIncreasing ? "!conditions.chstrConditions.isBullishPowerIncreasing &&" + "\n" : "") + + // (!conditions.chstrConditions.isBullishPowerDecreasing ? "!conditions.chstrConditions.isBullishPowerDecreasing &&" + "\n" : "") + + // (!conditions.chstrConditions.isBearishPowerIncreasing ? "!conditions.chstrConditions.isBearishPowerIncreasing &&" + "\n" : "") + + // (!conditions.chstrConditions.isBearishPowerDecreasing ? "!conditions.chstrConditions.isBearishPowerDecreasing &&" + "\n" : "") + + // (!conditions.chstrConditions.isCBullish ? "!conditions.chstrConditions.isCBullish &&" + "\n" : "") + + // (!conditions.chstrConditions.isCBearish ? "!conditions.chstrConditions.isCBearish &&" + "\n" : "") + + // (!conditions.chstrConditions.isCSwitchedToBullish ? "!conditions.chstrConditions.isCSwitchedToBullish &&" + "\n" : "") + + // (!conditions.chstrConditions.isCSwitchedToBearish ? "!conditions.chstrConditions.isCSwitchedToBearish &&" + "\n" : "") + + // (!conditions.chstrConditions.isSBullish ? "!conditions.chstrConditions.isSBullish &&" + "\n" : "") + + // (!conditions.chstrConditions.isSBearish ? "!conditions.chstrConditions.isSBearish &&" + "\n" : "") + + // (!conditions.chstrConditions.isSSwitchedToBullish ? "!conditions.chstrConditions.isSSwitchedToBullish &&" + "\n" : "") + + // (!conditions.chstrConditions.isSSwitchedToBearish ? "!conditions.chstrConditions.isSSwitchedToBearish &&" + "\n" : "") + + // (!conditions.chstrConditions.isMBullish ? "!conditions.chstrConditions.isMBullish &&" + "\n" : "") + + // (!conditions.chstrConditions.isMBearish ? "!conditions.chstrConditions.isMBearish &&" + "\n" : "") + + // (!conditions.chstrConditions.isMSwitchedToBullish ? "!conditions.chstrConditions.isMSwitchedToBullish &&" + "\n" : "") + + // (!conditions.chstrConditions.isMSwitchedToBearish ? "!conditions.chstrConditions.isMSwitchedToBearish &&" + "\n" : "") + + // (!conditions.chstrConditions.isLBullish ? "!conditions.chstrConditions.isLBullish &&" + "\n" : "") + + // (!conditions.chstrConditions.isLBearish ? "!conditions.chstrConditions.isLBearish &&" + "\n" : "") + + // (!conditions.chstrConditions.isLSwitchedToBullish ? "!conditions.chstrConditions.isLSwitchedToBullish &&" + "\n" : "") + + // (!conditions.chstrConditions.isLSwitchedToBearish ? "!conditions.chstrConditions.isLSwitchedToBearish &&" + "\n" : "") + + // (!conditions.chstrConditions.isHBullish ? "!conditions.chstrConditions.isHBullish &&" + "\n" : "") + + // (!conditions.chstrConditions.isHBearish ? "!conditions.chstrConditions.isHBearish &&" + "\n" : "") + + // (!conditions.chstrConditions.isHSwitchedToBullish ? "!conditions.chstrConditions.isHSwitchedToBullish &&" + "\n" : "") + + // (!conditions.chstrConditions.isHSwitchedToBearish ? "!conditions.chstrConditions.isHSwitchedToBearish &&" + "\n" : "") + + "//" + "\n" + + "// XCHVLM ..." + "\n" + + "//" + "\n" + + (conditions.chvlmConditions.hasBullishPower ? "conditions.chvlmConditions.hasBullishPower &&" + "\n" : "") + + (conditions.chvlmConditions.hasBearishPower ? "conditions.chvlmConditions.hasBearishPower &&" + "\n" : "") + + (conditions.chvlmConditions.isBullishPowerUp ? "conditions.chvlmConditions.isBullishPowerUp &&" + "\n" : "") + + (conditions.chvlmConditions.isBearishPowerUp ? "conditions.chvlmConditions.isBearishPowerUp &&" + "\n" : "") + + (conditions.chvlmConditions.isBullishPowerIncreasing ? "conditions.chvlmConditions.isBullishPowerIncreasing &&" + "\n" : "") + + (conditions.chvlmConditions.isBullishPowerDecreasing ? "conditions.chvlmConditions.isBullishPowerDecreasing &&" + "\n" : "") + + (conditions.chvlmConditions.isBearishPowerIncreasing ? "conditions.chvlmConditions.isBearishPowerIncreasing &&" + "\n" : "") + + (conditions.chvlmConditions.isBearishPowerDecreasing ? "conditions.chvlmConditions.isBearishPowerDecreasing &&" + "\n" : "") + + (conditions.chvlmConditions.isCBullish ? "conditions.chvlmConditions.isCBullish &&" + "\n" : "") + + (conditions.chvlmConditions.isCBearish ? "conditions.chvlmConditions.isCBearish &&" + "\n" : "") + + (conditions.chvlmConditions.isCSwitchedToBullish ? "conditions.chvlmConditions.isCSwitchedToBullish &&" + "\n" : "") + + (conditions.chvlmConditions.isCSwitchedToBearish ? "conditions.chvlmConditions.isCSwitchedToBearish &&" + "\n" : "") + + (conditions.chvlmConditions.isSBullish ? "conditions.chvlmConditions.isSBullish &&" + "\n" : "") + + (conditions.chvlmConditions.isSBearish ? "conditions.chvlmConditions.isSBearish &&" + "\n" : "") + + (conditions.chvlmConditions.isSSwitchedToBullish ? "conditions.chvlmConditions.isSSwitchedToBullish &&" + "\n" : "") + + (conditions.chvlmConditions.isSSwitchedToBearish ? "conditions.chvlmConditions.isSSwitchedToBearish &&" + "\n" : "") + + (conditions.chvlmConditions.isMBullish ? "conditions.chvlmConditions.isMBullish &&" + "\n" : "") + + (conditions.chvlmConditions.isMBearish ? "conditions.chvlmConditions.isMBearish &&" + "\n" : "") + + (conditions.chvlmConditions.isMSwitchedToBullish ? "conditions.chvlmConditions.isMSwitchedToBullish &&" + "\n" : "") + + (conditions.chvlmConditions.isMSwitchedToBearish ? "conditions.chvlmConditions.isMSwitchedToBearish &&" + "\n" : "") + + (conditions.chvlmConditions.isLBullish ? "conditions.chvlmConditions.isLBullish &&" + "\n" : "") + + (conditions.chvlmConditions.isLBearish ? "conditions.chvlmConditions.isLBearish &&" + "\n" : "") + + (conditions.chvlmConditions.isLSwitchedToBullish ? "conditions.chvlmConditions.isLSwitchedToBullish &&" + "\n" : "") + + (conditions.chvlmConditions.isLSwitchedToBearish ? "conditions.chvlmConditions.isLSwitchedToBearish &&" + "\n" : "") + + (conditions.chvlmConditions.isHBullish ? "conditions.chvlmConditions.isHBullish &&" + "\n" : "") + + (conditions.chvlmConditions.isHBearish ? "conditions.chvlmConditions.isHBearish &&" + "\n" : "") + + (conditions.chvlmConditions.isHSwitchedToBullish ? "conditions.chvlmConditions.isHSwitchedToBullish &&" + "\n" : "") + + (conditions.chvlmConditions.isHSwitchedToBearish ? "conditions.chvlmConditions.isHSwitchedToBearish &&" + "\n" : "") + + // "//" + "\n" + + // (!conditions.chvlmConditions.hasBullishPower ? "!conditions.chvlmConditions.hasBullishPower &&" + "\n" : "") + + // (!conditions.chvlmConditions.hasBearishPower ? "!conditions.chvlmConditions.hasBearishPower &&" + "\n" : "") + + // (!conditions.chvlmConditions.isBullishPowerUp ? "!conditions.chvlmConditions.isBullishPowerUp &&" + "\n" : "") + + // (!conditions.chvlmConditions.isBearishPowerUp ? "!conditions.chvlmConditions.isBearishPowerUp &&" + "\n" : "") + + // (!conditions.chvlmConditions.isBullishPowerIncreasing ? "!conditions.chvlmConditions.isBullishPowerIncreasing &&" + "\n" : "") + + // (!conditions.chvlmConditions.isBullishPowerDecreasing ? "!conditions.chvlmConditions.isBullishPowerDecreasing &&" + "\n" : "") + + // (!conditions.chvlmConditions.isBearishPowerIncreasing ? "!conditions.chvlmConditions.isBearishPowerIncreasing &&" + "\n" : "") + + // (!conditions.chvlmConditions.isBearishPowerDecreasing ? "!conditions.chvlmConditions.isBearishPowerDecreasing &&" + "\n" : "") + + // (!conditions.chvlmConditions.isCBullish ? "!conditions.chvlmConditions.isCBullish &&" + "\n" : "") + + // (!conditions.chvlmConditions.isCBearish ? "!conditions.chvlmConditions.isCBearish &&" + "\n" : "") + + // (!conditions.chvlmConditions.isCSwitchedToBullish ? "!conditions.chvlmConditions.isCSwitchedToBullish &&" + "\n" : "") + + // (!conditions.chvlmConditions.isCSwitchedToBearish ? "!conditions.chvlmConditions.isCSwitchedToBearish &&" + "\n" : "") + + // (!conditions.chvlmConditions.isSBullish ? "!conditions.chvlmConditions.isSBullish &&" + "\n" : "") + + // (!conditions.chvlmConditions.isSBearish ? "!conditions.chvlmConditions.isSBearish &&" + "\n" : "") + + // (!conditions.chvlmConditions.isSSwitchedToBullish ? "!conditions.chvlmConditions.isSSwitchedToBullish &&" + "\n" : "") + + // (!conditions.chvlmConditions.isSSwitchedToBearish ? "!conditions.chvlmConditions.isSSwitchedToBearish &&" + "\n" : "") + + // (!conditions.chvlmConditions.isMBullish ? "!conditions.chvlmConditions.isMBullish &&" + "\n" : "") + + // (!conditions.chvlmConditions.isMBearish ? "!conditions.chvlmConditions.isMBearish &&" + "\n" : "") + + // (!conditions.chvlmConditions.isMSwitchedToBullish ? "!conditions.chvlmConditions.isMSwitchedToBullish &&" + "\n" : "") + + // (!conditions.chvlmConditions.isMSwitchedToBearish ? "!conditions.chvlmConditions.isMSwitchedToBearish &&" + "\n" : "") + + // (!conditions.chvlmConditions.isLBullish ? "!conditions.chvlmConditions.isLBullish &&" + "\n" : "") + + // (!conditions.chvlmConditions.isLBearish ? "!conditions.chvlmConditions.isLBearish &&" + "\n" : "") + + // (!conditions.chvlmConditions.isLSwitchedToBullish ? "!conditions.chvlmConditions.isLSwitchedToBullish &&" + "\n" : "") + + // (!conditions.chvlmConditions.isLSwitchedToBearish ? "!conditions.chvlmConditions.isLSwitchedToBearish &&" + "\n" : "") + + // (!conditions.chvlmConditions.isHBullish ? "!conditions.chvlmConditions.isHBullish &&" + "\n" : "") + + // (!conditions.chvlmConditions.isHBearish ? "!conditions.chvlmConditions.isHBearish &&" + "\n" : "") + + // (!conditions.chvlmConditions.isHSwitchedToBullish ? "!conditions.chvlmConditions.isHSwitchedToBullish &&" + "\n" : "") + + // (!conditions.chvlmConditions.isHSwitchedToBearish ? "!conditions.chvlmConditions.isHSwitchedToBearish &&" + "\n" : "") + + "//" + "\n" + + "// XCHVWAP ..." + "\n" + + "//" + "\n" + + (conditions.chvwapConditions.hasBullishPower ? "conditions.chvwapConditions.hasBullishPower &&" + "\n" : "") + + (conditions.chvwapConditions.hasBearishPower ? "conditions.chvwapConditions.hasBearishPower &&" + "\n" : "") + + (conditions.chvwapConditions.isBullishPowerUp ? "conditions.chvwapConditions.isBullishPowerUp &&" + "\n" : "") + + (conditions.chvwapConditions.isBearishPowerUp ? "conditions.chvwapConditions.isBearishPowerUp &&" + "\n" : "") + + (conditions.chvwapConditions.isBullishPowerIncreasing ? "conditions.chvwapConditions.isBullishPowerIncreasing &&" + "\n" : "") + + (conditions.chvwapConditions.isBullishPowerDecreasing ? "conditions.chvwapConditions.isBullishPowerDecreasing &&" + "\n" : "") + + (conditions.chvwapConditions.isBearishPowerIncreasing ? "conditions.chvwapConditions.isBearishPowerIncreasing &&" + "\n" : "") + + (conditions.chvwapConditions.isBearishPowerDecreasing ? "conditions.chvwapConditions.isBearishPowerDecreasing &&" + "\n" : "") + + (conditions.chvwapConditions.isSBullish ? "conditions.chvwapConditions.isSBullish &&" + "\n" : "") + + (conditions.chvwapConditions.isSBearish ? "conditions.chvwapConditions.isSBearish &&" + "\n" : "") + + (conditions.chvwapConditions.isSSwitchedToBullish ? "conditions.chvwapConditions.isSSwitchedToBullish &&" + "\n" : "") + + (conditions.chvwapConditions.isSSwitchedToBearish ? "conditions.chvwapConditions.isSSwitchedToBearish &&" + "\n" : "") + + (conditions.chvwapConditions.isMBullish ? "conditions.chvwapConditions.isMBullish &&" + "\n" : "") + + (conditions.chvwapConditions.isMBearish ? "conditions.chvwapConditions.isMBearish &&" + "\n" : "") + + (conditions.chvwapConditions.isMSwitchedToBullish ? "conditions.chvwapConditions.isMSwitchedToBullish &&" + "\n" : "") + + (conditions.chvwapConditions.isMSwitchedToBearish ? "conditions.chvwapConditions.isMSwitchedToBearish &&" + "\n" : "") + + (conditions.chvwapConditions.isLBullish ? "conditions.chvwapConditions.isLBullish &&" + "\n" : "") + + (conditions.chvwapConditions.isLBearish ? "conditions.chvwapConditions.isLBearish &&" + "\n" : "") + + (conditions.chvwapConditions.isLSwitchedToBullish ? "conditions.chvwapConditions.isLSwitchedToBullish &&" + "\n" : "") + + (conditions.chvwapConditions.isLSwitchedToBearish ? "conditions.chvwapConditions.isLSwitchedToBearish &&" + "\n" : "") + + (conditions.chvwapConditions.isHBullish ? "conditions.chvwapConditions.isHBullish &&" + "\n" : "") + + (conditions.chvwapConditions.isHBearish ? "conditions.chvwapConditions.isHBearish &&" + "\n" : "") + + (conditions.chvwapConditions.isHSwitchedToBullish ? "conditions.chvwapConditions.isHSwitchedToBullish &&" + "\n" : "") + + (conditions.chvwapConditions.isHSwitchedToBearish ? "conditions.chvwapConditions.isHSwitchedToBearish &&" + "\n" : "") + + // "//" + "\n" + + // (!conditions.chvwapConditions.hasBullishPower ? "!conditions.chvwapConditions.hasBullishPower &&" + "\n" : "") + + // (!conditions.chvwapConditions.hasBearishPower ? "!conditions.chvwapConditions.hasBearishPower &&" + "\n" : "") + + // (!conditions.chvwapConditions.isBullishPowerUp ? "!conditions.chvwapConditions.isBullishPowerUp &&" + "\n" : "") + + // (!conditions.chvwapConditions.isBearishPowerUp ? "!conditions.chvwapConditions.isBearishPowerUp &&" + "\n" : "") + + // (!conditions.chvwapConditions.isBullishPowerIncreasing ? "!conditions.chvwapConditions.isBullishPowerIncreasing &&" + "\n" : "") + + // (!conditions.chvwapConditions.isBullishPowerDecreasing ? "!conditions.chvwapConditions.isBullishPowerDecreasing &&" + "\n" : "") + + // (!conditions.chvwapConditions.isBearishPowerIncreasing ? "!conditions.chvwapConditions.isBearishPowerIncreasing &&" + "\n" : "") + + // (!conditions.chvwapConditions.isBearishPowerDecreasing ? "!conditions.chvwapConditions.isBearishPowerDecreasing &&" + "\n" : "") + + // (!conditions.chvwapConditions.isSBullish ? "!conditions.chvwapConditions.isSBullish &&" + "\n" : "") + + // (!conditions.chvwapConditions.isSBearish ? "!conditions.chvwapConditions.isSBearish &&" + "\n" : "") + + // (!conditions.chvwapConditions.isSSwitchedToBullish ? "!conditions.chvwapConditions.isSSwitchedToBullish &&" + "\n" : "") + + // (!conditions.chvwapConditions.isSSwitchedToBearish ? "!conditions.chvwapConditions.isSSwitchedToBearish &&" + "\n" : "") + + // (!conditions.chvwapConditions.isMBullish ? "!conditions.chvwapConditions.isMBullish &&" + "\n" : "") + + // (!conditions.chvwapConditions.isMBearish ? "!conditions.chvwapConditions.isMBearish &&" + "\n" : "") + + // (!conditions.chvwapConditions.isMSwitchedToBullish ? "!conditions.chvwapConditions.isMSwitchedToBullish &&" + "\n" : "") + + // (!conditions.chvwapConditions.isMSwitchedToBearish ? "!conditions.chvwapConditions.isMSwitchedToBearish &&" + "\n" : "") + + // (!conditions.chvwapConditions.isLBullish ? "!conditions.chvwapConditions.isLBullish &&" + "\n" : "") + + // (!conditions.chvwapConditions.isLBearish ? "!conditions.chvwapConditions.isLBearish &&" + "\n" : "") + + // (!conditions.chvwapConditions.isLSwitchedToBullish ? "!conditions.chvwapConditions.isLSwitchedToBullish &&" + "\n" : "") + + // (!conditions.chvwapConditions.isLSwitchedToBearish ? "!conditions.chvwapConditions.isLSwitchedToBearish &&" + "\n" : "") + + // (!conditions.chvwapConditions.isHBullish ? "!conditions.chvwapConditions.isHBullish &&" + "\n" : "") + + // (!conditions.chvwapConditions.isHBearish ? "!conditions.chvwapConditions.isHBearish &&" + "\n" : "") + + // (!conditions.chvwapConditions.isHSwitchedToBullish ? "!conditions.chvwapConditions.isHSwitchedToBullish &&" + "\n" : "") + + // (!conditions.chvwapConditions.isHSwitchedToBearish ? "!conditions.chvwapConditions.isHSwitchedToBearish &&" + "\n" : "") + + "//" + "\n" + + ")" + "\n" + "//" + + "\n" + + "||" + "\n" + + "//"; + + // + return result; + } + + // + bool IsFiltered( + XSignal &signal, // Provided Signal + XCHStrategyConditions &conditions, // Market Conditions + bool force = false // + ) + { + // + bool result = false; + + // + // Validate Args ... + if (!signal.IsValid() || !conditions.IsValid()) + { + // + result = true; + return result; + } + + // + bool isLong = IsLong(signal.type); + + // + result = + // + isLong + ? IsLongFiltered( + signal, + conditions, + force // + ) + : IsShortFiltered( + signal, + conditions, + force // + ) + // + ; + + // + return result; + } + + // + // Filter Long Signals ... + bool IsLongFiltered( + XSignal &signal, + XCHStrategyConditions &conditions, + bool force = false // + ) + { + // + bool result = false; + + // + bool isEURUSD = _symbolParser.IsEURUSD(signal.symbol); + bool isGBPUSD = _symbolParser.IsGBPUSD(signal.symbol); + bool isEURGBP = _symbolParser.IsEURGBP(signal.symbol); + bool isXAUUSD = _symbolParser.IsXAUUSD(signal.symbol); + bool isUSDJPY = _symbolParser.IsUSDJPY(signal.symbol); + bool isEURJPY = _symbolParser.IsEURJPY(signal.symbol); + bool isUSDCHF = _symbolParser.IsUSDCHF(signal.symbol); + bool isEURCHF = _symbolParser.IsEURCHF(signal.symbol); + bool isAUDUSD = _symbolParser.IsAUDUSD(signal.symbol); + bool isNZDUSD = _symbolParser.IsNZDUSD(signal.symbol); + bool isUSDCAD = _symbolParser.IsUSDCAD(signal.symbol); + bool isEURCAD = _symbolParser.IsEURCAD(signal.symbol); + bool isDowJones = _symbolParser.IsDowJones(signal.symbol); + + // + string market = _account.GetCompany(); + bool isAMarkets = _marketParser.IsAMarkets(market); + + // + if (!force) + { + // + if (isEURUSD) + { + // + result = + _eurusdLongParser.IsFiltered(conditions); + } + else if (isGBPUSD) + { + // + result = + _gbpusdLongParser.IsFiltered(conditions); + } + else if (isEURGBP) + { + // + result = + _eurgbpLongParser.IsFiltered(conditions); + } + else if (isUSDJPY) + { + // + result = + _usdjpyLongParser.IsFiltered(conditions); + } + else if (isEURJPY) + { + // + result = + _eurjpyLongParser.IsFiltered(conditions); + } + else if (isUSDCHF) + { + // + result = + _usdchfLongParser.IsFiltered(conditions); + } + else if (isEURCHF) + { + // + result = + _eurchfLongParser.IsFiltered(conditions); + } + else if (isXAUUSD) + { + // + result = + _xauusdLongParser.IsFiltered(conditions); + } + else if (isAUDUSD) + { + // + result = + _audusdLongParser.IsFiltered(conditions); + } + else if (isNZDUSD) + { + // + result = + _nzdusdLongParser.IsFiltered(conditions); + } + else if (isUSDCAD) + { + // + result = + _usdcadLongParser.IsFiltered(conditions); + } + else if (isEURCAD) + { + // + result = + _eurcadLongParser.IsFiltered(conditions); + } + else if (isDowJones) + { + // + result = + _dowjonesLongParser.IsFiltered(conditions); + } + } + else + { + // + result = + // + _eurusdLongParser.IsFiltered(conditions) + // + || + // + _gbpusdLongParser.IsFiltered(conditions) + // + || + // + _eurgbpLongParser.IsFiltered(conditions) + // + || + // + _usdjpyLongParser.IsFiltered(conditions) + // + || + // + _eurjpyLongParser.IsFiltered(conditions) + // + || + // + _usdchfLongParser.IsFiltered(conditions) + // + || + // + _eurchfLongParser.IsFiltered(conditions) + // + || + // + _xauusdLongParser.IsFiltered(conditions) + // + || + // + _audusdLongParser.IsFiltered(conditions) + // + || + // + _nzdusdLongParser.IsFiltered(conditions) + // + || + // + _usdcadLongParser.IsFiltered(conditions) + // + || + // + _eurcadLongParser.IsFiltered(conditions) + // + || + // + _dowjonesLongParser.IsFiltered(conditions) + // + ; + } + + // + return result; + } + + // + // Filter Short Signals ... + bool IsShortFiltered( + XSignal &signal, + XCHStrategyConditions &conditions, + bool force = false // + ) + { + // + bool result = false; + + // + bool isEURUSD = _symbolParser.IsEURUSD(signal.symbol); + bool isGBPUSD = _symbolParser.IsGBPUSD(signal.symbol); + bool isEURGBP = _symbolParser.IsEURGBP(signal.symbol); + bool isXAUUSD = _symbolParser.IsXAUUSD(signal.symbol); + bool isUSDJPY = _symbolParser.IsUSDJPY(signal.symbol); + bool isEURJPY = _symbolParser.IsEURJPY(signal.symbol); + bool isUSDCHF = _symbolParser.IsUSDCHF(signal.symbol); + bool isEURCHF = _symbolParser.IsEURCHF(signal.symbol); + bool isAUDUSD = _symbolParser.IsAUDUSD(signal.symbol); + bool isNZDUSD = _symbolParser.IsNZDUSD(signal.symbol); + bool isUSDCAD = _symbolParser.IsUSDCAD(signal.symbol); + bool isEURCAD = _symbolParser.IsEURCAD(signal.symbol); + bool isDowJones = _symbolParser.IsDowJones(signal.symbol); + + // + string market = _account.GetCompany(); + bool isAMarkets = _marketParser.IsAMarkets(market); + + // + if (!force) + { + // + if (isEURUSD) + { + // + result = + _eurusdShortParser.IsFiltered(conditions); + } + else if (isGBPUSD) + { + // + result = + _gbpusdShortParser.IsFiltered(conditions); + } + else if (isEURGBP) + { + // + result = + _eurgbpShortParser.IsFiltered(conditions); + } + else if (isUSDJPY) + { + // + result = + _usdjpyShortParser.IsFiltered(conditions); + } + else if (isEURJPY) + { + // + result = + _eurjpyShortParser.IsFiltered(conditions); + } + else if (isUSDCHF) + { + // + result = + _usdchfShortParser.IsFiltered(conditions); + } + else if (isEURCHF) + { + // + result = + _eurchfShortParser.IsFiltered(conditions); + } + else if (isXAUUSD) + { + // + result = + _xauusdShortParser.IsFiltered(conditions); + } + else if (isAUDUSD) + { + // + result = + _audusdShortParser.IsFiltered(conditions); + } + else if (isNZDUSD) + { + // + result = + _nzdusdShortParser.IsFiltered(conditions); + } + else if (isUSDCAD) + { + // + result = + _usdcadShortParser.IsFiltered(conditions); + } + else if (isEURCAD) + { + // + result = + _eurcadShortParser.IsFiltered(conditions); + } + else if (isDowJones) + { + // + result = + _dowjonesShortParser.IsFiltered(conditions); + } + } + else + { + // + result = + // + _eurusdShortParser.IsFiltered(conditions) + // + || + // + _gbpusdShortParser.IsFiltered(conditions) + // + || + // + _eurgbpShortParser.IsFiltered(conditions) + // + || + // + _usdjpyShortParser.IsFiltered(conditions) + // + || + // + _eurjpyShortParser.IsFiltered(conditions) + // + || + // + _usdchfShortParser.IsFiltered(conditions) + // + || + // + _eurchfShortParser.IsFiltered(conditions) + // + || + // + _xauusdShortParser.IsFiltered(conditions) + // + || + // + _audusdShortParser.IsFiltered(conditions) + // + || + // + _nzdusdShortParser.IsFiltered(conditions) + // + || + // + _usdcadShortParser.IsFiltered(conditions) + // + || + // + _eurcadShortParser.IsFiltered(conditions) + // + || + // + _dowjonesShortParser.IsFiltered(conditions) + // + ; + } + + // + return result; + } +}; + +// \ No newline at end of file diff --git a/Documents/BKP/Requirements/x-saherelm.xch.parser.mq5 b/Documents/BKP/Requirements/x-saherelm.xch.parser.mq5 new file mode 100644 index 00000000..2c40d59a --- /dev/null +++ b/Documents/BKP/Requirements/x-saherelm.xch.parser.mq5 @@ -0,0 +1,1235 @@ +/////////////////////////////////////////////////////// +// +// SaherElm IT Center MQL5 Strategy Parser Library +// ------------------------------------------------ +// Name: XCHStartegyConditionsParser +// Description: provide all conditions parsing +// for XCH Strategy ... +// +// +// Maintainer: +// ------------ +// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) +// +////////////////////////////////////////////////////// +// +// Global Properties ... +#property library +#property copyright "Copyright 2023, SaherElm IT Center" +#property link "https://www.saherelm.ir" +#property version "1.00" +#property strict + +// +// Imports ... +#include "../Strategies/x-saherelm.xch.strategy.mq5" + +// +#include "../Parsers/x-saherelm.xch.dowj.long.parser.mq5" +#include "../Parsers/x-saherelm.xch.dowj.short.parser.mq5" +#include "../Parsers/x-saherelm.xch.eurgbp.long.parser.mq5" +#include "../Parsers/x-saherelm.xch.eurgbp.short.parser.mq5" +#include "../Parsers/x-saherelm.xch.eurjpy.long.parser.mq5" +#include "../Parsers/x-saherelm.xch.eurjpy.short.parser.mq5" +#include "../Parsers/x-saherelm.xch.eurchf.long.parser.mq5" +#include "../Parsers/x-saherelm.xch.eurchf.short.parser.mq5" +#include "../Parsers/x-saherelm.xch.audusd.long.parser.mq5" +#include "../Parsers/x-saherelm.xch.audusd.short.parser.mq5" +#include "../Parsers/x-saherelm.xch.nzdusd.long.parser.mq5" +#include "../Parsers/x-saherelm.xch.nzdusd.short.parser.mq5" +#include "../Parsers/x-saherelm.xch.usdcad.long.parser.mq5" +#include "../Parsers/x-saherelm.xch.usdcad.short.parser.mq5" +#include "../Parsers/x-saherelm.xch.eurcad.long.parser.mq5" +#include "../Parsers/x-saherelm.xch.eurcad.short.parser.mq5" +#include "../Parsers/x-saherelm.xch.eurusd.long.parser.mq5" +#include "../Parsers/x-saherelm.xch.eurusd.short.parser.mq5" +#include "../Parsers/x-saherelm.xch.usdjpy.long.parser.mq5" +#include "../Parsers/x-saherelm.xch.usdjpy.short.parser.mq5" +#include "../Parsers/x-saherelm.xch.usdchf.long.parser.mq5" +#include "../Parsers/x-saherelm.xch.usdchf.short.parser.mq5" +#include "../Parsers/x-saherelm.xch.gbpusd.long.parser.mq5" +#include "../Parsers/x-saherelm.xch.gbpusd.short.parser.mq5" +#include "../Parsers/x-saherelm.xch.xauusd.long.parser.mq5" +#include "../Parsers/x-saherelm.xch.xauusd.short.parser.mq5" + +// +// Conditions Parser ... +struct XCHStartegyConditionsParser +{ + // + string _version; + + // + // Parsers ... + + // + XSCAccount _account; + XSymbolParser _symbolParser; + XMarketParser _marketParser; + + // + // EURUSD ... + XCHStartegyEURUSDLongConditionsParser _eurusdLongParser; + XCHStartegyEURUSDShortConditionsParser _eurusdShortParser; + + // + // GBPUSD ... + XCHStartegyGBPUSDLongConditionsParser _gbpusdLongParser; + XCHStartegyGBPUSDShortConditionsParser _gbpusdShortParser; + + // + // EURGBP ... + XCHStartegyEURGBPLongConditionsParser _eurgbpLongParser; + XCHStartegyEURGBPShortConditionsParser _eurgbpShortParser; + + // + // USDJPY ... + XCHStartegyUSDJPYLongConditionsParser _usdjpyLongParser; + XCHStartegyUSDJPYShortConditionsParser _usdjpyShortParser; + + // + // EURJPY ... + XCHStartegyEURJPYLongConditionsParser _eurjpyLongParser; + XCHStartegyEURJPYShortConditionsParser _eurjpyShortParser; + + // + // USDCHF ... + XCHStartegyUSDCHFLongConditionsParser _usdchfLongParser; + XCHStartegyUSDCHFShortConditionsParser _usdchfShortParser; + + // + // EURCHF ... + XCHStartegyEURCHFLongConditionsParser _eurchfLongParser; + XCHStartegyEURCHFShortConditionsParser _eurchfShortParser; + + // + // XAUUSD ... + XCHStartegyXAUUSDLongConditionsParser _xauusdLongParser; + XCHStartegyXAUUSDShortConditionsParser _xauusdShortParser; + + // + // DOWJONES ... + XCHStartegyDOWJONESLongConditionsParser _dowjonesLongParser; + XCHStartegyDOWJONESShortConditionsParser _dowjonesShortParser; + + // + // AUDUSD ... + XCHStartegyAUDUSDLongConditionsParser _audusdLongParser; + XCHStartegyAUDUSDShortConditionsParser _audusdShortParser; + + // + // NZDUSD ... + XCHStartegyNZDUSDLongConditionsParser _nzdusdLongParser; + XCHStartegyNZDUSDShortConditionsParser _nzdusdShortParser; + + // + // USDCAD ... + XCHStartegyUSDCADLongConditionsParser _usdcadLongParser; + XCHStartegyUSDCADShortConditionsParser _usdcadShortParser; + + // + // EURCAD ... + XCHStartegyEURCADLongConditionsParser _eurcadLongParser; + XCHStartegyEURCADShortConditionsParser _eurcadShortParser; + + // + string GenerateSignalConditions( + XSignal &signal, + XCHStrategyConditions &conditions // + ) + { + // + // Calculate Score ... + double bullishScore = 0; + double bearishScore = 0; + conditions.GenerateScore( + bullishScore, + bearishScore // + ); + + // + // Generate Signal Parser Structured Conditions ... + string result = + "(" + + "\n" + + "// Symbol: " + signal.symbol + "\n" + + "// ---------------" + "\n" + + "// Scores:" + "\n" + + "// ---------------" + "\n" + + "// Bullish: " + ToString(bullishScore) + "\n" + + "// Bearish: " + ToString(bearishScore) + "\n" + + "// ---------------" + "\n" + + "// Time: " + ToString(TimeCurrent()) + "\n" + + "// ---------------" + "\n" + + "//" + "\n" + + "// XPV ..." + "\n" + + "//" + "\n" + + // + // True(s) ... + (conditions.pvConditions.isNewPeak ? "conditions.pvConditions.isNewPeak &&" + "\n" : "") + + (conditions.pvConditions.isNewPeakOverLast ? "conditions.pvConditions.isNewPeakOverLast &&" + "\n" : "") + + (conditions.pvConditions.isNewPeakUnderLast ? "conditions.pvConditions.isNewPeakUnderLast &&" + "\n" : "") + + (conditions.pvConditions.isNewVale ? "conditions.pvConditions.isNewVale &&" + "\n" : "") + + (conditions.pvConditions.isNewValeOverLast ? "conditions.pvConditions.isNewValeOverLast &&" + "\n" : "") + + (conditions.pvConditions.isNewValeUnderLast ? "conditions.pvConditions.isNewValeUnderLast &&" + "\n" : "") + + (conditions.pvConditions.isFiboIncreased ? "conditions.pvConditions.isFiboIncreased &&" + "\n" : "") + + (conditions.pvConditions.isFiboDecreased ? "conditions.pvConditions.isFiboDecreased &&" + "\n" : "") + + (conditions.pvConditions.isFiboSectionChanged ? "conditions.pvConditions.isFiboSectionChanged &&" + "\n" : "") + + (conditions.pvConditions.isCloseOverFib1 ? "conditions.pvConditions.isCloseOverFib1 &&" + "\n" : "") + + (conditions.pvConditions.isCloseOverFib2 ? "conditions.pvConditions.isCloseOverFib2 &&" + "\n" : "") + + (conditions.pvConditions.isCloseOverFib3 ? "conditions.pvConditions.isCloseOverFib3 &&" + "\n" : "") + + (conditions.pvConditions.isCloseOverFib4 ? "conditions.pvConditions.isCloseOverFib4 &&" + "\n" : "") + + (conditions.pvConditions.isCloseOverFib5 ? "conditions.pvConditions.isCloseOverFib5 &&" + "\n" : "") + + (conditions.pvConditions.isCloseUnderFib1 ? "conditions.pvConditions.isCloseUnderFib1 &&" + "\n" : "") + + (conditions.pvConditions.isCloseUnderFib2 ? "conditions.pvConditions.isCloseUnderFib2 &&" + "\n" : "") + + (conditions.pvConditions.isCloseUnderFib3 ? "conditions.pvConditions.isCloseUnderFib3 &&" + "\n" : "") + + (conditions.pvConditions.isCloseUnderFib4 ? "conditions.pvConditions.isCloseUnderFib4 &&" + "\n" : "") + + (conditions.pvConditions.isCloseUnderFib5 ? "conditions.pvConditions.isCloseUnderFib5 &&" + "\n" : "") + + (conditions.pvConditions.isCloseCrossedOverFib1 ? "conditions.pvConditions.isCloseCrossedOverFib1 &&" + "\n" : "") + + (conditions.pvConditions.isCloseCrossedOverFib2 ? "conditions.pvConditions.isCloseCrossedOverFib2 &&" + "\n" : "") + + (conditions.pvConditions.isCloseCrossedOverFib3 ? "conditions.pvConditions.isCloseCrossedOverFib3 &&" + "\n" : "") + + (conditions.pvConditions.isCloseCrossedOverFib4 ? "conditions.pvConditions.isCloseCrossedOverFib4 &&" + "\n" : "") + + (conditions.pvConditions.isCloseCrossedOverFib5 ? "conditions.pvConditions.isCloseCrossedOverFib5 &&" + "\n" : "") + + (conditions.pvConditions.isCloseCrossedUnderFib1 ? "conditions.pvConditions.isCloseCrossedUnderFib1 &&" + "\n" : "") + + (conditions.pvConditions.isCloseCrossedUnderFib2 ? "conditions.pvConditions.isCloseCrossedUnderFib2 &&" + "\n" : "") + + (conditions.pvConditions.isCloseCrossedUnderFib3 ? "conditions.pvConditions.isCloseCrossedUnderFib3 &&" + "\n" : "") + + (conditions.pvConditions.isCloseCrossedUnderFib4 ? "conditions.pvConditions.isCloseCrossedUnderFib4 &&" + "\n" : "") + + (conditions.pvConditions.isCloseCrossedUnderFib5 ? "conditions.pvConditions.isCloseCrossedUnderFib5 &&" + "\n" : "") + + (conditions.pvConditions.isSCBullish ? "conditions.pvConditions.isSCBullish &&" + "\n" : "") + + (conditions.pvConditions.isSCHHBullish ? "conditions.pvConditions.isSCHHBullish &&" + "\n" : "") + + (conditions.pvConditions.isSCLLBullish ? "conditions.pvConditions.isSCLLBullish &&" + "\n" : "") + + (conditions.pvConditions.isSCSwitchedToBullish ? "conditions.pvConditions.isSCSwitchedToBullish &&" + "\n" : "") + + (conditions.pvConditions.isSCHHSwitchedToBullish ? "conditions.pvConditions.isSCHHSwitchedToBullish &&" + "\n" : "") + + (conditions.pvConditions.isSCLLSwitchedToBullish ? "conditions.pvConditions.isSCLLSwitchedToBullish &&" + "\n" : "") + + (conditions.pvConditions.isSCBearish ? "conditions.pvConditions.isSCBearish &&" + "\n" : "") + + (conditions.pvConditions.isSCHHBearish ? "conditions.pvConditions.isSCHHBearish &&" + "\n" : "") + + (conditions.pvConditions.isSCLLBearish ? "conditions.pvConditions.isSCLLBearish &&" + "\n" : "") + + (conditions.pvConditions.isSCSwitchedToBearish ? "conditions.pvConditions.isSCSwitchedToBearish &&" + "\n" : "") + + (conditions.pvConditions.isSCHHSwitchedToBearish ? "conditions.pvConditions.isSCHHSwitchedToBearish &&" + "\n" : "") + + (conditions.pvConditions.isSCLLSwitchedToBeraish ? "conditions.pvConditions.isSCLLSwitchedToBeraish &&" + "\n" : "") + + (conditions.pvConditions.isMCBullish ? "conditions.pvConditions.isMCBullish &&" + "\n" : "") + + (conditions.pvConditions.isMCHHBullish ? "conditions.pvConditions.isMCHHBullish &&" + "\n" : "") + + (conditions.pvConditions.isMCLLBullish ? "conditions.pvConditions.isMCLLBullish &&" + "\n" : "") + + (conditions.pvConditions.isMCSwitchedToBullish ? "conditions.pvConditions.isMCSwitchedToBullish &&" + "\n" : "") + + (conditions.pvConditions.isMCHHSwitchedToBullish ? "conditions.pvConditions.isMCHHSwitchedToBullish &&" + "\n" : "") + + (conditions.pvConditions.isMCLLSwitchedToBullish ? "conditions.pvConditions.isMCLLSwitchedToBullish &&" + "\n" : "") + + (conditions.pvConditions.isMCBearish ? "conditions.pvConditions.isMCBearish &&" + "\n" : "") + + (conditions.pvConditions.isMCHHBearish ? "conditions.pvConditions.isMCHHBearish &&" + "\n" : "") + + (conditions.pvConditions.isMCLLBearish ? "conditions.pvConditions.isMCLLBearish &&" + "\n" : "") + + (conditions.pvConditions.isMCSwitchedToBearish ? "conditions.pvConditions.isMCSwitchedToBearish &&" + "\n" : "") + + (conditions.pvConditions.isMCHHSwitchedToBearish ? "conditions.pvConditions.isMCHHSwitchedToBearish &&" + "\n" : "") + + (conditions.pvConditions.isMCLLSwitchedToBeraish ? "conditions.pvConditions.isMCLLSwitchedToBeraish &&" + "\n" : "") + + (conditions.pvConditions.isLCBullish ? "conditions.pvConditions.isLCBullish &&" + "\n" : "") + + (conditions.pvConditions.isLCHHBullish ? "conditions.pvConditions.isLCHHBullish &&" + "\n" : "") + + (conditions.pvConditions.isLCLLBullish ? "conditions.pvConditions.isLCLLBullish &&" + "\n" : "") + + (conditions.pvConditions.isLCSwitchedToBullish ? "conditions.pvConditions.isLCSwitchedToBullish &&" + "\n" : "") + + (conditions.pvConditions.isLCHHSwitchedToBullish ? "conditions.pvConditions.isLCHHSwitchedToBullish &&" + "\n" : "") + + (conditions.pvConditions.isLCLLSwitchedToBullish ? "conditions.pvConditions.isLCLLSwitchedToBullish &&" + "\n" : "") + + (conditions.pvConditions.isLCBearish ? "conditions.pvConditions.isLCBearish &&" + "\n" : "") + + (conditions.pvConditions.isLCHHBearish ? "conditions.pvConditions.isLCHHBearish &&" + "\n" : "") + + (conditions.pvConditions.isLCLLBearish ? "conditions.pvConditions.isLCLLBearish &&" + "\n" : "") + + (conditions.pvConditions.isLCSwitchedToBearish ? "conditions.pvConditions.isLCSwitchedToBearish &&" + "\n" : "") + + (conditions.pvConditions.isLCHHSwitchedToBearish ? "conditions.pvConditions.isLCHHSwitchedToBearish &&" + "\n" : "") + + (conditions.pvConditions.isLCLLSwitchedToBeraish ? "conditions.pvConditions.isLCLLSwitchedToBeraish &&" + "\n" : "") + + (conditions.pvConditions.isHCBullish ? "conditions.pvConditions.isHCBullish &&" + "\n" : "") + + (conditions.pvConditions.isHCHHBullish ? "conditions.pvConditions.isHCHHBullish &&" + "\n" : "") + + (conditions.pvConditions.isHCLLBullish ? "conditions.pvConditions.isHCLLBullish &&" + "\n" : "") + + (conditions.pvConditions.isHCSwitchedToBullish ? "conditions.pvConditions.isHCSwitchedToBullish &&" + "\n" : "") + + (conditions.pvConditions.isHCHHSwitchedToBullish ? "conditions.pvConditions.isHCHHSwitchedToBullish &&" + "\n" : "") + + (conditions.pvConditions.isHCLLSwitchedToBullish ? "conditions.pvConditions.isHCLLSwitchedToBullish &&" + "\n" : "") + + (conditions.pvConditions.isHCBearish ? "conditions.pvConditions.isHCBearish &&" + "\n" : "") + + (conditions.pvConditions.isHCHHBearish ? "conditions.pvConditions.isHCHHBearish &&" + "\n" : "") + + (conditions.pvConditions.isHCLLBearish ? "conditions.pvConditions.isHCLLBearish &&" + "\n" : "") + + (conditions.pvConditions.isHCSwitchedToBearish ? "conditions.pvConditions.isHCSwitchedToBearish &&" + "\n" : "") + + (conditions.pvConditions.isHCHHSwitchedToBearish ? "conditions.pvConditions.isHCHHSwitchedToBearish &&" + "\n" : "") + + (conditions.pvConditions.isHCLLSwitchedToBeraish ? "conditions.pvConditions.isHCLLSwitchedToBeraish &&" + "\n" : "") + + // "//" + "\n" + + // // + // // False(s) ... + // (!conditions.pvConditions.isNewPeak ? "!conditions.pvConditions.isNewPeak &&" + "\n" : "") + + // (!conditions.pvConditions.isNewPeakOverLast ? "!conditions.pvConditions.isNewPeakOverLast &&" + "\n" : "") + + // (!conditions.pvConditions.isNewPeakUnderLast ? "!conditions.pvConditions.isNewPeakUnderLast &&" + "\n" : "") + + // (!conditions.pvConditions.isNewVale ? "!conditions.pvConditions.isNewVale &&" + "\n" : "") + + // (!conditions.pvConditions.isNewValeOverLast ? "!conditions.pvConditions.isNewValeOverLast &&" + "\n" : "") + + // (!conditions.pvConditions.isNewValeUnderLast ? "!conditions.pvConditions.isNewValeUnderLast &&" + "\n" : "") + + // (!conditions.pvConditions.isFiboIncreased ? "!conditions.pvConditions.isFiboIncreased &&" + "\n" : "") + + // (!conditions.pvConditions.isFiboDecreased ? "!conditions.pvConditions.isFiboDecreased &&" + "\n" : "") + + // (!conditions.pvConditions.isFiboSectionChanged ? "!conditions.pvConditions.isFiboSectionChanged &&" + "\n" : "") + + // (!conditions.pvConditions.isCloseOverFib1 ? "!conditions.pvConditions.isCloseOverFib1 &&" + "\n" : "") + + // (!conditions.pvConditions.isCloseOverFib2 ? "!conditions.pvConditions.isCloseOverFib2 &&" + "\n" : "") + + // (!conditions.pvConditions.isCloseOverFib3 ? "!conditions.pvConditions.isCloseOverFib3 &&" + "\n" : "") + + // (!conditions.pvConditions.isCloseOverFib4 ? "!conditions.pvConditions.isCloseOverFib4 &&" + "\n" : "") + + // (!conditions.pvConditions.isCloseOverFib5 ? "!conditions.pvConditions.isCloseOverFib5 &&" + "\n" : "") + + // (!conditions.pvConditions.isCloseUnderFib1 ? "!conditions.pvConditions.isCloseUnderFib1 &&" + "\n" : "") + + // (!conditions.pvConditions.isCloseUnderFib2 ? "!conditions.pvConditions.isCloseUnderFib2 &&" + "\n" : "") + + // (!conditions.pvConditions.isCloseUnderFib3 ? "!conditions.pvConditions.isCloseUnderFib3 &&" + "\n" : "") + + // (!conditions.pvConditions.isCloseUnderFib4 ? "!conditions.pvConditions.isCloseUnderFib4 &&" + "\n" : "") + + // (!conditions.pvConditions.isCloseUnderFib5 ? "!conditions.pvConditions.isCloseUnderFib5 &&" + "\n" : "") + + // (!conditions.pvConditions.isCloseCrossedOverFib1 ? "!conditions.pvConditions.isCloseCrossedOverFib1 &&" + "\n" : "") + + // (!conditions.pvConditions.isCloseCrossedOverFib2 ? "!conditions.pvConditions.isCloseCrossedOverFib2 &&" + "\n" : "") + + // (!conditions.pvConditions.isCloseCrossedOverFib3 ? "!conditions.pvConditions.isCloseCrossedOverFib3 &&" + "\n" : "") + + // (!conditions.pvConditions.isCloseCrossedOverFib4 ? "!conditions.pvConditions.isCloseCrossedOverFib4 &&" + "\n" : "") + + // (!conditions.pvConditions.isCloseCrossedOverFib5 ? "!conditions.pvConditions.isCloseCrossedOverFib5 &&" + "\n" : "") + + // (!conditions.pvConditions.isCloseCrossedUnderFib1 ? "!conditions.pvConditions.isCloseCrossedUnderFib1 &&" + "\n" : "") + + // (!conditions.pvConditions.isCloseCrossedUnderFib2 ? "!conditions.pvConditions.isCloseCrossedUnderFib2 &&" + "\n" : "") + + // (!conditions.pvConditions.isCloseCrossedUnderFib3 ? "!conditions.pvConditions.isCloseCrossedUnderFib3 &&" + "\n" : "") + + // (!conditions.pvConditions.isCloseCrossedUnderFib4 ? "!conditions.pvConditions.isCloseCrossedUnderFib4 &&" + "\n" : "") + + // (!conditions.pvConditions.isCloseCrossedUnderFib5 ? "!conditions.pvConditions.isCloseCrossedUnderFib5 &&" + "\n" : "") + + // (!conditions.pvConditions.isSCBullish ? "!conditions.pvConditions.isSCBullish &&" + "\n" : "") + + // (!conditions.pvConditions.isSCHHBullish ? "!conditions.pvConditions.isSCHHBullish &&" + "\n" : "") + + // (!conditions.pvConditions.isSCLLBullish ? "!conditions.pvConditions.isSCLLBullish &&" + "\n" : "") + + // (!conditions.pvConditions.isSCSwitchedToBullish ? "!conditions.pvConditions.isSCSwitchedToBullish &&" + "\n" : "") + + // (!conditions.pvConditions.isSCHHSwitchedToBullish ? "!conditions.pvConditions.isSCHHSwitchedToBullish &&" + "\n" : "") + + // (!conditions.pvConditions.isSCLLSwitchedToBullish ? "!conditions.pvConditions.isSCLLSwitchedToBullish &&" + "\n" : "") + + // (!conditions.pvConditions.isSCBearish ? "!conditions.pvConditions.isSCBearish &&" + "\n" : "") + + // (!conditions.pvConditions.isSCHHBearish ? "!conditions.pvConditions.isSCHHBearish &&" + "\n" : "") + + // (!conditions.pvConditions.isSCLLBearish ? "!conditions.pvConditions.isSCLLBearish &&" + "\n" : "") + + // (!conditions.pvConditions.isSCSwitchedToBearish ? "!conditions.pvConditions.isSCSwitchedToBearish &&" + "\n" : "") + + // (!conditions.pvConditions.isSCHHSwitchedToBearish ? "!conditions.pvConditions.isSCHHSwitchedToBearish &&" + "\n" : "") + + // (!conditions.pvConditions.isSCLLSwitchedToBeraish ? "!conditions.pvConditions.isSCLLSwitchedToBeraish &&" + "\n" : "") + + // (!conditions.pvConditions.isMCBullish ? "!conditions.pvConditions.isMCBullish &&" + "\n" : "") + + // (!conditions.pvConditions.isMCHHBullish ? "!conditions.pvConditions.isMCHHBullish &&" + "\n" : "") + + // (!conditions.pvConditions.isMCLLBullish ? "!conditions.pvConditions.isMCLLBullish &&" + "\n" : "") + + // (!conditions.pvConditions.isMCSwitchedToBullish ? "!conditions.pvConditions.isMCSwitchedToBullish &&" + "\n" : "") + + // (!conditions.pvConditions.isMCHHSwitchedToBullish ? "!conditions.pvConditions.isMCHHSwitchedToBullish &&" + "\n" : "") + + // (!conditions.pvConditions.isMCLLSwitchedToBullish ? "!conditions.pvConditions.isMCLLSwitchedToBullish &&" + "\n" : "") + + // (!conditions.pvConditions.isMCBearish ? "!conditions.pvConditions.isMCBearish &&" + "\n" : "") + + // (!conditions.pvConditions.isMCHHBearish ? "!conditions.pvConditions.isMCHHBearish &&" + "\n" : "") + + // (!conditions.pvConditions.isMCLLBearish ? "!conditions.pvConditions.isMCLLBearish &&" + "\n" : "") + + // (!conditions.pvConditions.isMCSwitchedToBearish ? "!conditions.pvConditions.isMCSwitchedToBearish &&" + "\n" : "") + + // (!conditions.pvConditions.isMCHHSwitchedToBearish ? "!conditions.pvConditions.isMCHHSwitchedToBearish &&" + "\n" : "") + + // (!conditions.pvConditions.isMCLLSwitchedToBeraish ? "!conditions.pvConditions.isMCLLSwitchedToBeraish &&" + "\n" : "") + + // (!conditions.pvConditions.isLCBullish ? "!conditions.pvConditions.isLCBullish &&" + "\n" : "") + + // (!conditions.pvConditions.isLCHHBullish ? "!conditions.pvConditions.isLCHHBullish &&" + "\n" : "") + + // (!conditions.pvConditions.isLCLLBullish ? "!conditions.pvConditions.isLCLLBullish &&" + "\n" : "") + + // (!conditions.pvConditions.isLCSwitchedToBullish ? "!conditions.pvConditions.isLCSwitchedToBullish &&" + "\n" : "") + + // (!conditions.pvConditions.isLCHHSwitchedToBullish ? "!conditions.pvConditions.isLCHHSwitchedToBullish &&" + "\n" : "") + + // (!conditions.pvConditions.isLCLLSwitchedToBullish ? "!conditions.pvConditions.isLCLLSwitchedToBullish &&" + "\n" : "") + + // (!conditions.pvConditions.isLCBearish ? "!conditions.pvConditions.isLCBearish &&" + "\n" : "") + + // (!conditions.pvConditions.isLCHHBearish ? "!conditions.pvConditions.isLCHHBearish &&" + "\n" : "") + + // (!conditions.pvConditions.isLCLLBearish ? "!conditions.pvConditions.isLCLLBearish &&" + "\n" : "") + + // (!conditions.pvConditions.isLCSwitchedToBearish ? "!conditions.pvConditions.isLCSwitchedToBearish &&" + "\n" : "") + + // (!conditions.pvConditions.isLCHHSwitchedToBearish ? "!conditions.pvConditions.isLCHHSwitchedToBearish &&" + "\n" : "") + + // (!conditions.pvConditions.isLCLLSwitchedToBeraish ? "!conditions.pvConditions.isLCLLSwitchedToBeraish &&" + "\n" : "") + + // (!conditions.pvConditions.isHCBullish ? "!conditions.pvConditions.isHCBullish &&" + "\n" : "") + + // (!conditions.pvConditions.isHCHHBullish ? "!conditions.pvConditions.isHCHHBullish &&" + "\n" : "") + + // (!conditions.pvConditions.isHCLLBullish ? "!conditions.pvConditions.isHCLLBullish &&" + "\n" : "") + + // (!conditions.pvConditions.isHCSwitchedToBullish ? "!conditions.pvConditions.isHCSwitchedToBullish &&" + "\n" : "") + + // (!conditions.pvConditions.isHCHHSwitchedToBullish ? "!conditions.pvConditions.isHCHHSwitchedToBullish &&" + "\n" : "") + + // (!conditions.pvConditions.isHCLLSwitchedToBullish ? "!conditions.pvConditions.isHCLLSwitchedToBullish &&" + "\n" : "") + + // (!conditions.pvConditions.isHCBearish ? "!conditions.pvConditions.isHCBearish &&" + "\n" : "") + + // (!conditions.pvConditions.isHCHHBearish ? "!conditions.pvConditions.isHCHHBearish &&" + "\n" : "") + + // (!conditions.pvConditions.isHCLLBearish ? "!conditions.pvConditions.isHCLLBearish &&" + "\n" : "") + + // (!conditions.pvConditions.isHCSwitchedToBearish ? "!conditions.pvConditions.isHCSwitchedToBearish &&" + "\n" : "") + + // (!conditions.pvConditions.isHCHHSwitchedToBearish ? "!conditions.pvConditions.isHCHHSwitchedToBearish &&" + "\n" : "") + + // (!conditions.pvConditions.isHCLLSwitchedToBeraish ? "!conditions.pvConditions.isHCLLSwitchedToBeraish &&" + "\n" : "") + + "//" + "\n" + + "// XCHM ..." + "\n" + + "//" + "\n" + + (conditions.chmConditions.hasBullishPower ? "conditions.chmConditions.hasBullishPower &&" + "\n" : "") + + (conditions.chmConditions.hasBearishPower ? "conditions.chmConditions.hasBearishPower &&" + "\n" : "") + + (conditions.chmConditions.isBullishPowerUp ? "conditions.chmConditions.isBullishPowerUp &&" + "\n" : "") + + (conditions.chmConditions.isBearishPowerUp ? "conditions.chmConditions.isBearishPowerUp &&" + "\n" : "") + + (conditions.chmConditions.isBullishPowerIncreasing ? "conditions.chmConditions.isBullishPowerIncreasing &&" + "\n" : "") + + (conditions.chmConditions.isBullishPowerDecreasing ? "conditions.chmConditions.isBullishPowerDecreasing &&" + "\n" : "") + + (conditions.chmConditions.isBearishPowerIncreasing ? "conditions.chmConditions.isBearishPowerIncreasing &&" + "\n" : "") + + (conditions.chmConditions.isBearishPowerDecreasing ? "conditions.chmConditions.isBearishPowerDecreasing &&" + "\n" : "") + + (conditions.chmConditions.isFastOverSlow ? "conditions.chmConditions.isFastOverSlow &&" + "\n" : "") + + (conditions.chmConditions.isFastUnderSlow ? "conditions.chmConditions.isFastUnderSlow &&" + "\n" : "") + + (conditions.chmConditions.isFastCrossedOverSlow ? "conditions.chmConditions.isFastCrossedOverSlow &&" + "\n" : "") + + (conditions.chmConditions.isFastCrossedUnderSlow ? "conditions.chmConditions.isFastCrossedUnderSlow &&" + "\n" : "") + + (conditions.chmConditions.isClosedOverFast ? "conditions.chmConditions.isClosedOverFast &&" + "\n" : "") + + (conditions.chmConditions.isClosedUnderFast ? "conditions.chmConditions.isClosedUnderFast &&" + "\n" : "") + + (conditions.chmConditions.isCFastOverSlow ? "conditions.chmConditions.isCFastOverSlow &&" + "\n" : "") + + (conditions.chmConditions.isCFastUnderSlow ? "conditions.chmConditions.isCFastUnderSlow &&" + "\n" : "") + + (conditions.chmConditions.isCFastCrossedOverSlow ? "conditions.chmConditions.isCFastCrossedOverSlow &&" + "\n" : "") + + (conditions.chmConditions.isCFastCrossedUnderSlow ? "conditions.chmConditions.isCFastCrossedUnderSlow &&" + "\n" : "") + + (conditions.chmConditions.isClosedOverCFast ? "conditions.chmConditions.isClosedOverCFast &&" + "\n" : "") + + (conditions.chmConditions.isClosedUnderCFast ? "conditions.chmConditions.isClosedUnderCFast &&" + "\n" : "") + + (conditions.chmConditions.isSFastOverSlow ? "conditions.chmConditions.isSFastOverSlow &&" + "\n" : "") + + (conditions.chmConditions.isSFastUnderSlow ? "conditions.chmConditions.isSFastUnderSlow &&" + "\n" : "") + + (conditions.chmConditions.isSFastCrossedOverSlow ? "conditions.chmConditions.isSFastCrossedOverSlow &&" + "\n" : "") + + (conditions.chmConditions.isSFastCrossedUnderSlow ? "conditions.chmConditions.isSFastCrossedUnderSlow &&" + "\n" : "") + + (conditions.chmConditions.isClosedOverSFast ? "conditions.chmConditions.isClosedOverSFast &&" + "\n" : "") + + (conditions.chmConditions.isClosedUnderSFast ? "conditions.chmConditions.isClosedUnderSFast &&" + "\n" : "") + + (conditions.chmConditions.isMFastOverSlow ? "conditions.chmConditions.isMFastOverSlow &&" + "\n" : "") + + (conditions.chmConditions.isMFastUnderSlow ? "conditions.chmConditions.isMFastUnderSlow &&" + "\n" : "") + + (conditions.chmConditions.isMFastCrossedOverSlow ? "conditions.chmConditions.isMFastCrossedOverSlow &&" + "\n" : "") + + (conditions.chmConditions.isMFastCrossedUnderSlow ? "conditions.chmConditions.isMFastCrossedUnderSlow &&" + "\n" : "") + + (conditions.chmConditions.isClosedOverMFast ? "conditions.chmConditions.isClosedOverMFast &&" + "\n" : "") + + (conditions.chmConditions.isClosedUnderMFast ? "conditions.chmConditions.isClosedUnderMFast &&" + "\n" : "") + + (conditions.chmConditions.isLFastOverSlow ? "conditions.chmConditions.isLFastOverSlow &&" + "\n" : "") + + (conditions.chmConditions.isLFastUnderSlow ? "conditions.chmConditions.isLFastUnderSlow &&" + "\n" : "") + + (conditions.chmConditions.isLFastCrossedOverSlow ? "conditions.chmConditions.isLFastCrossedOverSlow &&" + "\n" : "") + + (conditions.chmConditions.isLFastCrossedUnderSlow ? "conditions.chmConditions.isLFastCrossedUnderSlow &&" + "\n" : "") + + (conditions.chmConditions.isClosedOverLFast ? "conditions.chmConditions.isClosedOverLFast &&" + "\n" : "") + + (conditions.chmConditions.isClosedUnderLFast ? "conditions.chmConditions.isClosedUnderLFast &&" + "\n" : "") + + (conditions.chmConditions.isHFastOverSlow ? "conditions.chmConditions.isHFastOverSlow &&" + "\n" : "") + + (conditions.chmConditions.isHFastUnderSlow ? "conditions.chmConditions.isHFastUnderSlow &&" + "\n" : "") + + (conditions.chmConditions.isHFastCrossedOverSlow ? "conditions.chmConditions.isHFastCrossedOverSlow &&" + "\n" : "") + + (conditions.chmConditions.isHFastCrossedUnderSlow ? "conditions.chmConditions.isHFastCrossedUnderSlow &&" + "\n" : "") + + (conditions.chmConditions.isClosedOverHFast ? "conditions.chmConditions.isClosedOverHFast &&" + "\n" : "") + + (conditions.chmConditions.isClosedUnderHFast ? "conditions.chmConditions.isClosedUnderHFast &&" + "\n" : "") + + // "//" + "\n" + + // (!conditions.chmConditions.hasBullishPower ? "!conditions.chmConditions.hasBullishPower &&" + "\n" : "") + + // (!conditions.chmConditions.hasBearishPower ? "!conditions.chmConditions.hasBearishPower &&" + "\n" : "") + + // (!conditions.chmConditions.isBullishPowerUp ? "!conditions.chmConditions.isBullishPowerUp &&" + "\n" : "") + + // (!conditions.chmConditions.isBearishPowerUp ? "!conditions.chmConditions.isBearishPowerUp &&" + "\n" : "") + + // (!conditions.chmConditions.isBullishPowerIncreasing ? "!conditions.chmConditions.isBullishPowerIncreasing &&" + "\n" : "") + + // (!conditions.chmConditions.isBullishPowerDecreasing ? "!conditions.chmConditions.isBullishPowerDecreasing &&" + "\n" : "") + + // (!conditions.chmConditions.isBearishPowerIncreasing ? "!conditions.chmConditions.isBearishPowerIncreasing &&" + "\n" : "") + + // (!conditions.chmConditions.isBearishPowerDecreasing ? "!conditions.chmConditions.isBearishPowerDecreasing &&" + "\n" : "") + + // (!conditions.chmConditions.isFastOverSlow ? "!conditions.chmConditions.isFastOverSlow &&" + "\n" : "") + + // (!conditions.chmConditions.isFastUnderSlow ? "!conditions.chmConditions.isFastUnderSlow &&" + "\n" : "") + + // (!conditions.chmConditions.isFastCrossedOverSlow ? "!conditions.chmConditions.isFastCrossedOverSlow &&" + "\n" : "") + + // (!conditions.chmConditions.isFastCrossedUnderSlow ? "!conditions.chmConditions.isFastCrossedUnderSlow &&" + "\n" : "") + + // (!conditions.chmConditions.isClosedOverFast ? "!conditions.chmConditions.isClosedOverFast &&" + "\n" : "") + + // (!conditions.chmConditions.isClosedUnderFast ? "!conditions.chmConditions.isClosedUnderFast &&" + "\n" : "") + + // (!conditions.chmConditions.isCFastOverSlow ? "!conditions.chmConditions.isCFastOverSlow &&" + "\n" : "") + + // (!conditions.chmConditions.isCFastUnderSlow ? "!conditions.chmConditions.isCFastUnderSlow &&" + "\n" : "") + + // (!conditions.chmConditions.isCFastCrossedOverSlow ? "!conditions.chmConditions.isCFastCrossedOverSlow &&" + "\n" : "") + + // (!conditions.chmConditions.isCFastCrossedUnderSlow ? "!conditions.chmConditions.isCFastCrossedUnderSlow &&" + "\n" : "") + + // (!conditions.chmConditions.isClosedOverCFast ? "!conditions.chmConditions.isClosedOverCFast &&" + "\n" : "") + + // (!conditions.chmConditions.isClosedUnderCFast ? "!conditions.chmConditions.isClosedUnderCFast &&" + "\n" : "") + + // (!conditions.chmConditions.isSFastOverSlow ? "!conditions.chmConditions.isSFastOverSlow &&" + "\n" : "") + + // (!conditions.chmConditions.isSFastUnderSlow ? "!conditions.chmConditions.isSFastUnderSlow &&" + "\n" : "") + + // (!conditions.chmConditions.isSFastCrossedOverSlow ? "!conditions.chmConditions.isSFastCrossedOverSlow &&" + "\n" : "") + + // (!conditions.chmConditions.isSFastCrossedUnderSlow ? "!conditions.chmConditions.isSFastCrossedUnderSlow &&" + "\n" : "") + + // (!conditions.chmConditions.isClosedOverSFast ? "!conditions.chmConditions.isClosedOverSFast &&" + "\n" : "") + + // (!conditions.chmConditions.isClosedUnderSFast ? "!conditions.chmConditions.isClosedUnderSFast &&" + "\n" : "") + + // (!conditions.chmConditions.isMFastOverSlow ? "!conditions.chmConditions.isMFastOverSlow &&" + "\n" : "") + + // (!conditions.chmConditions.isMFastUnderSlow ? "!conditions.chmConditions.isMFastUnderSlow &&" + "\n" : "") + + // (!conditions.chmConditions.isMFastCrossedOverSlow ? "!conditions.chmConditions.isMFastCrossedOverSlow &&" + "\n" : "") + + // (!conditions.chmConditions.isMFastCrossedUnderSlow ? "!conditions.chmConditions.isMFastCrossedUnderSlow &&" + "\n" : "") + + // (!conditions.chmConditions.isClosedOverMFast ? "!conditions.chmConditions.isClosedOverMFast &&" + "\n" : "") + + // (!conditions.chmConditions.isClosedUnderMFast ? "!conditions.chmConditions.isClosedUnderMFast &&" + "\n" : "") + + // (!conditions.chmConditions.isLFastOverSlow ? "!conditions.chmConditions.isLFastOverSlow &&" + "\n" : "") + + // (!conditions.chmConditions.isLFastUnderSlow ? "!conditions.chmConditions.isLFastUnderSlow &&" + "\n" : "") + + // (!conditions.chmConditions.isLFastCrossedOverSlow ? "!conditions.chmConditions.isLFastCrossedOverSlow &&" + "\n" : "") + + // (!conditions.chmConditions.isLFastCrossedUnderSlow ? "!conditions.chmConditions.isLFastCrossedUnderSlow &&" + "\n" : "") + + // (!conditions.chmConditions.isClosedOverLFast ? "!conditions.chmConditions.isClosedOverLFast &&" + "\n" : "") + + // (!conditions.chmConditions.isClosedUnderLFast ? "!conditions.chmConditions.isClosedUnderLFast &&" + "\n" : "") + + // (!conditions.chmConditions.isHFastOverSlow ? "!conditions.chmConditions.isHFastOverSlow &&" + "\n" : "") + + // (!conditions.chmConditions.isHFastUnderSlow ? "!conditions.chmConditions.isHFastUnderSlow &&" + "\n" : "") + + // (!conditions.chmConditions.isHFastCrossedOverSlow ? "!conditions.chmConditions.isHFastCrossedOverSlow &&" + "\n" : "") + + // (!conditions.chmConditions.isHFastCrossedUnderSlow ? "!conditions.chmConditions.isHFastCrossedUnderSlow &&" + "\n" : "") + + // (!conditions.chmConditions.isClosedOverHFast ? "!conditions.chmConditions.isClosedOverHFast &&" + "\n" : "") + + // (!conditions.chmConditions.isClosedUnderHFast ? "!conditions.chmConditions.isClosedUnderHFast &&" + "\n" : "") + + "//" + "\n" + + "// XCHHK ..." + "\n" + + "//" + "\n" + + (conditions.chhkConditions.hasBullishPower ? "conditions.chhkConditions.hasBullishPower &&" + "\n" : "") + + (conditions.chhkConditions.hasBearishPower ? "conditions.chhkConditions.hasBearishPower &&" + "\n" : "") + + (conditions.chhkConditions.isBullishPowerUp ? "conditions.chhkConditions.isBullishPowerUp &&" + "\n" : "") + + (conditions.chhkConditions.isBearishPowerUp ? "conditions.chhkConditions.isBearishPowerUp &&" + "\n" : "") + + (conditions.chhkConditions.isBullishPowerIncreasing ? "conditions.chhkConditions.isBullishPowerIncreasing &&" + "\n" : "") + + (conditions.chhkConditions.isBullishPowerDecreasing ? "conditions.chhkConditions.isBullishPowerDecreasing &&" + "\n" : "") + + (conditions.chhkConditions.isBearishPowerIncreasing ? "conditions.chhkConditions.isBearishPowerIncreasing &&" + "\n" : "") + + (conditions.chhkConditions.isBearishPowerDecreasing ? "conditions.chhkConditions.isBearishPowerDecreasing &&" + "\n" : "") + + (conditions.chhkConditions.isCBullish ? "conditions.chhkConditions.isCBullish &&" + "\n" : "") + + (conditions.chhkConditions.isCSwitchedToBullish ? "conditions.chhkConditions.isCSwitchedToBullish &&" + "\n" : "") + + (conditions.chhkConditions.isCBearish ? "conditions.chhkConditions.isCBearish &&" + "\n" : "") + + (conditions.chhkConditions.isCSwitchedToBearish ? "conditions.chhkConditions.isCSwitchedToBearish &&" + "\n" : "") + + (conditions.chhkConditions.isCloseOverCHigh ? "conditions.chhkConditions.isCloseOverCHigh &&" + "\n" : "") + + (conditions.chhkConditions.isCloseUnderCLow ? "conditions.chhkConditions.isCloseUnderCLow &&" + "\n" : "") + + (conditions.chhkConditions.isSBullish ? "conditions.chhkConditions.isSBullish &&" + "\n" : "") + + (conditions.chhkConditions.isSSwitchedToBullish ? "conditions.chhkConditions.isSSwitchedToBullish &&" + "\n" : "") + + (conditions.chhkConditions.isSBearish ? "conditions.chhkConditions.isSBearish &&" + "\n" : "") + + (conditions.chhkConditions.isSSwitchedToBearish ? "conditions.chhkConditions.isSSwitchedToBearish &&" + "\n" : "") + + (conditions.chhkConditions.isCloseOverSHigh ? "conditions.chhkConditions.isCloseOverSHigh &&" + "\n" : "") + + (conditions.chhkConditions.isCloseUnderSLow ? "conditions.chhkConditions.isCloseUnderSLow &&" + "\n" : "") + + (conditions.chhkConditions.isMBullish ? "conditions.chhkConditions.isMBullish &&" + "\n" : "") + + (conditions.chhkConditions.isMSwitchedToBullish ? "conditions.chhkConditions.isMSwitchedToBullish &&" + "\n" : "") + + (conditions.chhkConditions.isMBearish ? "conditions.chhkConditions.isMBearish &&" + "\n" : "") + + (conditions.chhkConditions.isMSwitchedToBearish ? "conditions.chhkConditions.isMSwitchedToBearish &&" + "\n" : "") + + (conditions.chhkConditions.isCloseOverMHigh ? "conditions.chhkConditions.isCloseOverMHigh &&" + "\n" : "") + + (conditions.chhkConditions.isCloseUnderMLow ? "conditions.chhkConditions.isCloseUnderMLow &&" + "\n" : "") + + (conditions.chhkConditions.isLBullish ? "conditions.chhkConditions.isLBullish &&" + "\n" : "") + + (conditions.chhkConditions.isLSwitchedToBullish ? "conditions.chhkConditions.isLSwitchedToBullish &&" + "\n" : "") + + (conditions.chhkConditions.isLBearish ? "conditions.chhkConditions.isLBearish &&" + "\n" : "") + + (conditions.chhkConditions.isLSwitchedToBearish ? "conditions.chhkConditions.isLSwitchedToBearish &&" + "\n" : "") + + (conditions.chhkConditions.isCloseOverLHigh ? "conditions.chhkConditions.isCloseOverLHigh &&" + "\n" : "") + + (conditions.chhkConditions.isCloseUnderLLow ? "conditions.chhkConditions.isCloseUnderLLow &&" + "\n" : "") + + (conditions.chhkConditions.isHBullish ? "conditions.chhkConditions.isHBullish &&" + "\n" : "") + + (conditions.chhkConditions.isHSwitchedToBullish ? "conditions.chhkConditions.isHSwitchedToBullish &&" + "\n" : "") + + (conditions.chhkConditions.isHBearish ? "conditions.chhkConditions.isHBearish &&" + "\n" : "") + + (conditions.chhkConditions.isHSwitchedToBearish ? "conditions.chhkConditions.isHSwitchedToBearish &&" + "\n" : "") + + (conditions.chhkConditions.isCloseOverHHigh ? "conditions.chhkConditions.isCloseOverHHigh &&" + "\n" : "") + + (conditions.chhkConditions.isCloseUnderHLow ? "conditions.chhkConditions.isCloseUnderHLow &&" + "\n" : "") + + // "//" + "\n" + + // (!conditions.chhkConditions.hasBullishPower ? "!conditions.chhkConditions.hasBullishPower && " + "\n" : "") + + // (!conditions.chhkConditions.hasBearishPower ? "!conditions.chhkConditions.hasBearishPower && " + "\n" : "") + + // (!conditions.chhkConditions.isBullishPowerUp ? "!conditions.chhkConditions.isBullishPowerUp && " + "\n" : "") + + // (!conditions.chhkConditions.isBearishPowerUp ? "!conditions.chhkConditions.isBearishPowerUp && " + "\n" : "") + + // (!conditions.chhkConditions.isBullishPowerIncreasing ? "!conditions.chhkConditions.isBullishPowerIncreasing && " + "\n" : "") + + // (!conditions.chhkConditions.isBullishPowerDecreasing ? "!conditions.chhkConditions.isBullishPowerDecreasing && " + "\n" : "") + + // (!conditions.chhkConditions.isBearishPowerIncreasing ? "!conditions.chhkConditions.isBearishPowerIncreasing && " + "\n" : "") + + // (!conditions.chhkConditions.isBearishPowerDecreasing ? "!conditions.chhkConditions.isBearishPowerDecreasing && " + "\n" : "") + + // (!conditions.chhkConditions.isCBullish ? "!conditions.chhkConditions.isCBullish && " + "\n" : "") + + // (!conditions.chhkConditions.isCSwitchedToBullish ? "!conditions.chhkConditions.isCSwitchedToBullish && " + "\n" : "") + + // (!conditions.chhkConditions.isCBearish ? "!conditions.chhkConditions.isCBearish && " + "\n" : "") + + // (!conditions.chhkConditions.isCSwitchedToBearish ? "!conditions.chhkConditions.isCSwitchedToBearish && " + "\n" : "") + + // (!conditions.chhkConditions.isCloseOverCHigh ? "!conditions.chhkConditions.isCloseOverCHigh && " + "\n" : "") + + // (!conditions.chhkConditions.isCloseUnderCLow ? "!conditions.chhkConditions.isCloseUnderCLow && " + "\n" : "") + + // (!conditions.chhkConditions.isSBullish ? "!conditions.chhkConditions.isSBullish && " + "\n" : "") + + // (!conditions.chhkConditions.isSSwitchedToBullish ? "!conditions.chhkConditions.isSSwitchedToBullish && " + "\n" : "") + + // (!conditions.chhkConditions.isSBearish ? "!conditions.chhkConditions.isSBearish && " + "\n" : "") + + // (!conditions.chhkConditions.isSSwitchedToBearish ? "!conditions.chhkConditions.isSSwitchedToBearish && " + "\n" : "") + + // (!conditions.chhkConditions.isCloseOverSHigh ? "!conditions.chhkConditions.isCloseOverSHigh && " + "\n" : "") + + // (!conditions.chhkConditions.isCloseUnderSLow ? "!conditions.chhkConditions.isCloseUnderSLow && " + "\n" : "") + + // (!conditions.chhkConditions.isMBullish ? "!conditions.chhkConditions.isMBullish && " + "\n" : "") + + // (!conditions.chhkConditions.isMSwitchedToBullish ? "!conditions.chhkConditions.isMSwitchedToBullish && " + "\n" : "") + + // (!conditions.chhkConditions.isMBearish ? "!conditions.chhkConditions.isMBearish && " + "\n" : "") + + // (!conditions.chhkConditions.isMSwitchedToBearish ? "!conditions.chhkConditions.isMSwitchedToBearish && " + "\n" : "") + + // (!conditions.chhkConditions.isCloseOverMHigh ? "!conditions.chhkConditions.isCloseOverMHigh && " + "\n" : "") + + // (!conditions.chhkConditions.isCloseUnderMLow ? "!conditions.chhkConditions.isCloseUnderMLow && " + "\n" : "") + + // (!conditions.chhkConditions.isLBullish ? "!conditions.chhkConditions.isLBullish && " + "\n" : "") + + // (!conditions.chhkConditions.isLSwitchedToBullish ? "!conditions.chhkConditions.isLSwitchedToBullish && " + "\n" : "") + + // (!conditions.chhkConditions.isLBearish ? "!conditions.chhkConditions.isLBearish && " + "\n" : "") + + // (!conditions.chhkConditions.isLSwitchedToBearish ? "!conditions.chhkConditions.isLSwitchedToBearish && " + "\n" : "") + + // (!conditions.chhkConditions.isCloseOverLHigh ? "!conditions.chhkConditions.isCloseOverLHigh && " + "\n" : "") + + // (!conditions.chhkConditions.isCloseUnderLLow ? "!conditions.chhkConditions.isCloseUnderLLow && " + "\n" : "") + + // (!conditions.chhkConditions.isHBullish ? "!conditions.chhkConditions.isHBullish && " + "\n" : "") + + // (!conditions.chhkConditions.isHSwitchedToBullish ? "!conditions.chhkConditions.isHSwitchedToBullish && " + "\n" : "") + + // (!conditions.chhkConditions.isHBearish ? "!conditions.chhkConditions.isHBearish && " + "\n" : "") + + // (!conditions.chhkConditions.isHSwitchedToBearish ? "!conditions.chhkConditions.isHSwitchedToBearish && " + "\n" : "") + + // (!conditions.chhkConditions.isCloseOverHHigh ? "!conditions.chhkConditions.isCloseOverHHigh && " + "\n" : "") + + // (!conditions.chhkConditions.isCloseUnderHLow ? "!conditions.chhkConditions.isCloseUnderHLow && " + "\n" : "") + + "//" + "\n" + + "// XCHTD ..." + "\n" + + "//" + "\n" + + (conditions.chtdConditions.hasBullishPower ? "conditions.chtdConditions.hasBullishPower &&" + "\n" : "") + + (conditions.chtdConditions.hasBearishPower ? "conditions.chtdConditions.hasBearishPower &&" + "\n" : "") + + (conditions.chtdConditions.isBullishPowerUp ? "conditions.chtdConditions.isBullishPowerUp &&" + "\n" : "") + + (conditions.chtdConditions.isBearishPowerUp ? "conditions.chtdConditions.isBearishPowerUp &&" + "\n" : "") + + (conditions.chtdConditions.isBullishPowerIncreasing ? "conditions.chtdConditions.isBullishPowerIncreasing &&" + "\n" : "") + + (conditions.chtdConditions.isBullishPowerDecreasing ? "conditions.chtdConditions.isBullishPowerDecreasing &&" + "\n" : "") + + (conditions.chtdConditions.isBearishPowerIncreasing ? "conditions.chtdConditions.isBearishPowerIncreasing &&" + "\n" : "") + + (conditions.chtdConditions.isBearishPowerDecreasing ? "conditions.chtdConditions.isBearishPowerDecreasing &&" + "\n" : "") + + (conditions.chtdConditions.isCBullish ? "conditions.chtdConditions.isCBullish &&" + "\n" : "") + + (conditions.chtdConditions.isCBearish ? "conditions.chtdConditions.isCBearish &&" + "\n" : "") + + (conditions.chtdConditions.isCSwitchedToBullish ? "conditions.chtdConditions.isCSwitchedToBullish &&" + "\n" : "") + + (conditions.chtdConditions.isCSwitchedToBearish ? "conditions.chtdConditions.isCSwitchedToBearish &&" + "\n" : "") + + (conditions.chtdConditions.isSBullish ? "conditions.chtdConditions.isSBullish &&" + "\n" : "") + + (conditions.chtdConditions.isSBearish ? "conditions.chtdConditions.isSBearish &&" + "\n" : "") + + (conditions.chtdConditions.isSSwitchedToBullish ? "conditions.chtdConditions.isSSwitchedToBullish &&" + "\n" : "") + + (conditions.chtdConditions.isSSwitchedToBearish ? "conditions.chtdConditions.isSSwitchedToBearish &&" + "\n" : "") + + (conditions.chtdConditions.isMBullish ? "conditions.chtdConditions.isMBullish &&" + "\n" : "") + + (conditions.chtdConditions.isMBearish ? "conditions.chtdConditions.isMBearish &&" + "\n" : "") + + (conditions.chtdConditions.isMSwitchedToBullish ? "conditions.chtdConditions.isMSwitchedToBullish &&" + "\n" : "") + + (conditions.chtdConditions.isMSwitchedToBearish ? "conditions.chtdConditions.isMSwitchedToBearish &&" + "\n" : "") + + (conditions.chtdConditions.isLBullish ? "conditions.chtdConditions.isLBullish &&" + "\n" : "") + + (conditions.chtdConditions.isLBearish ? "conditions.chtdConditions.isLBearish &&" + "\n" : "") + + (conditions.chtdConditions.isLSwitchedToBullish ? "conditions.chtdConditions.isLSwitchedToBullish &&" + "\n" : "") + + (conditions.chtdConditions.isLSwitchedToBearish ? "conditions.chtdConditions.isLSwitchedToBearish &&" + "\n" : "") + + (conditions.chtdConditions.isHBullish ? "conditions.chtdConditions.isHBullish &&" + "\n" : "") + + (conditions.chtdConditions.isHBearish ? "conditions.chtdConditions.isHBearish &&" + "\n" : "") + + (conditions.chtdConditions.isHSwitchedToBullish ? "conditions.chtdConditions.isHSwitchedToBullish &&" + "\n" : "") + + (conditions.chtdConditions.isHSwitchedToBearish ? "conditions.chtdConditions.isHSwitchedToBearish &&" + "\n" : "") + + // "//" + "\n" + + // (!conditions.chtdConditions.hasBullishPower ? "!conditions.chtdConditions.hasBullishPower &&" + "\n" : "") + + // (!conditions.chtdConditions.hasBearishPower ? "!conditions.chtdConditions.hasBearishPower &&" + "\n" : "") + + // (!conditions.chtdConditions.isBullishPowerUp ? "!conditions.chtdConditions.isBullishPowerUp &&" + "\n" : "") + + // (!conditions.chtdConditions.isBearishPowerUp ? "!conditions.chtdConditions.isBearishPowerUp &&" + "\n" : "") + + // (!conditions.chtdConditions.isBullishPowerIncreasing ? "!conditions.chtdConditions.isBullishPowerIncreasing &&" + "\n" : "") + + // (!conditions.chtdConditions.isBullishPowerDecreasing ? "!conditions.chtdConditions.isBullishPowerDecreasing &&" + "\n" : "") + + // (!conditions.chtdConditions.isBearishPowerIncreasing ? "!conditions.chtdConditions.isBearishPowerIncreasing &&" + "\n" : "") + + // (!conditions.chtdConditions.isBearishPowerDecreasing ? "!conditions.chtdConditions.isBearishPowerDecreasing &&" + "\n" : "") + + // (!conditions.chtdConditions.isCBullish ? "!conditions.chtdConditions.isCBullish &&" + "\n" : "") + + // (!conditions.chtdConditions.isCBearish ? "!conditions.chtdConditions.isCBearish &&" + "\n" : "") + + // (!conditions.chtdConditions.isCSwitchedToBullish ? "!conditions.chtdConditions.isCSwitchedToBullish &&" + "\n" : "") + + // (!conditions.chtdConditions.isCSwitchedToBearish ? "!conditions.chtdConditions.isCSwitchedToBearish &&" + "\n" : "") + + // (!conditions.chtdConditions.isSBullish ? "!conditions.chtdConditions.isSBullish &&" + "\n" : "") + + // (!conditions.chtdConditions.isSBearish ? "!conditions.chtdConditions.isSBearish &&" + "\n" : "") + + // (!conditions.chtdConditions.isSSwitchedToBullish ? "!conditions.chtdConditions.isSSwitchedToBullish &&" + "\n" : "") + + // (!conditions.chtdConditions.isSSwitchedToBearish ? "!conditions.chtdConditions.isSSwitchedToBearish &&" + "\n" : "") + + // (!conditions.chtdConditions.isMBullish ? "!conditions.chtdConditions.isMBullish &&" + "\n" : "") + + // (!conditions.chtdConditions.isMBearish ? "!conditions.chtdConditions.isMBearish &&" + "\n" : "") + + // (!conditions.chtdConditions.isMSwitchedToBullish ? "!conditions.chtdConditions.isMSwitchedToBullish &&" + "\n" : "") + + // (!conditions.chtdConditions.isMSwitchedToBearish ? "!conditions.chtdConditions.isMSwitchedToBearish &&" + "\n" : "") + + // (!conditions.chtdConditions.isLBullish ? "!conditions.chtdConditions.isLBullish &&" + "\n" : "") + + // (!conditions.chtdConditions.isLBearish ? "!conditions.chtdConditions.isLBearish &&" + "\n" : "") + + // (!conditions.chtdConditions.isLSwitchedToBullish ? "!conditions.chtdConditions.isLSwitchedToBullish &&" + "\n" : "") + + // (!conditions.chtdConditions.isLSwitchedToBearish ? "!conditions.chtdConditions.isLSwitchedToBearish &&" + "\n" : "") + + // (!conditions.chtdConditions.isHBullish ? "!conditions.chtdConditions.isHBullish &&" + "\n" : "") + + // (!conditions.chtdConditions.isHBearish ? "!conditions.chtdConditions.isHBearish &&" + "\n" : "") + + // (!conditions.chtdConditions.isHSwitchedToBullish ? "!conditions.chtdConditions.isHSwitchedToBullish &&" + "\n" : "") + + // (!conditions.chtdConditions.isHSwitchedToBearish ? "!conditions.chtdConditions.isHSwitchedToBearish &&" + "\n" : "") + + "//" + "\n" + + "// XCHCHE ..." + "\n" + + "//" + "\n" + + (conditions.chcheConditions.hasBullishPower ? "conditions.chcheConditions.hasBullishPower &&" + "\n" : "") + + (conditions.chcheConditions.hasBearishPower ? "conditions.chcheConditions.hasBearishPower &&" + "\n" : "") + + (conditions.chcheConditions.isBullishPowerUp ? "conditions.chcheConditions.isBullishPowerUp &&" + "\n" : "") + + (conditions.chcheConditions.isBearishPowerUp ? "conditions.chcheConditions.isBearishPowerUp &&" + "\n" : "") + + (conditions.chcheConditions.isBullishPowerIncreasing ? "conditions.chcheConditions.isBullishPowerIncreasing &&" + "\n" : "") + + (conditions.chcheConditions.isBullishPowerDecreasing ? "conditions.chcheConditions.isBullishPowerDecreasing &&" + "\n" : "") + + (conditions.chcheConditions.isBearishPowerIncreasing ? "conditions.chcheConditions.isBearishPowerIncreasing &&" + "\n" : "") + + (conditions.chcheConditions.isBearishPowerDecreasing ? "conditions.chcheConditions.isBearishPowerDecreasing &&" + "\n" : "") + + (conditions.chcheConditions.isCBullish ? "conditions.chcheConditions.isCBullish &&" + "\n" : "") + + (conditions.chcheConditions.isCBearish ? "conditions.chcheConditions.isCBearish &&" + "\n" : "") + + (conditions.chcheConditions.isCStrongBullish ? "conditions.chcheConditions.isCStrongBullish &&" + "\n" : "") + + (conditions.chcheConditions.isCStrongBearish ? "conditions.chcheConditions.isCStrongBearish &&" + "\n" : "") + + (conditions.chcheConditions.isCSwitchedToBullish ? "conditions.chcheConditions.isCSwitchedToBullish &&" + "\n" : "") + + (conditions.chcheConditions.isCSwitchedToBearish ? "conditions.chcheConditions.isCSwitchedToBearish &&" + "\n" : "") + + (conditions.chcheConditions.isCStrongSwitchedToBullish ? "conditions.chcheConditions.isCStrongSwitchedToBullish &&" + "\n" : "") + + (conditions.chcheConditions.isCStrongSwitchedToBearish ? "conditions.chcheConditions.isCStrongSwitchedToBearish &&" + "\n" : "") + + (conditions.chcheConditions.isSBullish ? "conditions.chcheConditions.isSBullish &&" + "\n" : "") + + (conditions.chcheConditions.isSBearish ? "conditions.chcheConditions.isSBearish &&" + "\n" : "") + + (conditions.chcheConditions.isSStrongBullish ? "conditions.chcheConditions.isSStrongBullish &&" + "\n" : "") + + (conditions.chcheConditions.isSStrongBearish ? "conditions.chcheConditions.isSStrongBearish &&" + "\n" : "") + + (conditions.chcheConditions.isSSwitchedToBullish ? "conditions.chcheConditions.isSSwitchedToBullish &&" + "\n" : "") + + (conditions.chcheConditions.isSSwitchedToBearish ? "conditions.chcheConditions.isSSwitchedToBearish &&" + "\n" : "") + + (conditions.chcheConditions.isSStrongSwitchedToBullish ? "conditions.chcheConditions.isSStrongSwitchedToBullish &&" + "\n" : "") + + (conditions.chcheConditions.isSStrongSwitchedToBearish ? "conditions.chcheConditions.isSStrongSwitchedToBearish &&" + "\n" : "") + + (conditions.chcheConditions.isMBullish ? "conditions.chcheConditions.isMBullish &&" + "\n" : "") + + (conditions.chcheConditions.isMBearish ? "conditions.chcheConditions.isMBearish &&" + "\n" : "") + + (conditions.chcheConditions.isMStrongBullish ? "conditions.chcheConditions.isMStrongBullish &&" + "\n" : "") + + (conditions.chcheConditions.isMStrongBearish ? "conditions.chcheConditions.isMStrongBearish &&" + "\n" : "") + + (conditions.chcheConditions.isMSwitchedToBullish ? "conditions.chcheConditions.isMSwitchedToBullish &&" + "\n" : "") + + (conditions.chcheConditions.isMSwitchedToBearish ? "conditions.chcheConditions.isMSwitchedToBearish &&" + "\n" : "") + + (conditions.chcheConditions.isMStrongSwitchedToBullish ? "conditions.chcheConditions.isMStrongSwitchedToBullish &&" + "\n" : "") + + (conditions.chcheConditions.isMStrongSwitchedToBearish ? "conditions.chcheConditions.isMStrongSwitchedToBearish &&" + "\n" : "") + + (conditions.chcheConditions.isLBullish ? "conditions.chcheConditions.isLBullish &&" + "\n" : "") + + (conditions.chcheConditions.isLBearish ? "conditions.chcheConditions.isLBearish &&" + "\n" : "") + + (conditions.chcheConditions.isLStrongBullish ? "conditions.chcheConditions.isLStrongBullish &&" + "\n" : "") + + (conditions.chcheConditions.isLStrongBearish ? "conditions.chcheConditions.isLStrongBearish &&" + "\n" : "") + + (conditions.chcheConditions.isLSwitchedToBullish ? "conditions.chcheConditions.isLSwitchedToBullish &&" + "\n" : "") + + (conditions.chcheConditions.isLSwitchedToBearish ? "conditions.chcheConditions.isLSwitchedToBearish &&" + "\n" : "") + + (conditions.chcheConditions.isLStrongSwitchedToBullish ? "conditions.chcheConditions.isLStrongSwitchedToBullish &&" + "\n" : "") + + (conditions.chcheConditions.isLStrongSwitchedToBearish ? "conditions.chcheConditions.isLStrongSwitchedToBearish &&" + "\n" : "") + + (conditions.chcheConditions.isHBullish ? "conditions.chcheConditions.isHBullish &&" + "\n" : "") + + (conditions.chcheConditions.isHBearish ? "conditions.chcheConditions.isHBearish &&" + "\n" : "") + + (conditions.chcheConditions.isHStrongBullish ? "conditions.chcheConditions.isHStrongBullish &&" + "\n" : "") + + (conditions.chcheConditions.isHStrongBearish ? "conditions.chcheConditions.isHStrongBearish &&" + "\n" : "") + + (conditions.chcheConditions.isHSwitchedToBullish ? "conditions.chcheConditions.isHSwitchedToBullish &&" + "\n" : "") + + (conditions.chcheConditions.isHSwitchedToBearish ? "conditions.chcheConditions.isHSwitchedToBearish &&" + "\n" : "") + + (conditions.chcheConditions.isHStrongSwitchedToBullish ? "conditions.chcheConditions.isHStrongSwitchedToBullish &&" + "\n" : "") + + (conditions.chcheConditions.isHStrongSwitchedToBearish ? "conditions.chcheConditions.isHStrongSwitchedToBearish &&" + "\n" : "") + + // "//" + "\n" + + // (!conditions.chcheConditions.hasBullishPower ? "!conditions.chcheConditions.hasBullishPower &&" + "\n" : "") + + // (!conditions.chcheConditions.hasBearishPower ? "!conditions.chcheConditions.hasBearishPower &&" + "\n" : "") + + // (!conditions.chcheConditions.isBullishPowerUp ? "!conditions.chcheConditions.isBullishPowerUp &&" + "\n" : "") + + // (!conditions.chcheConditions.isBearishPowerUp ? "!conditions.chcheConditions.isBearishPowerUp &&" + "\n" : "") + + // (!conditions.chcheConditions.isBullishPowerIncreasing ? "!conditions.chcheConditions.isBullishPowerIncreasing &&" + "\n" : "") + + // (!conditions.chcheConditions.isBullishPowerDecreasing ? "!conditions.chcheConditions.isBullishPowerDecreasing &&" + "\n" : "") + + // (!conditions.chcheConditions.isBearishPowerIncreasing ? "!conditions.chcheConditions.isBearishPowerIncreasing &&" + "\n" : "") + + // (!conditions.chcheConditions.isBearishPowerDecreasing ? "!conditions.chcheConditions.isBearishPowerDecreasing &&" + "\n" : "") + + // (!conditions.chcheConditions.isCBullish ? "!conditions.chcheConditions.isCBullish &&" + "\n" : "") + + // (!conditions.chcheConditions.isCBearish ? "!conditions.chcheConditions.isCBearish &&" + "\n" : "") + + // (!conditions.chcheConditions.isCStrongBullish ? "!conditions.chcheConditions.isCStrongBullish &&" + "\n" : "") + + // (!conditions.chcheConditions.isCStrongBearish ? "!conditions.chcheConditions.isCStrongBearish &&" + "\n" : "") + + // (!conditions.chcheConditions.isCSwitchedToBullish ? "!conditions.chcheConditions.isCSwitchedToBullish &&" + "\n" : "") + + // (!conditions.chcheConditions.isCSwitchedToBearish ? "!conditions.chcheConditions.isCSwitchedToBearish &&" + "\n" : "") + + // (!conditions.chcheConditions.isCStrongSwitchedToBullish ? "!conditions.chcheConditions.isCStrongSwitchedToBullish &&" + "\n" : "") + + // (!conditions.chcheConditions.isCStrongSwitchedToBearish ? "!conditions.chcheConditions.isCStrongSwitchedToBearish &&" + "\n" : "") + + // (!conditions.chcheConditions.isSBullish ? "!conditions.chcheConditions.isSBullish &&" + "\n" : "") + + // (!conditions.chcheConditions.isSBearish ? "!conditions.chcheConditions.isSBearish &&" + "\n" : "") + + // (!conditions.chcheConditions.isSStrongBullish ? "!conditions.chcheConditions.isSStrongBullish &&" + "\n" : "") + + // (!conditions.chcheConditions.isSStrongBearish ? "!conditions.chcheConditions.isSStrongBearish &&" + "\n" : "") + + // (!conditions.chcheConditions.isSSwitchedToBullish ? "!conditions.chcheConditions.isSSwitchedToBullish &&" + "\n" : "") + + // (!conditions.chcheConditions.isSSwitchedToBearish ? "!conditions.chcheConditions.isSSwitchedToBearish &&" + "\n" : "") + + // (!conditions.chcheConditions.isSStrongSwitchedToBullish ? "!conditions.chcheConditions.isSStrongSwitchedToBullish &&" + "\n" : "") + + // (!conditions.chcheConditions.isSStrongSwitchedToBearish ? "!conditions.chcheConditions.isSStrongSwitchedToBearish &&" + "\n" : "") + + // (!conditions.chcheConditions.isMBullish ? "!conditions.chcheConditions.isMBullish &&" + "\n" : "") + + // (!conditions.chcheConditions.isMBearish ? "!conditions.chcheConditions.isMBearish &&" + "\n" : "") + + // (!conditions.chcheConditions.isMStrongBullish ? "!conditions.chcheConditions.isMStrongBullish &&" + "\n" : "") + + // (!conditions.chcheConditions.isMStrongBearish ? "!conditions.chcheConditions.isMStrongBearish &&" + "\n" : "") + + // (!conditions.chcheConditions.isMSwitchedToBullish ? "!conditions.chcheConditions.isMSwitchedToBullish &&" + "\n" : "") + + // (!conditions.chcheConditions.isMSwitchedToBearish ? "!conditions.chcheConditions.isMSwitchedToBearish &&" + "\n" : "") + + // (!conditions.chcheConditions.isMStrongSwitchedToBullish ? "!conditions.chcheConditions.isMStrongSwitchedToBullish &&" + "\n" : "") + + // (!conditions.chcheConditions.isMStrongSwitchedToBearish ? "!conditions.chcheConditions.isMStrongSwitchedToBearish &&" + "\n" : "") + + // (!conditions.chcheConditions.isLBullish ? "!conditions.chcheConditions.isLBullish &&" + "\n" : "") + + // (!conditions.chcheConditions.isLBearish ? "!conditions.chcheConditions.isLBearish &&" + "\n" : "") + + // (!conditions.chcheConditions.isLStrongBullish ? "!conditions.chcheConditions.isLStrongBullish &&" + "\n" : "") + + // (!conditions.chcheConditions.isLStrongBearish ? "!conditions.chcheConditions.isLStrongBearish &&" + "\n" : "") + + // (!conditions.chcheConditions.isLSwitchedToBullish ? "!conditions.chcheConditions.isLSwitchedToBullish &&" + "\n" : "") + + // (!conditions.chcheConditions.isLSwitchedToBearish ? "!conditions.chcheConditions.isLSwitchedToBearish &&" + "\n" : "") + + // (!conditions.chcheConditions.isLStrongSwitchedToBullish ? "!conditions.chcheConditions.isLStrongSwitchedToBullish &&" + "\n" : "") + + // (!conditions.chcheConditions.isLStrongSwitchedToBearish ? "!conditions.chcheConditions.isLStrongSwitchedToBearish &&" + "\n" : "") + + // (!conditions.chcheConditions.isHBullish ? "!conditions.chcheConditions.isHBullish &&" + "\n" : "") + + // (!conditions.chcheConditions.isHBearish ? "!conditions.chcheConditions.isHBearish &&" + "\n" : "") + + // (!conditions.chcheConditions.isHStrongBullish ? "!conditions.chcheConditions.isHStrongBullish &&" + "\n" : "") + + // (!conditions.chcheConditions.isHStrongBearish ? "!conditions.chcheConditions.isHStrongBearish &&" + "\n" : "") + + // (!conditions.chcheConditions.isHSwitchedToBullish ? "!conditions.chcheConditions.isHSwitchedToBullish &&" + "\n" : "") + + // (!conditions.chcheConditions.isHSwitchedToBearish ? "!conditions.chcheConditions.isHSwitchedToBearish &&" + "\n" : "") + + // (!conditions.chcheConditions.isHStrongSwitchedToBullish ? "!conditions.chcheConditions.isHStrongSwitchedToBullish &&" + "\n" : "") + + // (!conditions.chcheConditions.isHStrongSwitchedToBearish ? "!conditions.chcheConditions.isHStrongSwitchedToBearish &&" + "\n" : "") + + "//" + "\n" + + "// XCHSTR ..." + "\n" + + "//" + "\n" + + (conditions.chstrConditions.hasBullishPower ? "conditions.chstrConditions.hasBullishPower &&" + "\n" : "") + + (conditions.chstrConditions.hasBearishPower ? "conditions.chstrConditions.hasBearishPower &&" + "\n" : "") + + (conditions.chstrConditions.isBullishPowerUp ? "conditions.chstrConditions.isBullishPowerUp &&" + "\n" : "") + + (conditions.chstrConditions.isBearishPowerUp ? "conditions.chstrConditions.isBearishPowerUp &&" + "\n" : "") + + (conditions.chstrConditions.isBullishPowerIncreasing ? "conditions.chstrConditions.isBullishPowerIncreasing &&" + "\n" : "") + + (conditions.chstrConditions.isBullishPowerDecreasing ? "conditions.chstrConditions.isBullishPowerDecreasing &&" + "\n" : "") + + (conditions.chstrConditions.isBearishPowerIncreasing ? "conditions.chstrConditions.isBearishPowerIncreasing &&" + "\n" : "") + + (conditions.chstrConditions.isBearishPowerDecreasing ? "conditions.chstrConditions.isBearishPowerDecreasing &&" + "\n" : "") + + (conditions.chstrConditions.isCBullish ? "conditions.chstrConditions.isCBullish &&" + "\n" : "") + + (conditions.chstrConditions.isCBearish ? "conditions.chstrConditions.isCBearish &&" + "\n" : "") + + (conditions.chstrConditions.isCSwitchedToBullish ? "conditions.chstrConditions.isCSwitchedToBullish &&" + "\n" : "") + + (conditions.chstrConditions.isCSwitchedToBearish ? "conditions.chstrConditions.isCSwitchedToBearish &&" + "\n" : "") + + (conditions.chstrConditions.isSBullish ? "conditions.chstrConditions.isSBullish &&" + "\n" : "") + + (conditions.chstrConditions.isSBearish ? "conditions.chstrConditions.isSBearish &&" + "\n" : "") + + (conditions.chstrConditions.isSSwitchedToBullish ? "conditions.chstrConditions.isSSwitchedToBullish &&" + "\n" : "") + + (conditions.chstrConditions.isSSwitchedToBearish ? "conditions.chstrConditions.isSSwitchedToBearish &&" + "\n" : "") + + (conditions.chstrConditions.isMBullish ? "conditions.chstrConditions.isMBullish &&" + "\n" : "") + + (conditions.chstrConditions.isMBearish ? "conditions.chstrConditions.isMBearish &&" + "\n" : "") + + (conditions.chstrConditions.isMSwitchedToBullish ? "conditions.chstrConditions.isMSwitchedToBullish &&" + "\n" : "") + + (conditions.chstrConditions.isMSwitchedToBearish ? "conditions.chstrConditions.isMSwitchedToBearish &&" + "\n" : "") + + (conditions.chstrConditions.isLBullish ? "conditions.chstrConditions.isLBullish &&" + "\n" : "") + + (conditions.chstrConditions.isLBearish ? "conditions.chstrConditions.isLBearish &&" + "\n" : "") + + (conditions.chstrConditions.isLSwitchedToBullish ? "conditions.chstrConditions.isLSwitchedToBullish &&" + "\n" : "") + + (conditions.chstrConditions.isLSwitchedToBearish ? "conditions.chstrConditions.isLSwitchedToBearish &&" + "\n" : "") + + (conditions.chstrConditions.isHBullish ? "conditions.chstrConditions.isHBullish &&" + "\n" : "") + + (conditions.chstrConditions.isHBearish ? "conditions.chstrConditions.isHBearish &&" + "\n" : "") + + (conditions.chstrConditions.isHSwitchedToBullish ? "conditions.chstrConditions.isHSwitchedToBullish &&" + "\n" : "") + + (conditions.chstrConditions.isHSwitchedToBearish ? "conditions.chstrConditions.isHSwitchedToBearish &&" + "\n" : "") + + // "//" + "\n" + + // (!conditions.chstrConditions.hasBullishPower ? "!conditions.chstrConditions.hasBullishPower &&" + "\n" : "") + + // (!conditions.chstrConditions.hasBearishPower ? "!conditions.chstrConditions.hasBearishPower &&" + "\n" : "") + + // (!conditions.chstrConditions.isBullishPowerUp ? "!conditions.chstrConditions.isBullishPowerUp &&" + "\n" : "") + + // (!conditions.chstrConditions.isBearishPowerUp ? "!conditions.chstrConditions.isBearishPowerUp &&" + "\n" : "") + + // (!conditions.chstrConditions.isBullishPowerIncreasing ? "!conditions.chstrConditions.isBullishPowerIncreasing &&" + "\n" : "") + + // (!conditions.chstrConditions.isBullishPowerDecreasing ? "!conditions.chstrConditions.isBullishPowerDecreasing &&" + "\n" : "") + + // (!conditions.chstrConditions.isBearishPowerIncreasing ? "!conditions.chstrConditions.isBearishPowerIncreasing &&" + "\n" : "") + + // (!conditions.chstrConditions.isBearishPowerDecreasing ? "!conditions.chstrConditions.isBearishPowerDecreasing &&" + "\n" : "") + + // (!conditions.chstrConditions.isCBullish ? "!conditions.chstrConditions.isCBullish &&" + "\n" : "") + + // (!conditions.chstrConditions.isCBearish ? "!conditions.chstrConditions.isCBearish &&" + "\n" : "") + + // (!conditions.chstrConditions.isCSwitchedToBullish ? "!conditions.chstrConditions.isCSwitchedToBullish &&" + "\n" : "") + + // (!conditions.chstrConditions.isCSwitchedToBearish ? "!conditions.chstrConditions.isCSwitchedToBearish &&" + "\n" : "") + + // (!conditions.chstrConditions.isSBullish ? "!conditions.chstrConditions.isSBullish &&" + "\n" : "") + + // (!conditions.chstrConditions.isSBearish ? "!conditions.chstrConditions.isSBearish &&" + "\n" : "") + + // (!conditions.chstrConditions.isSSwitchedToBullish ? "!conditions.chstrConditions.isSSwitchedToBullish &&" + "\n" : "") + + // (!conditions.chstrConditions.isSSwitchedToBearish ? "!conditions.chstrConditions.isSSwitchedToBearish &&" + "\n" : "") + + // (!conditions.chstrConditions.isMBullish ? "!conditions.chstrConditions.isMBullish &&" + "\n" : "") + + // (!conditions.chstrConditions.isMBearish ? "!conditions.chstrConditions.isMBearish &&" + "\n" : "") + + // (!conditions.chstrConditions.isMSwitchedToBullish ? "!conditions.chstrConditions.isMSwitchedToBullish &&" + "\n" : "") + + // (!conditions.chstrConditions.isMSwitchedToBearish ? "!conditions.chstrConditions.isMSwitchedToBearish &&" + "\n" : "") + + // (!conditions.chstrConditions.isLBullish ? "!conditions.chstrConditions.isLBullish &&" + "\n" : "") + + // (!conditions.chstrConditions.isLBearish ? "!conditions.chstrConditions.isLBearish &&" + "\n" : "") + + // (!conditions.chstrConditions.isLSwitchedToBullish ? "!conditions.chstrConditions.isLSwitchedToBullish &&" + "\n" : "") + + // (!conditions.chstrConditions.isLSwitchedToBearish ? "!conditions.chstrConditions.isLSwitchedToBearish &&" + "\n" : "") + + // (!conditions.chstrConditions.isHBullish ? "!conditions.chstrConditions.isHBullish &&" + "\n" : "") + + // (!conditions.chstrConditions.isHBearish ? "!conditions.chstrConditions.isHBearish &&" + "\n" : "") + + // (!conditions.chstrConditions.isHSwitchedToBullish ? "!conditions.chstrConditions.isHSwitchedToBullish &&" + "\n" : "") + + // (!conditions.chstrConditions.isHSwitchedToBearish ? "!conditions.chstrConditions.isHSwitchedToBearish &&" + "\n" : "") + + "//" + "\n" + + "// XCHVLM ..." + "\n" + + "//" + "\n" + + (conditions.chvlmConditions.hasBullishPower ? "conditions.chvlmConditions.hasBullishPower &&" + "\n" : "") + + (conditions.chvlmConditions.hasBearishPower ? "conditions.chvlmConditions.hasBearishPower &&" + "\n" : "") + + (conditions.chvlmConditions.isBullishPowerUp ? "conditions.chvlmConditions.isBullishPowerUp &&" + "\n" : "") + + (conditions.chvlmConditions.isBearishPowerUp ? "conditions.chvlmConditions.isBearishPowerUp &&" + "\n" : "") + + (conditions.chvlmConditions.isBullishPowerIncreasing ? "conditions.chvlmConditions.isBullishPowerIncreasing &&" + "\n" : "") + + (conditions.chvlmConditions.isBullishPowerDecreasing ? "conditions.chvlmConditions.isBullishPowerDecreasing &&" + "\n" : "") + + (conditions.chvlmConditions.isBearishPowerIncreasing ? "conditions.chvlmConditions.isBearishPowerIncreasing &&" + "\n" : "") + + (conditions.chvlmConditions.isBearishPowerDecreasing ? "conditions.chvlmConditions.isBearishPowerDecreasing &&" + "\n" : "") + + (conditions.chvlmConditions.isCBullish ? "conditions.chvlmConditions.isCBullish &&" + "\n" : "") + + (conditions.chvlmConditions.isCBearish ? "conditions.chvlmConditions.isCBearish &&" + "\n" : "") + + (conditions.chvlmConditions.isCSwitchedToBullish ? "conditions.chvlmConditions.isCSwitchedToBullish &&" + "\n" : "") + + (conditions.chvlmConditions.isCSwitchedToBearish ? "conditions.chvlmConditions.isCSwitchedToBearish &&" + "\n" : "") + + (conditions.chvlmConditions.isSBullish ? "conditions.chvlmConditions.isSBullish &&" + "\n" : "") + + (conditions.chvlmConditions.isSBearish ? "conditions.chvlmConditions.isSBearish &&" + "\n" : "") + + (conditions.chvlmConditions.isSSwitchedToBullish ? "conditions.chvlmConditions.isSSwitchedToBullish &&" + "\n" : "") + + (conditions.chvlmConditions.isSSwitchedToBearish ? "conditions.chvlmConditions.isSSwitchedToBearish &&" + "\n" : "") + + (conditions.chvlmConditions.isMBullish ? "conditions.chvlmConditions.isMBullish &&" + "\n" : "") + + (conditions.chvlmConditions.isMBearish ? "conditions.chvlmConditions.isMBearish &&" + "\n" : "") + + (conditions.chvlmConditions.isMSwitchedToBullish ? "conditions.chvlmConditions.isMSwitchedToBullish &&" + "\n" : "") + + (conditions.chvlmConditions.isMSwitchedToBearish ? "conditions.chvlmConditions.isMSwitchedToBearish &&" + "\n" : "") + + (conditions.chvlmConditions.isLBullish ? "conditions.chvlmConditions.isLBullish &&" + "\n" : "") + + (conditions.chvlmConditions.isLBearish ? "conditions.chvlmConditions.isLBearish &&" + "\n" : "") + + (conditions.chvlmConditions.isLSwitchedToBullish ? "conditions.chvlmConditions.isLSwitchedToBullish &&" + "\n" : "") + + (conditions.chvlmConditions.isLSwitchedToBearish ? "conditions.chvlmConditions.isLSwitchedToBearish &&" + "\n" : "") + + (conditions.chvlmConditions.isHBullish ? "conditions.chvlmConditions.isHBullish &&" + "\n" : "") + + (conditions.chvlmConditions.isHBearish ? "conditions.chvlmConditions.isHBearish &&" + "\n" : "") + + (conditions.chvlmConditions.isHSwitchedToBullish ? "conditions.chvlmConditions.isHSwitchedToBullish &&" + "\n" : "") + + (conditions.chvlmConditions.isHSwitchedToBearish ? "conditions.chvlmConditions.isHSwitchedToBearish &&" + "\n" : "") + + // "//" + "\n" + + // (!conditions.chvlmConditions.hasBullishPower ? "!conditions.chvlmConditions.hasBullishPower &&" + "\n" : "") + + // (!conditions.chvlmConditions.hasBearishPower ? "!conditions.chvlmConditions.hasBearishPower &&" + "\n" : "") + + // (!conditions.chvlmConditions.isBullishPowerUp ? "!conditions.chvlmConditions.isBullishPowerUp &&" + "\n" : "") + + // (!conditions.chvlmConditions.isBearishPowerUp ? "!conditions.chvlmConditions.isBearishPowerUp &&" + "\n" : "") + + // (!conditions.chvlmConditions.isBullishPowerIncreasing ? "!conditions.chvlmConditions.isBullishPowerIncreasing &&" + "\n" : "") + + // (!conditions.chvlmConditions.isBullishPowerDecreasing ? "!conditions.chvlmConditions.isBullishPowerDecreasing &&" + "\n" : "") + + // (!conditions.chvlmConditions.isBearishPowerIncreasing ? "!conditions.chvlmConditions.isBearishPowerIncreasing &&" + "\n" : "") + + // (!conditions.chvlmConditions.isBearishPowerDecreasing ? "!conditions.chvlmConditions.isBearishPowerDecreasing &&" + "\n" : "") + + // (!conditions.chvlmConditions.isCBullish ? "!conditions.chvlmConditions.isCBullish &&" + "\n" : "") + + // (!conditions.chvlmConditions.isCBearish ? "!conditions.chvlmConditions.isCBearish &&" + "\n" : "") + + // (!conditions.chvlmConditions.isCSwitchedToBullish ? "!conditions.chvlmConditions.isCSwitchedToBullish &&" + "\n" : "") + + // (!conditions.chvlmConditions.isCSwitchedToBearish ? "!conditions.chvlmConditions.isCSwitchedToBearish &&" + "\n" : "") + + // (!conditions.chvlmConditions.isSBullish ? "!conditions.chvlmConditions.isSBullish &&" + "\n" : "") + + // (!conditions.chvlmConditions.isSBearish ? "!conditions.chvlmConditions.isSBearish &&" + "\n" : "") + + // (!conditions.chvlmConditions.isSSwitchedToBullish ? "!conditions.chvlmConditions.isSSwitchedToBullish &&" + "\n" : "") + + // (!conditions.chvlmConditions.isSSwitchedToBearish ? "!conditions.chvlmConditions.isSSwitchedToBearish &&" + "\n" : "") + + // (!conditions.chvlmConditions.isMBullish ? "!conditions.chvlmConditions.isMBullish &&" + "\n" : "") + + // (!conditions.chvlmConditions.isMBearish ? "!conditions.chvlmConditions.isMBearish &&" + "\n" : "") + + // (!conditions.chvlmConditions.isMSwitchedToBullish ? "!conditions.chvlmConditions.isMSwitchedToBullish &&" + "\n" : "") + + // (!conditions.chvlmConditions.isMSwitchedToBearish ? "!conditions.chvlmConditions.isMSwitchedToBearish &&" + "\n" : "") + + // (!conditions.chvlmConditions.isLBullish ? "!conditions.chvlmConditions.isLBullish &&" + "\n" : "") + + // (!conditions.chvlmConditions.isLBearish ? "!conditions.chvlmConditions.isLBearish &&" + "\n" : "") + + // (!conditions.chvlmConditions.isLSwitchedToBullish ? "!conditions.chvlmConditions.isLSwitchedToBullish &&" + "\n" : "") + + // (!conditions.chvlmConditions.isLSwitchedToBearish ? "!conditions.chvlmConditions.isLSwitchedToBearish &&" + "\n" : "") + + // (!conditions.chvlmConditions.isHBullish ? "!conditions.chvlmConditions.isHBullish &&" + "\n" : "") + + // (!conditions.chvlmConditions.isHBearish ? "!conditions.chvlmConditions.isHBearish &&" + "\n" : "") + + // (!conditions.chvlmConditions.isHSwitchedToBullish ? "!conditions.chvlmConditions.isHSwitchedToBullish &&" + "\n" : "") + + // (!conditions.chvlmConditions.isHSwitchedToBearish ? "!conditions.chvlmConditions.isHSwitchedToBearish &&" + "\n" : "") + + "//" + "\n" + + "// XCHVWAP ..." + "\n" + + "//" + "\n" + + (conditions.chvwapConditions.hasBullishPower ? "conditions.chvwapConditions.hasBullishPower &&" + "\n" : "") + + (conditions.chvwapConditions.hasBearishPower ? "conditions.chvwapConditions.hasBearishPower &&" + "\n" : "") + + (conditions.chvwapConditions.isBullishPowerUp ? "conditions.chvwapConditions.isBullishPowerUp &&" + "\n" : "") + + (conditions.chvwapConditions.isBearishPowerUp ? "conditions.chvwapConditions.isBearishPowerUp &&" + "\n" : "") + + (conditions.chvwapConditions.isBullishPowerIncreasing ? "conditions.chvwapConditions.isBullishPowerIncreasing &&" + "\n" : "") + + (conditions.chvwapConditions.isBullishPowerDecreasing ? "conditions.chvwapConditions.isBullishPowerDecreasing &&" + "\n" : "") + + (conditions.chvwapConditions.isBearishPowerIncreasing ? "conditions.chvwapConditions.isBearishPowerIncreasing &&" + "\n" : "") + + (conditions.chvwapConditions.isBearishPowerDecreasing ? "conditions.chvwapConditions.isBearishPowerDecreasing &&" + "\n" : "") + + (conditions.chvwapConditions.isSBullish ? "conditions.chvwapConditions.isSBullish &&" + "\n" : "") + + (conditions.chvwapConditions.isSBearish ? "conditions.chvwapConditions.isSBearish &&" + "\n" : "") + + (conditions.chvwapConditions.isSSwitchedToBullish ? "conditions.chvwapConditions.isSSwitchedToBullish &&" + "\n" : "") + + (conditions.chvwapConditions.isSSwitchedToBearish ? "conditions.chvwapConditions.isSSwitchedToBearish &&" + "\n" : "") + + (conditions.chvwapConditions.isMBullish ? "conditions.chvwapConditions.isMBullish &&" + "\n" : "") + + (conditions.chvwapConditions.isMBearish ? "conditions.chvwapConditions.isMBearish &&" + "\n" : "") + + (conditions.chvwapConditions.isMSwitchedToBullish ? "conditions.chvwapConditions.isMSwitchedToBullish &&" + "\n" : "") + + (conditions.chvwapConditions.isMSwitchedToBearish ? "conditions.chvwapConditions.isMSwitchedToBearish &&" + "\n" : "") + + (conditions.chvwapConditions.isLBullish ? "conditions.chvwapConditions.isLBullish &&" + "\n" : "") + + (conditions.chvwapConditions.isLBearish ? "conditions.chvwapConditions.isLBearish &&" + "\n" : "") + + (conditions.chvwapConditions.isLSwitchedToBullish ? "conditions.chvwapConditions.isLSwitchedToBullish &&" + "\n" : "") + + (conditions.chvwapConditions.isLSwitchedToBearish ? "conditions.chvwapConditions.isLSwitchedToBearish &&" + "\n" : "") + + (conditions.chvwapConditions.isHBullish ? "conditions.chvwapConditions.isHBullish &&" + "\n" : "") + + (conditions.chvwapConditions.isHBearish ? "conditions.chvwapConditions.isHBearish &&" + "\n" : "") + + (conditions.chvwapConditions.isHSwitchedToBullish ? "conditions.chvwapConditions.isHSwitchedToBullish &&" + "\n" : "") + + (conditions.chvwapConditions.isHSwitchedToBearish ? "conditions.chvwapConditions.isHSwitchedToBearish &&" + "\n" : "") + + // "//" + "\n" + + // (!conditions.chvwapConditions.hasBullishPower ? "!conditions.chvwapConditions.hasBullishPower &&" + "\n" : "") + + // (!conditions.chvwapConditions.hasBearishPower ? "!conditions.chvwapConditions.hasBearishPower &&" + "\n" : "") + + // (!conditions.chvwapConditions.isBullishPowerUp ? "!conditions.chvwapConditions.isBullishPowerUp &&" + "\n" : "") + + // (!conditions.chvwapConditions.isBearishPowerUp ? "!conditions.chvwapConditions.isBearishPowerUp &&" + "\n" : "") + + // (!conditions.chvwapConditions.isBullishPowerIncreasing ? "!conditions.chvwapConditions.isBullishPowerIncreasing &&" + "\n" : "") + + // (!conditions.chvwapConditions.isBullishPowerDecreasing ? "!conditions.chvwapConditions.isBullishPowerDecreasing &&" + "\n" : "") + + // (!conditions.chvwapConditions.isBearishPowerIncreasing ? "!conditions.chvwapConditions.isBearishPowerIncreasing &&" + "\n" : "") + + // (!conditions.chvwapConditions.isBearishPowerDecreasing ? "!conditions.chvwapConditions.isBearishPowerDecreasing &&" + "\n" : "") + + // (!conditions.chvwapConditions.isSBullish ? "!conditions.chvwapConditions.isSBullish &&" + "\n" : "") + + // (!conditions.chvwapConditions.isSBearish ? "!conditions.chvwapConditions.isSBearish &&" + "\n" : "") + + // (!conditions.chvwapConditions.isSSwitchedToBullish ? "!conditions.chvwapConditions.isSSwitchedToBullish &&" + "\n" : "") + + // (!conditions.chvwapConditions.isSSwitchedToBearish ? "!conditions.chvwapConditions.isSSwitchedToBearish &&" + "\n" : "") + + // (!conditions.chvwapConditions.isMBullish ? "!conditions.chvwapConditions.isMBullish &&" + "\n" : "") + + // (!conditions.chvwapConditions.isMBearish ? "!conditions.chvwapConditions.isMBearish &&" + "\n" : "") + + // (!conditions.chvwapConditions.isMSwitchedToBullish ? "!conditions.chvwapConditions.isMSwitchedToBullish &&" + "\n" : "") + + // (!conditions.chvwapConditions.isMSwitchedToBearish ? "!conditions.chvwapConditions.isMSwitchedToBearish &&" + "\n" : "") + + // (!conditions.chvwapConditions.isLBullish ? "!conditions.chvwapConditions.isLBullish &&" + "\n" : "") + + // (!conditions.chvwapConditions.isLBearish ? "!conditions.chvwapConditions.isLBearish &&" + "\n" : "") + + // (!conditions.chvwapConditions.isLSwitchedToBullish ? "!conditions.chvwapConditions.isLSwitchedToBullish &&" + "\n" : "") + + // (!conditions.chvwapConditions.isLSwitchedToBearish ? "!conditions.chvwapConditions.isLSwitchedToBearish &&" + "\n" : "") + + // (!conditions.chvwapConditions.isHBullish ? "!conditions.chvwapConditions.isHBullish &&" + "\n" : "") + + // (!conditions.chvwapConditions.isHBearish ? "!conditions.chvwapConditions.isHBearish &&" + "\n" : "") + + // (!conditions.chvwapConditions.isHSwitchedToBullish ? "!conditions.chvwapConditions.isHSwitchedToBullish &&" + "\n" : "") + + // (!conditions.chvwapConditions.isHSwitchedToBearish ? "!conditions.chvwapConditions.isHSwitchedToBearish &&" + "\n" : "") + + "//" + "\n" + + ")" + "\n" + "//" + + "\n" + + "||" + "\n" + + "//"; + + // + return result; + } + + // + bool IsFiltered( + XSignal &signal, // Provided Signal + XCHStrategyConditions &conditions, // Market Conditions + bool force = false // + ) + { + // + bool result = false; + + // + // Validate Args ... + if (!signal.IsValid() || !conditions.IsValid()) + { + // + result = true; + return result; + } + + // + bool isLong = IsLong(signal.type); + + // + result = + // + isLong + ? IsLongFiltered( + signal, + conditions, + force // + ) + : IsShortFiltered( + signal, + conditions, + force // + ) + // + ; + + // + return result; + } + + // + // Filter Long Signals ... + bool IsLongFiltered( + XSignal &signal, + XCHStrategyConditions &conditions, + bool force = false // + ) + { + // + bool result = false; + + // + bool isEURUSD = _symbolParser.IsEURUSD(signal.symbol); + bool isGBPUSD = _symbolParser.IsGBPUSD(signal.symbol); + bool isEURGBP = _symbolParser.IsEURGBP(signal.symbol); + bool isXAUUSD = _symbolParser.IsXAUUSD(signal.symbol); + bool isUSDJPY = _symbolParser.IsUSDJPY(signal.symbol); + bool isEURJPY = _symbolParser.IsEURJPY(signal.symbol); + bool isUSDCHF = _symbolParser.IsUSDCHF(signal.symbol); + bool isEURCHF = _symbolParser.IsEURCHF(signal.symbol); + bool isAUDUSD = _symbolParser.IsAUDUSD(signal.symbol); + bool isNZDUSD = _symbolParser.IsNZDUSD(signal.symbol); + bool isUSDCAD = _symbolParser.IsUSDCAD(signal.symbol); + bool isEURCAD = _symbolParser.IsEURCAD(signal.symbol); + bool isDowJones = _symbolParser.IsDowJones(signal.symbol); + + // + string market = _account.GetCompany(); + bool isAMarkets = _marketParser.IsAMarkets(market); + + // + if (!force) + { + // + if (isEURUSD) + { + // + result = + _eurusdLongParser.IsFiltered(conditions); + } + else if (isGBPUSD) + { + // + result = + _gbpusdLongParser.IsFiltered(conditions); + } + else if (isEURGBP) + { + // + result = + _eurgbpLongParser.IsFiltered(conditions); + } + else if (isUSDJPY) + { + // + result = + _usdjpyLongParser.IsFiltered(conditions); + } + else if (isEURJPY) + { + // + result = + _eurjpyLongParser.IsFiltered(conditions); + } + else if (isUSDCHF) + { + // + result = + _usdchfLongParser.IsFiltered(conditions); + } + else if (isEURCHF) + { + // + result = + _eurchfLongParser.IsFiltered(conditions); + } + else if (isXAUUSD) + { + // + result = + _xauusdLongParser.IsFiltered(conditions); + } + else if (isAUDUSD) + { + // + result = + _audusdLongParser.IsFiltered(conditions); + } + else if (isNZDUSD) + { + // + result = + _nzdusdLongParser.IsFiltered(conditions); + } + else if (isUSDCAD) + { + // + result = + _usdcadLongParser.IsFiltered(conditions); + } + else if (isEURCAD) + { + // + result = + _eurcadLongParser.IsFiltered(conditions); + } + else if (isDowJones) + { + // + result = + _dowjonesLongParser.IsFiltered(conditions); + } + } + else + { + // + result = + // + _eurusdLongParser.IsFiltered(conditions) + // + || + // + _gbpusdLongParser.IsFiltered(conditions) + // + || + // + _eurgbpLongParser.IsFiltered(conditions) + // + || + // + _usdjpyLongParser.IsFiltered(conditions) + // + || + // + _eurjpyLongParser.IsFiltered(conditions) + // + || + // + _usdchfLongParser.IsFiltered(conditions) + // + || + // + _eurchfLongParser.IsFiltered(conditions) + // + || + // + _xauusdLongParser.IsFiltered(conditions) + // + || + // + _audusdLongParser.IsFiltered(conditions) + // + || + // + _nzdusdLongParser.IsFiltered(conditions) + // + || + // + _usdcadLongParser.IsFiltered(conditions) + // + || + // + _eurcadLongParser.IsFiltered(conditions) + // + || + // + _dowjonesLongParser.IsFiltered(conditions) + // + ; + } + + // + return result; + } + + // + // Filter Short Signals ... + bool IsShortFiltered( + XSignal &signal, + XCHStrategyConditions &conditions, + bool force = false // + ) + { + // + bool result = false; + + // + bool isEURUSD = _symbolParser.IsEURUSD(signal.symbol); + bool isGBPUSD = _symbolParser.IsGBPUSD(signal.symbol); + bool isEURGBP = _symbolParser.IsEURGBP(signal.symbol); + bool isXAUUSD = _symbolParser.IsXAUUSD(signal.symbol); + bool isUSDJPY = _symbolParser.IsUSDJPY(signal.symbol); + bool isEURJPY = _symbolParser.IsEURJPY(signal.symbol); + bool isUSDCHF = _symbolParser.IsUSDCHF(signal.symbol); + bool isEURCHF = _symbolParser.IsEURCHF(signal.symbol); + bool isAUDUSD = _symbolParser.IsAUDUSD(signal.symbol); + bool isNZDUSD = _symbolParser.IsNZDUSD(signal.symbol); + bool isUSDCAD = _symbolParser.IsUSDCAD(signal.symbol); + bool isEURCAD = _symbolParser.IsEURCAD(signal.symbol); + bool isDowJones = _symbolParser.IsDowJones(signal.symbol); + + // + string market = _account.GetCompany(); + bool isAMarkets = _marketParser.IsAMarkets(market); + + // + if (!force) + { + // + if (isEURUSD) + { + // + result = + _eurusdShortParser.IsFiltered(conditions); + } + else if (isGBPUSD) + { + // + result = + _gbpusdShortParser.IsFiltered(conditions); + } + else if (isEURGBP) + { + // + result = + _eurgbpShortParser.IsFiltered(conditions); + } + else if (isUSDJPY) + { + // + result = + _usdjpyShortParser.IsFiltered(conditions); + } + else if (isEURJPY) + { + // + result = + _eurjpyShortParser.IsFiltered(conditions); + } + else if (isUSDCHF) + { + // + result = + _usdchfShortParser.IsFiltered(conditions); + } + else if (isEURCHF) + { + // + result = + _eurchfShortParser.IsFiltered(conditions); + } + else if (isXAUUSD) + { + // + result = + _xauusdShortParser.IsFiltered(conditions); + } + else if (isAUDUSD) + { + // + result = + _audusdShortParser.IsFiltered(conditions); + } + else if (isNZDUSD) + { + // + result = + _nzdusdShortParser.IsFiltered(conditions); + } + else if (isUSDCAD) + { + // + result = + _usdcadShortParser.IsFiltered(conditions); + } + else if (isEURCAD) + { + // + result = + _eurcadShortParser.IsFiltered(conditions); + } + else if (isDowJones) + { + // + result = + _dowjonesShortParser.IsFiltered(conditions); + } + } + else + { + // + result = + // + _eurusdShortParser.IsFiltered(conditions) + // + || + // + _gbpusdShortParser.IsFiltered(conditions) + // + || + // + _eurgbpShortParser.IsFiltered(conditions) + // + || + // + _usdjpyShortParser.IsFiltered(conditions) + // + || + // + _eurjpyShortParser.IsFiltered(conditions) + // + || + // + _usdchfShortParser.IsFiltered(conditions) + // + || + // + _eurchfShortParser.IsFiltered(conditions) + // + || + // + _xauusdShortParser.IsFiltered(conditions) + // + || + // + _audusdShortParser.IsFiltered(conditions) + // + || + // + _nzdusdShortParser.IsFiltered(conditions) + // + || + // + _usdcadShortParser.IsFiltered(conditions) + // + || + // + _eurcadShortParser.IsFiltered(conditions) + // + || + // + _dowjonesShortParser.IsFiltered(conditions) + // + ; + } + + // + return result; + } +}; + +// \ No newline at end of file diff --git a/Parsers/x-saherelm.xch.usdcad.long.parser.mq5 b/Documents/BKP/Requirements/x-saherelm.xch.usdcad.long.parser.mq5 similarity index 100% rename from Parsers/x-saherelm.xch.usdcad.long.parser.mq5 rename to Documents/BKP/Requirements/x-saherelm.xch.usdcad.long.parser.mq5 diff --git a/Parsers/x-saherelm.xch.usdcad.short.parser.mq5 b/Documents/BKP/Requirements/x-saherelm.xch.usdcad.short.parser.mq5 similarity index 100% rename from Parsers/x-saherelm.xch.usdcad.short.parser.mq5 rename to Documents/BKP/Requirements/x-saherelm.xch.usdcad.short.parser.mq5 diff --git a/Parsers/x-saherelm.xch.usdchf.long.parser.mq5 b/Documents/BKP/Requirements/x-saherelm.xch.usdchf.long.parser.mq5 similarity index 100% rename from Parsers/x-saherelm.xch.usdchf.long.parser.mq5 rename to Documents/BKP/Requirements/x-saherelm.xch.usdchf.long.parser.mq5 diff --git a/Parsers/x-saherelm.xch.usdchf.short.parser.mq5 b/Documents/BKP/Requirements/x-saherelm.xch.usdchf.short.parser.mq5 similarity index 100% rename from Parsers/x-saherelm.xch.usdchf.short.parser.mq5 rename to Documents/BKP/Requirements/x-saherelm.xch.usdchf.short.parser.mq5 diff --git a/Parsers/x-saherelm.xch.usdjpy.long.parser.mq5 b/Documents/BKP/Requirements/x-saherelm.xch.usdjpy.long.parser.mq5 similarity index 100% rename from Parsers/x-saherelm.xch.usdjpy.long.parser.mq5 rename to Documents/BKP/Requirements/x-saherelm.xch.usdjpy.long.parser.mq5 diff --git a/Parsers/x-saherelm.xch.usdjpy.short.parser.mq5 b/Documents/BKP/Requirements/x-saherelm.xch.usdjpy.short.parser.mq5 similarity index 100% rename from Parsers/x-saherelm.xch.usdjpy.short.parser.mq5 rename to Documents/BKP/Requirements/x-saherelm.xch.usdjpy.short.parser.mq5 diff --git a/Parsers/x-saherelm.xch.xauusd.long.parser.mq5 b/Documents/BKP/Requirements/x-saherelm.xch.xauusd.long.parser.mq5 similarity index 100% rename from Parsers/x-saherelm.xch.xauusd.long.parser.mq5 rename to Documents/BKP/Requirements/x-saherelm.xch.xauusd.long.parser.mq5 diff --git a/Parsers/x-saherelm.xch.xauusd.short.parser.mq5 b/Documents/BKP/Requirements/x-saherelm.xch.xauusd.short.parser.mq5 similarity index 100% rename from Parsers/x-saherelm.xch.xauusd.short.parser.mq5 rename to Documents/BKP/Requirements/x-saherelm.xch.xauusd.short.parser.mq5 diff --git a/Parsers/AMarkets/AUDUSD/2019/x-saherelm.xch.amarkets.audusd.2019.long.parser.mq5 b/Parsers/AMarkets/AUDUSD/2019/x-saherelm.xch.amarkets.audusd.2019.long.parser.mq5 new file mode 100644 index 00000000..8ab93960 --- /dev/null +++ b/Parsers/AMarkets/AUDUSD/2019/x-saherelm.xch.amarkets.audusd.2019.long.parser.mq5 @@ -0,0 +1,54 @@ +/////////////////////////////////////////////////////// +// +// SaherElm IT Center MQL5 Strategy Parser Library +// ------------------------------------------------ +// Name: XCHStartegyConditionsParser +// Description: provide all conditions parsing +// for XCH Strategy ... +// +// +// Maintainer: +// ------------ +// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) +// +////////////////////////////////////////////////////// +// +// Global Properties ... +#property library +#property copyright "Copyright 2023, SaherElm IT Center" +#property link "https://www.saherelm.ir" +#property version "1.00" +#property strict + +// +// Imports ... +#include "../../../../Strategies/x-saherelm.xch.strategy.mq5" + +// +// Conditions Parser ... +struct XCHStartegyAMarketsAUDUSD2019LongConditionsParser +{ + // + string _version; + + // + bool IsFiltered( + XCHStrategyConditions &conditions // + ) + { + // + bool result = false; + + // + result = + // + false + // + ; + + // + return result; + } +}; + +// \ No newline at end of file diff --git a/Parsers/AMarkets/AUDUSD/2019/x-saherelm.xch.amarkets.audusd.2019.short.parser.mq5 b/Parsers/AMarkets/AUDUSD/2019/x-saherelm.xch.amarkets.audusd.2019.short.parser.mq5 new file mode 100644 index 00000000..4ef366fe --- /dev/null +++ b/Parsers/AMarkets/AUDUSD/2019/x-saherelm.xch.amarkets.audusd.2019.short.parser.mq5 @@ -0,0 +1,54 @@ +/////////////////////////////////////////////////////// +// +// SaherElm IT Center MQL5 Strategy Parser Library +// ------------------------------------------------ +// Name: XCHStartegyConditionsParser +// Description: provide all conditions parsing +// for XCH Strategy ... +// +// +// Maintainer: +// ------------ +// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) +// +////////////////////////////////////////////////////// +// +// Global Properties ... +#property library +#property copyright "Copyright 2023, SaherElm IT Center" +#property link "https://www.saherelm.ir" +#property version "1.00" +#property strict + +// +// Imports ... +#include "../../../../Strategies/x-saherelm.xch.strategy.mq5" + +// +// Conditions Parser ... +struct XCHStartegyAMarketsAUDUSD2019ShortConditionsParser +{ + // + string _version; + + // + bool IsFiltered( + XCHStrategyConditions &conditions // + ) + { + // + bool result = false; + + // + result = + // + false + // + ; + + // + return result; + } +}; + +// \ No newline at end of file diff --git a/Parsers/AMarkets/AUDUSD/Olds/x-saherelm.xch.amarkets.audusd.olds.long.parser.mq5 b/Parsers/AMarkets/AUDUSD/Olds/x-saherelm.xch.amarkets.audusd.olds.long.parser.mq5 new file mode 100644 index 00000000..b1b3b7da --- /dev/null +++ b/Parsers/AMarkets/AUDUSD/Olds/x-saherelm.xch.amarkets.audusd.olds.long.parser.mq5 @@ -0,0 +1,54 @@ +/////////////////////////////////////////////////////// +// +// SaherElm IT Center MQL5 Strategy Parser Library +// ------------------------------------------------ +// Name: XCHStartegyConditionsParser +// Description: provide all conditions parsing +// for XCH Strategy ... +// +// +// Maintainer: +// ------------ +// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) +// +////////////////////////////////////////////////////// +// +// Global Properties ... +#property library +#property copyright "Copyright 2023, SaherElm IT Center" +#property link "https://www.saherelm.ir" +#property version "1.00" +#property strict + +// +// Imports ... +#include "../../../../Strategies/x-saherelm.xch.strategy.mq5" + +// +// Conditions Parser ... +struct XCHStartegyAMarketsAUDUSDOldsLongConditionsParser +{ + // + string _version; + + // + bool IsFiltered( + XCHStrategyConditions &conditions // + ) + { + // + bool result = false; + + // + result = + // + false + // + ; + + // + return result; + } +}; + +// \ No newline at end of file diff --git a/Parsers/AMarkets/AUDUSD/Olds/x-saherelm.xch.amarkets.audusd.olds.short.parser.mq5 b/Parsers/AMarkets/AUDUSD/Olds/x-saherelm.xch.amarkets.audusd.olds.short.parser.mq5 new file mode 100644 index 00000000..6b10331e --- /dev/null +++ b/Parsers/AMarkets/AUDUSD/Olds/x-saherelm.xch.amarkets.audusd.olds.short.parser.mq5 @@ -0,0 +1,54 @@ +/////////////////////////////////////////////////////// +// +// SaherElm IT Center MQL5 Strategy Parser Library +// ------------------------------------------------ +// Name: XCHStartegyConditionsParser +// Description: provide all conditions parsing +// for XCH Strategy ... +// +// +// Maintainer: +// ------------ +// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) +// +////////////////////////////////////////////////////// +// +// Global Properties ... +#property library +#property copyright "Copyright 2023, SaherElm IT Center" +#property link "https://www.saherelm.ir" +#property version "1.00" +#property strict + +// +// Imports ... +#include "../../../../Strategies/x-saherelm.xch.strategy.mq5" + +// +// Conditions Parser ... +struct XCHStartegyAMarketsAUDUSDOldsShortConditionsParser +{ + // + string _version; + + // + bool IsFiltered( + XCHStrategyConditions &conditions // + ) + { + // + bool result = false; + + // + result = + // + false + // + ; + + // + return result; + } +}; + +// \ No newline at end of file diff --git a/Parsers/AMarkets/AUDUSD/x-saherelm.xch.amarkets.audusd.long.parser.mq5 b/Parsers/AMarkets/AUDUSD/x-saherelm.xch.amarkets.audusd.long.parser.mq5 index ff1b282a..87f0e0a1 100644 --- a/Parsers/AMarkets/AUDUSD/x-saherelm.xch.amarkets.audusd.long.parser.mq5 +++ b/Parsers/AMarkets/AUDUSD/x-saherelm.xch.amarkets.audusd.long.parser.mq5 @@ -24,26 +24,49 @@ // Imports ... #include "../../../Strategies/x-saherelm.xch.strategy.mq5" +// +#include "./Olds/x-saherelm.xch.amarkets.audusd.olds.long.parser.mq5" +#include "./2019/x-saherelm.xch.amarkets.audusd.2019.long.parser.mq5" + // // Conditions Parser ... struct XCHStartegyAMarketsAUDUSDLongConditionsParser { // string _version; + + // + XCHStartegyAMarketsAUDUSDOldsLongConditionsParser _oldsParser; + XCHStartegyAMarketsAUDUSD2019LongConditionsParser _2019Parser; + // bool IsFiltered( - XCHStrategyConditions &conditions // + XSignal &signal, + XCHStrategyConditions &conditions, + bool force = true // ) { // bool result = false; // - result = + if (!force) + { + result = _2019Parser.IsFiltered(conditions); + } + else + { // - false - // - ; + result = + // + _2019Parser.IsFiltered(conditions) + // + || + // + _oldsParser.IsFiltered(conditions) + // + ; + } // return result; diff --git a/Parsers/AMarkets/AUDUSD/x-saherelm.xch.amarkets.audusd.short.parser.mq5 b/Parsers/AMarkets/AUDUSD/x-saherelm.xch.amarkets.audusd.short.parser.mq5 index e4fad5ec..d618f766 100644 --- a/Parsers/AMarkets/AUDUSD/x-saherelm.xch.amarkets.audusd.short.parser.mq5 +++ b/Parsers/AMarkets/AUDUSD/x-saherelm.xch.amarkets.audusd.short.parser.mq5 @@ -24,26 +24,49 @@ // Imports ... #include "../../../Strategies/x-saherelm.xch.strategy.mq5" +// +#include "./Olds/x-saherelm.xch.amarkets.audusd.olds.short.parser.mq5" +#include "./2019/x-saherelm.xch.amarkets.audusd.2019.short.parser.mq5" + // // Conditions Parser ... struct XCHStartegyAMarketsAUDUSDShortConditionsParser { // string _version; + + // + XCHStartegyAMarketsAUDUSDOldsShortConditionsParser _oldsParser; + XCHStartegyAMarketsAUDUSD2019ShortConditionsParser _2019Parser; + // bool IsFiltered( - XCHStrategyConditions &conditions // + XSignal &signal, + XCHStrategyConditions &conditions, + bool force = true // ) { // bool result = false; // - result = + if (!force) + { + result = _2019Parser.IsFiltered(conditions); + } + else + { // - false - // - ; + result = + // + _2019Parser.IsFiltered(conditions) + // + || + // + _oldsParser.IsFiltered(conditions) + // + ; + } // return result; diff --git a/Parsers/AMarkets/DowJones/x-saherelm.xch.amarkets.us30.long.parser.mq5 b/Parsers/AMarkets/DowJones/x-saherelm.xch.amarkets.us30.long.parser.mq5 index 65b48c2a..932bd7b7 100644 --- a/Parsers/AMarkets/DowJones/x-saherelm.xch.amarkets.us30.long.parser.mq5 +++ b/Parsers/AMarkets/DowJones/x-saherelm.xch.amarkets.us30.long.parser.mq5 @@ -30,6 +30,7 @@ struct XCHStartegyAMarketsUS30LongConditionsParser { // string _version; + // bool IsFiltered( XCHStrategyConditions &conditions // diff --git a/Parsers/AMarkets/DowJones/x-saherelm.xch.amarkets.us30.short.parser.mq5 b/Parsers/AMarkets/DowJones/x-saherelm.xch.amarkets.us30.short.parser.mq5 index f9340782..3fc91921 100644 --- a/Parsers/AMarkets/DowJones/x-saherelm.xch.amarkets.us30.short.parser.mq5 +++ b/Parsers/AMarkets/DowJones/x-saherelm.xch.amarkets.us30.short.parser.mq5 @@ -30,6 +30,7 @@ struct XCHStartegyAMarketsUS30ShortConditionsParser { // string _version; + // bool IsFiltered( XCHStrategyConditions &conditions // diff --git a/Parsers/AMarkets/EURCAD/x-saherelm.xch.amarkets.eurcad.long.parser.mq5 b/Parsers/AMarkets/EURCAD/x-saherelm.xch.amarkets.eurcad.long.parser.mq5 index 31e7112b..4f99c03f 100644 --- a/Parsers/AMarkets/EURCAD/x-saherelm.xch.amarkets.eurcad.long.parser.mq5 +++ b/Parsers/AMarkets/EURCAD/x-saherelm.xch.amarkets.eurcad.long.parser.mq5 @@ -30,6 +30,7 @@ struct XCHStartegyAMarketsEURCADLongConditionsParser { // string _version; + // bool IsFiltered( XCHStrategyConditions &conditions // diff --git a/Parsers/AMarkets/EURCAD/x-saherelm.xch.amarkets.eurcad.short.parser.mq5 b/Parsers/AMarkets/EURCAD/x-saherelm.xch.amarkets.eurcad.short.parser.mq5 index 9fa44f59..52706eb8 100644 --- a/Parsers/AMarkets/EURCAD/x-saherelm.xch.amarkets.eurcad.short.parser.mq5 +++ b/Parsers/AMarkets/EURCAD/x-saherelm.xch.amarkets.eurcad.short.parser.mq5 @@ -30,6 +30,7 @@ struct XCHStartegyAMarketsEURCADShortConditionsParser { // string _version; + // bool IsFiltered( XCHStrategyConditions &conditions // diff --git a/Parsers/AMarkets/EURCHF/x-saherelm.xch.amarkets.eurchf.long.parser.mq5 b/Parsers/AMarkets/EURCHF/x-saherelm.xch.amarkets.eurchf.long.parser.mq5 index 46de88e5..5c190b98 100644 --- a/Parsers/AMarkets/EURCHF/x-saherelm.xch.amarkets.eurchf.long.parser.mq5 +++ b/Parsers/AMarkets/EURCHF/x-saherelm.xch.amarkets.eurchf.long.parser.mq5 @@ -30,6 +30,7 @@ struct XCHStartegyAMarketsEURCHFLongConditionsParser { // string _version; + // bool IsFiltered( XCHStrategyConditions &conditions // diff --git a/Parsers/AMarkets/EURCHF/x-saherelm.xch.amarkets.eurchf.short.parser.mq5 b/Parsers/AMarkets/EURCHF/x-saherelm.xch.amarkets.eurchf.short.parser.mq5 index 58c68da1..2a3c22f2 100644 --- a/Parsers/AMarkets/EURCHF/x-saherelm.xch.amarkets.eurchf.short.parser.mq5 +++ b/Parsers/AMarkets/EURCHF/x-saherelm.xch.amarkets.eurchf.short.parser.mq5 @@ -30,6 +30,7 @@ struct XCHStartegyAMarketsEURCHFShortConditionsParser { // string _version; + // bool IsFiltered( XCHStrategyConditions &conditions // diff --git a/Parsers/AMarkets/EURGBP/x-saherelm.xch.amarkets.eurgbp.long.parser.mq5 b/Parsers/AMarkets/EURGBP/x-saherelm.xch.amarkets.eurgbp.long.parser.mq5 index 15ed09a6..b50969b1 100644 --- a/Parsers/AMarkets/EURGBP/x-saherelm.xch.amarkets.eurgbp.long.parser.mq5 +++ b/Parsers/AMarkets/EURGBP/x-saherelm.xch.amarkets.eurgbp.long.parser.mq5 @@ -30,6 +30,7 @@ struct XCHStartegyAMarketsEURGBPLongConditionsParser { // string _version; + // bool IsFiltered( XCHStrategyConditions &conditions // diff --git a/Parsers/AMarkets/EURGBP/x-saherelm.xch.amarkets.eurgbp.short.parser.mq5 b/Parsers/AMarkets/EURGBP/x-saherelm.xch.amarkets.eurgbp.short.parser.mq5 index 8aae7539..24973239 100644 --- a/Parsers/AMarkets/EURGBP/x-saherelm.xch.amarkets.eurgbp.short.parser.mq5 +++ b/Parsers/AMarkets/EURGBP/x-saherelm.xch.amarkets.eurgbp.short.parser.mq5 @@ -30,6 +30,7 @@ struct XCHStartegyAMarketsEURGBPShortConditionsParser { // string _version; + // bool IsFiltered( XCHStrategyConditions &conditions // diff --git a/Parsers/AMarkets/EURJPY/x-saherelm.xch.amarkets.eurjpy.long.parser.mq5 b/Parsers/AMarkets/EURJPY/x-saherelm.xch.amarkets.eurjpy.long.parser.mq5 index 506e270e..e84eb404 100644 --- a/Parsers/AMarkets/EURJPY/x-saherelm.xch.amarkets.eurjpy.long.parser.mq5 +++ b/Parsers/AMarkets/EURJPY/x-saherelm.xch.amarkets.eurjpy.long.parser.mq5 @@ -30,6 +30,7 @@ struct XCHStartegyAMarketsEURJPYLongConditionsParser { // string _version; + // bool IsFiltered( XCHStrategyConditions &conditions // diff --git a/Parsers/AMarkets/EURJPY/x-saherelm.xch.amarkets.eurjpy.short.parser.mq5 b/Parsers/AMarkets/EURJPY/x-saherelm.xch.amarkets.eurjpy.short.parser.mq5 index b61beaa2..5c11864a 100644 --- a/Parsers/AMarkets/EURJPY/x-saherelm.xch.amarkets.eurjpy.short.parser.mq5 +++ b/Parsers/AMarkets/EURJPY/x-saherelm.xch.amarkets.eurjpy.short.parser.mq5 @@ -30,6 +30,7 @@ struct XCHStartegyAMarketsEURJPYShortConditionsParser { // string _version; + // bool IsFiltered( XCHStrategyConditions &conditions // diff --git a/Parsers/AMarkets/EURUSD/x-saherelm.xch.amarkets.eurusd.long.parser.mq5 b/Parsers/AMarkets/EURUSD/x-saherelm.xch.amarkets.eurusd.long.parser.mq5 index 5e3471ee..1cfa7a69 100644 --- a/Parsers/AMarkets/EURUSD/x-saherelm.xch.amarkets.eurusd.long.parser.mq5 +++ b/Parsers/AMarkets/EURUSD/x-saherelm.xch.amarkets.eurusd.long.parser.mq5 @@ -30,6 +30,7 @@ struct XCHStartegyAMarketsEURUSDLongConditionsParser { // string _version; + // bool IsFiltered( XCHStrategyConditions &conditions // diff --git a/Parsers/AMarkets/EURUSD/x-saherelm.xch.amarkets.eurusd.short.parser.mq5 b/Parsers/AMarkets/EURUSD/x-saherelm.xch.amarkets.eurusd.short.parser.mq5 index 96a78830..414af7fb 100644 --- a/Parsers/AMarkets/EURUSD/x-saherelm.xch.amarkets.eurusd.short.parser.mq5 +++ b/Parsers/AMarkets/EURUSD/x-saherelm.xch.amarkets.eurusd.short.parser.mq5 @@ -30,6 +30,7 @@ struct XCHStartegyAMarketsEURUSDShortConditionsParser { // string _version; + // bool IsFiltered( XCHStrategyConditions &conditions // diff --git a/Parsers/AMarkets/GBPUSD/x-saherelm.xch.amarkets.gbpusd.long.parser.mq5 b/Parsers/AMarkets/GBPUSD/x-saherelm.xch.amarkets.gbpusd.long.parser.mq5 index febc90e9..54637ef3 100644 --- a/Parsers/AMarkets/GBPUSD/x-saherelm.xch.amarkets.gbpusd.long.parser.mq5 +++ b/Parsers/AMarkets/GBPUSD/x-saherelm.xch.amarkets.gbpusd.long.parser.mq5 @@ -30,6 +30,7 @@ struct XCHStartegyAMarketsGBPUSDLongConditionsParser { // string _version; + // bool IsFiltered( XCHStrategyConditions &conditions // diff --git a/Parsers/AMarkets/GBPUSD/x-saherelm.xch.amarkets.gbpusd.short.parser.mq5 b/Parsers/AMarkets/GBPUSD/x-saherelm.xch.amarkets.gbpusd.short.parser.mq5 index 5471435b..fc121e11 100644 --- a/Parsers/AMarkets/GBPUSD/x-saherelm.xch.amarkets.gbpusd.short.parser.mq5 +++ b/Parsers/AMarkets/GBPUSD/x-saherelm.xch.amarkets.gbpusd.short.parser.mq5 @@ -30,6 +30,7 @@ struct XCHStartegyAMarketsGBPUSDShortConditionsParser { // string _version; + // bool IsFiltered( XCHStrategyConditions &conditions // diff --git a/Parsers/AMarkets/NZDUSD/x-saherelm.xch.amarkets.nzdusd.long.parser.mq5 b/Parsers/AMarkets/NZDUSD/x-saherelm.xch.amarkets.nzdusd.long.parser.mq5 index 4141e145..fde476fd 100644 --- a/Parsers/AMarkets/NZDUSD/x-saherelm.xch.amarkets.nzdusd.long.parser.mq5 +++ b/Parsers/AMarkets/NZDUSD/x-saherelm.xch.amarkets.nzdusd.long.parser.mq5 @@ -30,6 +30,7 @@ struct XCHStartegyAMarketsNZDUSDLongConditionsParser { // string _version; + // bool IsFiltered( XCHStrategyConditions &conditions // diff --git a/Parsers/AMarkets/NZDUSD/x-saherelm.xch.amarkets.nzdusd.short.parser.mq5 b/Parsers/AMarkets/NZDUSD/x-saherelm.xch.amarkets.nzdusd.short.parser.mq5 index 12113adf..f64e1625 100644 --- a/Parsers/AMarkets/NZDUSD/x-saherelm.xch.amarkets.nzdusd.short.parser.mq5 +++ b/Parsers/AMarkets/NZDUSD/x-saherelm.xch.amarkets.nzdusd.short.parser.mq5 @@ -30,6 +30,7 @@ struct XCHStartegyAMarketsNZDUSDShortConditionsParser { // string _version; + // bool IsFiltered( XCHStrategyConditions &conditions // diff --git a/Parsers/AMarkets/USDCAD/x-saherelm.xch.amarkets.usdcad.long.parser.mq5 b/Parsers/AMarkets/USDCAD/x-saherelm.xch.amarkets.usdcad.long.parser.mq5 index 532cdbd1..4acdde5f 100644 --- a/Parsers/AMarkets/USDCAD/x-saherelm.xch.amarkets.usdcad.long.parser.mq5 +++ b/Parsers/AMarkets/USDCAD/x-saherelm.xch.amarkets.usdcad.long.parser.mq5 @@ -30,6 +30,7 @@ struct XCHStartegyAMarketsUSDCADLongConditionsParser { // string _version; + // bool IsFiltered( XCHStrategyConditions &conditions // diff --git a/Parsers/AMarkets/USDCAD/x-saherelm.xch.amarkets.usdcad.short.parser.mq5 b/Parsers/AMarkets/USDCAD/x-saherelm.xch.amarkets.usdcad.short.parser.mq5 index 645eea3a..236f3d21 100644 --- a/Parsers/AMarkets/USDCAD/x-saherelm.xch.amarkets.usdcad.short.parser.mq5 +++ b/Parsers/AMarkets/USDCAD/x-saherelm.xch.amarkets.usdcad.short.parser.mq5 @@ -30,6 +30,7 @@ struct XCHStartegyAMarketsUSDCADShortConditionsParser { // string _version; + // bool IsFiltered( XCHStrategyConditions &conditions // diff --git a/Parsers/AMarkets/USDCHF/x-saherelm.xch.amarkets.usdchf.long.parser.mq5 b/Parsers/AMarkets/USDCHF/x-saherelm.xch.amarkets.usdchf.long.parser.mq5 index f1bfc0d1..13cfa73f 100644 --- a/Parsers/AMarkets/USDCHF/x-saherelm.xch.amarkets.usdchf.long.parser.mq5 +++ b/Parsers/AMarkets/USDCHF/x-saherelm.xch.amarkets.usdchf.long.parser.mq5 @@ -30,6 +30,7 @@ struct XCHStartegyAMarketsUSDCHFLongConditionsParser { // string _version; + // bool IsFiltered( XCHStrategyConditions &conditions // diff --git a/Parsers/AMarkets/USDCHF/x-saherelm.xch.amarkets.usdchf.short.parser.mq5 b/Parsers/AMarkets/USDCHF/x-saherelm.xch.amarkets.usdchf.short.parser.mq5 index 3506af07..88be0772 100644 --- a/Parsers/AMarkets/USDCHF/x-saherelm.xch.amarkets.usdchf.short.parser.mq5 +++ b/Parsers/AMarkets/USDCHF/x-saherelm.xch.amarkets.usdchf.short.parser.mq5 @@ -30,6 +30,7 @@ struct XCHStartegyAMarketsUSDCHFShortConditionsParser { // string _version; + // bool IsFiltered( XCHStrategyConditions &conditions // diff --git a/Parsers/AMarkets/USDJPY/x-saherelm.xch.amarkets.usdjpy.long.parser.mq5 b/Parsers/AMarkets/USDJPY/x-saherelm.xch.amarkets.usdjpy.long.parser.mq5 index c25ab841..b7eb06da 100644 --- a/Parsers/AMarkets/USDJPY/x-saherelm.xch.amarkets.usdjpy.long.parser.mq5 +++ b/Parsers/AMarkets/USDJPY/x-saherelm.xch.amarkets.usdjpy.long.parser.mq5 @@ -30,6 +30,7 @@ struct XCHStartegyAMarketsUSDJPYLongConditionsParser { // string _version; + // bool IsFiltered( XCHStrategyConditions &conditions // diff --git a/Parsers/AMarkets/USDJPY/x-saherelm.xch.amarkets.usdjpy.short.parser.mq5 b/Parsers/AMarkets/USDJPY/x-saherelm.xch.amarkets.usdjpy.short.parser.mq5 index 6ad1f397..2e2756d3 100644 --- a/Parsers/AMarkets/USDJPY/x-saherelm.xch.amarkets.usdjpy.short.parser.mq5 +++ b/Parsers/AMarkets/USDJPY/x-saherelm.xch.amarkets.usdjpy.short.parser.mq5 @@ -30,6 +30,7 @@ struct XCHStartegyAMarketsUSDJPYShortConditionsParser { // string _version; + // bool IsFiltered( XCHStrategyConditions &conditions // diff --git a/Parsers/AMarkets/XAUUSD/x-saherelm.xch.amarkets.xauusd.long.parser.mq5 b/Parsers/AMarkets/XAUUSD/x-saherelm.xch.amarkets.xauusd.long.parser.mq5 index befe92f7..08680c8e 100644 --- a/Parsers/AMarkets/XAUUSD/x-saherelm.xch.amarkets.xauusd.long.parser.mq5 +++ b/Parsers/AMarkets/XAUUSD/x-saherelm.xch.amarkets.xauusd.long.parser.mq5 @@ -30,6 +30,7 @@ struct XCHStartegyAMarketsXAUUSDLongConditionsParser { // string _version; + // bool IsFiltered( XCHStrategyConditions &conditions // diff --git a/Parsers/AMarkets/x-saherelm.xch.amarkets.parser.mq5 b/Parsers/AMarkets/x-saherelm.xch.amarkets.parser.mq5 index e69de29b..5a1d3089 100644 --- a/Parsers/AMarkets/x-saherelm.xch.amarkets.parser.mq5 +++ b/Parsers/AMarkets/x-saherelm.xch.amarkets.parser.mq5 @@ -0,0 +1,518 @@ +/////////////////////////////////////////////////////// +// +// SaherElm IT Center MQL5 Strategy Parser Library +// ------------------------------------------------ +// Name: XCHStartegyConditionsParser +// Description: provide all conditions parsing +// for XCH Strategy ... +// +// +// Maintainer: +// ------------ +// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) +// +////////////////////////////////////////////////////// +// +// Global Properties ... +#property library +#property copyright "Copyright 2023, SaherElm IT Center" +#property link "https://www.saherelm.ir" +#property version "1.00" +#property strict + +// +// Imports ... +#include "../../Strategies/x-saherelm.xch.strategy.mq5" + +// +#include "./DowJones/x-saherelm.xch.amarkets.us30.long.parser.mq5" +#include "./DowJones/x-saherelm.xch.amarkets.us30.short.parser.mq5" +#include "./EURGBP/x-saherelm.xch.amarkets.eurgbp.long.parser.mq5" +#include "./EURGBP/x-saherelm.xch.amarkets.eurgbp.short.parser.mq5" +#include "./EURJPY/x-saherelm.xch.amarkets.eurjpy.long.parser.mq5" +#include "./EURJPY/x-saherelm.xch.amarkets.eurjpy.short.parser.mq5" +#include "./EURCHF/x-saherelm.xch.amarkets.eurchf.long.parser.mq5" +#include "./EURCHF/x-saherelm.xch.amarkets.eurchf.short.parser.mq5" +#include "./AUDUSD/x-saherelm.xch.amarkets.audusd.long.parser.mq5" +#include "./AUDUSD/x-saherelm.xch.amarkets.audusd.short.parser.mq5" +#include "./NZDUSD/x-saherelm.xch.amarkets.nzdusd.long.parser.mq5" +#include "./NZDUSD/x-saherelm.xch.amarkets.nzdusd.short.parser.mq5" +#include "./USDCAD/x-saherelm.xch.amarkets.usdcad.long.parser.mq5" +#include "./USDCAD/x-saherelm.xch.amarkets.usdcad.short.parser.mq5" +#include "./EURCAD/x-saherelm.xch.amarkets.eurcad.long.parser.mq5" +#include "./EURCAD/x-saherelm.xch.amarkets.eurcad.short.parser.mq5" +#include "./EURUSD/x-saherelm.xch.amarkets.eurusd.long.parser.mq5" +#include "./EURUSD/x-saherelm.xch.amarkets.eurusd.short.parser.mq5" +#include "./USDJPY/x-saherelm.xch.amarkets.usdjpy.long.parser.mq5" +#include "./USDJPY/x-saherelm.xch.amarkets.usdjpy.short.parser.mq5" +#include "./USDCHF/x-saherelm.xch.amarkets.usdchf.long.parser.mq5" +#include "./USDCHF/x-saherelm.xch.amarkets.usdchf.short.parser.mq5" +#include "./GBPUSD/x-saherelm.xch.amarkets.gbpusd.long.parser.mq5" +#include "./GBPUSD/x-saherelm.xch.amarkets.gbpusd.short.parser.mq5" +#include "./XAUUSD/x-saherelm.xch.amarkets.xauusd.long.parser.mq5" +#include "./XAUUSD/x-saherelm.xch.amarkets.xauusd.short.parser.mq5" + +// +// Conditions Parser ... +struct XCHStartegyAMarketsConditionsParser +{ + // + string _version; + + // + // Parsers ... + XSymbolParser _symbolParser; + + // + // EURUSD ... + XCHStartegyAMarketsEURUSDLongConditionsParser _eurusdLongParser; + XCHStartegyAMarketsEURUSDShortConditionsParser _eurusdShortParser; + + // + // GBPUSD ... + XCHStartegyAMarketsGBPUSDLongConditionsParser _gbpusdLongParser; + XCHStartegyAMarketsGBPUSDShortConditionsParser _gbpusdShortParser; + + // + // EURGBP ... + XCHStartegyAMarketsEURGBPLongConditionsParser _eurgbpLongParser; + XCHStartegyAMarketsEURGBPShortConditionsParser _eurgbpShortParser; + + // + // USDJPY ... + XCHStartegyAMarketsUSDJPYLongConditionsParser _usdjpyLongParser; + XCHStartegyAMarketsUSDJPYShortConditionsParser _usdjpyShortParser; + + // + // EURJPY ... + XCHStartegyAMarketsEURJPYLongConditionsParser _eurjpyLongParser; + XCHStartegyAMarketsEURJPYShortConditionsParser _eurjpyShortParser; + + // + // USDCHF ... + XCHStartegyAMarketsUSDCHFLongConditionsParser _usdchfLongParser; + XCHStartegyAMarketsUSDCHFShortConditionsParser _usdchfShortParser; + + // + // EURCHF ... + XCHStartegyAMarketsEURCHFLongConditionsParser _eurchfLongParser; + XCHStartegyAMarketsEURCHFShortConditionsParser _eurchfShortParser; + + // + // XAUUSD ... + XCHStartegyAMarketsXAUUSDLongConditionsParser _xauusdLongParser; + XCHStartegyAMarketsXAUUSDShortConditionsParser _xauusdShortParser; + + // + // DOWJONES ... + XCHStartegyAMarketsUS30LongConditionsParser _dowjonesLongParser; + XCHStartegyAMarketsUS30ShortConditionsParser _dowjonesShortParser; + + // + // AUDUSD ... + XCHStartegyAMarketsAUDUSDLongConditionsParser _audusdLongParser; + XCHStartegyAMarketsAUDUSDShortConditionsParser _audusdShortParser; + + // + // NZDUSD ... + XCHStartegyAMarketsNZDUSDLongConditionsParser _nzdusdLongParser; + XCHStartegyAMarketsNZDUSDShortConditionsParser _nzdusdShortParser; + + // + // USDCAD ... + XCHStartegyAMarketsUSDCADLongConditionsParser _usdcadLongParser; + XCHStartegyAMarketsUSDCADShortConditionsParser _usdcadShortParser; + + // + // EURCAD ... + XCHStartegyAMarketsEURCADLongConditionsParser _eurcadLongParser; + XCHStartegyAMarketsEURCADShortConditionsParser _eurcadShortParser; + + // + bool IsFiltered( + XSignal &signal, // Provided Signal + XCHStrategyConditions &conditions, // Market Conditions + bool force = false // + ) + { + // + bool result = false; + + // + // Validate Args ... + if (!signal.IsValid() || !conditions.IsValid()) + { + // + result = true; + return result; + } + + // + bool isLong = IsLong(signal.type); + + // + result = + // + isLong + ? IsLongFiltered( + signal, + conditions, + force // + ) + : IsShortFiltered( + signal, + conditions, + force // + ) + // + ; + + // + return result; + } + + // + // Filter Long Signals ... + bool IsLongFiltered( + XSignal &signal, + XCHStrategyConditions &conditions, + bool force = false // + ) + { + // + bool result = false; + + // + bool isEURUSD = _symbolParser.IsEURUSD(signal.symbol); + bool isGBPUSD = _symbolParser.IsGBPUSD(signal.symbol); + bool isEURGBP = _symbolParser.IsEURGBP(signal.symbol); + bool isXAUUSD = _symbolParser.IsXAUUSD(signal.symbol); + bool isUSDJPY = _symbolParser.IsUSDJPY(signal.symbol); + bool isEURJPY = _symbolParser.IsEURJPY(signal.symbol); + bool isUSDCHF = _symbolParser.IsUSDCHF(signal.symbol); + bool isEURCHF = _symbolParser.IsEURCHF(signal.symbol); + bool isAUDUSD = _symbolParser.IsAUDUSD(signal.symbol); + bool isNZDUSD = _symbolParser.IsNZDUSD(signal.symbol); + bool isUSDCAD = _symbolParser.IsUSDCAD(signal.symbol); + bool isEURCAD = _symbolParser.IsEURCAD(signal.symbol); + bool isDowJones = _symbolParser.IsDowJones(signal.symbol); + + // + if (!force) + { + // + if (isEURUSD) + { + // + result = + _eurusdLongParser.IsFiltered(conditions); + } + else if (isGBPUSD) + { + // + result = + _gbpusdLongParser.IsFiltered(conditions); + } + else if (isEURGBP) + { + // + result = + _eurgbpLongParser.IsFiltered(conditions); + } + else if (isUSDJPY) + { + // + result = + _usdjpyLongParser.IsFiltered(conditions); + } + else if (isEURJPY) + { + // + result = + _eurjpyLongParser.IsFiltered(conditions); + } + else if (isUSDCHF) + { + // + result = + _usdchfLongParser.IsFiltered(conditions); + } + else if (isEURCHF) + { + // + result = + _eurchfLongParser.IsFiltered(conditions); + } + else if (isXAUUSD) + { + // + result = + _xauusdLongParser.IsFiltered(conditions); + } + else if (isAUDUSD) + { + // + result = + _audusdLongParser.IsFiltered(conditions); + } + else if (isNZDUSD) + { + // + result = + _nzdusdLongParser.IsFiltered(conditions); + } + else if (isUSDCAD) + { + // + result = + _usdcadLongParser.IsFiltered(conditions); + } + else if (isEURCAD) + { + // + result = + _eurcadLongParser.IsFiltered(conditions); + } + else if (isDowJones) + { + // + result = + _dowjonesLongParser.IsFiltered(conditions); + } + } + else + { + // + result = + // + _eurusdLongParser.IsFiltered(conditions) + // + || + // + _gbpusdLongParser.IsFiltered(conditions) + // + || + // + _eurgbpLongParser.IsFiltered(conditions) + // + || + // + _usdjpyLongParser.IsFiltered(conditions) + // + || + // + _eurjpyLongParser.IsFiltered(conditions) + // + || + // + _usdchfLongParser.IsFiltered(conditions) + // + || + // + _eurchfLongParser.IsFiltered(conditions) + // + || + // + _xauusdLongParser.IsFiltered(conditions) + // + || + // + _audusdLongParser.IsFiltered(conditions) + // + || + // + _nzdusdLongParser.IsFiltered(conditions) + // + || + // + _usdcadLongParser.IsFiltered(conditions) + // + || + // + _eurcadLongParser.IsFiltered(conditions) + // + || + // + _dowjonesLongParser.IsFiltered(conditions) + // + ; + } + + // + return result; + } + + // + // Filter Short Signals ... + bool IsShortFiltered( + XSignal &signal, + XCHStrategyConditions &conditions, + bool force = false // + ) + { + // + bool result = false; + + // + bool isEURUSD = _symbolParser.IsEURUSD(signal.symbol); + bool isGBPUSD = _symbolParser.IsGBPUSD(signal.symbol); + bool isEURGBP = _symbolParser.IsEURGBP(signal.symbol); + bool isXAUUSD = _symbolParser.IsXAUUSD(signal.symbol); + bool isUSDJPY = _symbolParser.IsUSDJPY(signal.symbol); + bool isEURJPY = _symbolParser.IsEURJPY(signal.symbol); + bool isUSDCHF = _symbolParser.IsUSDCHF(signal.symbol); + bool isEURCHF = _symbolParser.IsEURCHF(signal.symbol); + bool isAUDUSD = _symbolParser.IsAUDUSD(signal.symbol); + bool isNZDUSD = _symbolParser.IsNZDUSD(signal.symbol); + bool isUSDCAD = _symbolParser.IsUSDCAD(signal.symbol); + bool isEURCAD = _symbolParser.IsEURCAD(signal.symbol); + bool isDowJones = _symbolParser.IsDowJones(signal.symbol); + + // + if (!force) + { + // + if (isEURUSD) + { + // + result = + _eurusdShortParser.IsFiltered(conditions); + } + else if (isGBPUSD) + { + // + result = + _gbpusdShortParser.IsFiltered(conditions); + } + else if (isEURGBP) + { + // + result = + _eurgbpShortParser.IsFiltered(conditions); + } + else if (isUSDJPY) + { + // + result = + _usdjpyShortParser.IsFiltered(conditions); + } + else if (isEURJPY) + { + // + result = + _eurjpyShortParser.IsFiltered(conditions); + } + else if (isUSDCHF) + { + // + result = + _usdchfShortParser.IsFiltered(conditions); + } + else if (isEURCHF) + { + // + result = + _eurchfShortParser.IsFiltered(conditions); + } + else if (isXAUUSD) + { + // + result = + _xauusdShortParser.IsFiltered(conditions); + } + else if (isAUDUSD) + { + // + result = + _audusdShortParser.IsFiltered(conditions); + } + else if (isNZDUSD) + { + // + result = + _nzdusdShortParser.IsFiltered(conditions); + } + else if (isUSDCAD) + { + // + result = + _usdcadShortParser.IsFiltered(conditions); + } + else if (isEURCAD) + { + // + result = + _eurcadShortParser.IsFiltered(conditions); + } + else if (isDowJones) + { + // + result = + _dowjonesShortParser.IsFiltered(conditions); + } + } + else + { + // + result = + // + _eurusdShortParser.IsFiltered(conditions) + // + || + // + _gbpusdShortParser.IsFiltered(conditions) + // + || + // + _eurgbpShortParser.IsFiltered(conditions) + // + || + // + _usdjpyShortParser.IsFiltered(conditions) + // + || + // + _eurjpyShortParser.IsFiltered(conditions) + // + || + // + _usdchfShortParser.IsFiltered(conditions) + // + || + // + _eurchfShortParser.IsFiltered(conditions) + // + || + // + _xauusdShortParser.IsFiltered(conditions) + // + || + // + _audusdShortParser.IsFiltered(conditions) + // + || + // + _nzdusdShortParser.IsFiltered(conditions) + // + || + // + _usdcadShortParser.IsFiltered(conditions) + // + || + // + _eurcadShortParser.IsFiltered(conditions) + // + || + // + _dowjonesShortParser.IsFiltered(conditions) + // + ; + } + + // + return result; + } + +}; + +// \ No newline at end of file diff --git a/Parsers/x-saherelm.xch.parser.mq5 b/Parsers/x-saherelm.xch.parser.mq5 index 2c40d59a..75440fe8 100644 --- a/Parsers/x-saherelm.xch.parser.mq5 +++ b/Parsers/x-saherelm.xch.parser.mq5 @@ -25,32 +25,7 @@ #include "../Strategies/x-saherelm.xch.strategy.mq5" // -#include "../Parsers/x-saherelm.xch.dowj.long.parser.mq5" -#include "../Parsers/x-saherelm.xch.dowj.short.parser.mq5" -#include "../Parsers/x-saherelm.xch.eurgbp.long.parser.mq5" -#include "../Parsers/x-saherelm.xch.eurgbp.short.parser.mq5" -#include "../Parsers/x-saherelm.xch.eurjpy.long.parser.mq5" -#include "../Parsers/x-saherelm.xch.eurjpy.short.parser.mq5" -#include "../Parsers/x-saherelm.xch.eurchf.long.parser.mq5" -#include "../Parsers/x-saherelm.xch.eurchf.short.parser.mq5" -#include "../Parsers/x-saherelm.xch.audusd.long.parser.mq5" -#include "../Parsers/x-saherelm.xch.audusd.short.parser.mq5" -#include "../Parsers/x-saherelm.xch.nzdusd.long.parser.mq5" -#include "../Parsers/x-saherelm.xch.nzdusd.short.parser.mq5" -#include "../Parsers/x-saherelm.xch.usdcad.long.parser.mq5" -#include "../Parsers/x-saherelm.xch.usdcad.short.parser.mq5" -#include "../Parsers/x-saherelm.xch.eurcad.long.parser.mq5" -#include "../Parsers/x-saherelm.xch.eurcad.short.parser.mq5" -#include "../Parsers/x-saherelm.xch.eurusd.long.parser.mq5" -#include "../Parsers/x-saherelm.xch.eurusd.short.parser.mq5" -#include "../Parsers/x-saherelm.xch.usdjpy.long.parser.mq5" -#include "../Parsers/x-saherelm.xch.usdjpy.short.parser.mq5" -#include "../Parsers/x-saherelm.xch.usdchf.long.parser.mq5" -#include "../Parsers/x-saherelm.xch.usdchf.short.parser.mq5" -#include "../Parsers/x-saherelm.xch.gbpusd.long.parser.mq5" -#include "../Parsers/x-saherelm.xch.gbpusd.short.parser.mq5" -#include "../Parsers/x-saherelm.xch.xauusd.long.parser.mq5" -#include "../Parsers/x-saherelm.xch.xauusd.short.parser.mq5" +#include "./AMarkets/x-saherelm.xch.amarkets.parser.mq5" // // Conditions Parser ... @@ -64,73 +39,10 @@ struct XCHStartegyConditionsParser // XSCAccount _account; - XSymbolParser _symbolParser; XMarketParser _marketParser; // - // EURUSD ... - XCHStartegyEURUSDLongConditionsParser _eurusdLongParser; - XCHStartegyEURUSDShortConditionsParser _eurusdShortParser; - - // - // GBPUSD ... - XCHStartegyGBPUSDLongConditionsParser _gbpusdLongParser; - XCHStartegyGBPUSDShortConditionsParser _gbpusdShortParser; - - // - // EURGBP ... - XCHStartegyEURGBPLongConditionsParser _eurgbpLongParser; - XCHStartegyEURGBPShortConditionsParser _eurgbpShortParser; - - // - // USDJPY ... - XCHStartegyUSDJPYLongConditionsParser _usdjpyLongParser; - XCHStartegyUSDJPYShortConditionsParser _usdjpyShortParser; - - // - // EURJPY ... - XCHStartegyEURJPYLongConditionsParser _eurjpyLongParser; - XCHStartegyEURJPYShortConditionsParser _eurjpyShortParser; - - // - // USDCHF ... - XCHStartegyUSDCHFLongConditionsParser _usdchfLongParser; - XCHStartegyUSDCHFShortConditionsParser _usdchfShortParser; - - // - // EURCHF ... - XCHStartegyEURCHFLongConditionsParser _eurchfLongParser; - XCHStartegyEURCHFShortConditionsParser _eurchfShortParser; - - // - // XAUUSD ... - XCHStartegyXAUUSDLongConditionsParser _xauusdLongParser; - XCHStartegyXAUUSDShortConditionsParser _xauusdShortParser; - - // - // DOWJONES ... - XCHStartegyDOWJONESLongConditionsParser _dowjonesLongParser; - XCHStartegyDOWJONESShortConditionsParser _dowjonesShortParser; - - // - // AUDUSD ... - XCHStartegyAUDUSDLongConditionsParser _audusdLongParser; - XCHStartegyAUDUSDShortConditionsParser _audusdShortParser; - - // - // NZDUSD ... - XCHStartegyNZDUSDLongConditionsParser _nzdusdLongParser; - XCHStartegyNZDUSDShortConditionsParser _nzdusdShortParser; - - // - // USDCAD ... - XCHStartegyUSDCADLongConditionsParser _usdcadLongParser; - XCHStartegyUSDCADShortConditionsParser _usdcadShortParser; - - // - // EURCAD ... - XCHStartegyEURCADLongConditionsParser _eurcadLongParser; - XCHStartegyEURCADShortConditionsParser _eurcadShortParser; + XCHStartegyAMarketsConditionsParser _amarketsParser; // string GenerateSignalConditions( @@ -857,372 +769,32 @@ struct XCHStartegyConditionsParser return result; } - // - bool isLong = IsLong(signal.type); - - // - result = - // - isLong - ? IsLongFiltered( - signal, - conditions, - force // - ) - : IsShortFiltered( - signal, - conditions, - force // - ) - // - ; - - // - return result; - } - - // - // Filter Long Signals ... - bool IsLongFiltered( - XSignal &signal, - XCHStrategyConditions &conditions, - bool force = false // - ) - { - // - bool result = false; - - // - bool isEURUSD = _symbolParser.IsEURUSD(signal.symbol); - bool isGBPUSD = _symbolParser.IsGBPUSD(signal.symbol); - bool isEURGBP = _symbolParser.IsEURGBP(signal.symbol); - bool isXAUUSD = _symbolParser.IsXAUUSD(signal.symbol); - bool isUSDJPY = _symbolParser.IsUSDJPY(signal.symbol); - bool isEURJPY = _symbolParser.IsEURJPY(signal.symbol); - bool isUSDCHF = _symbolParser.IsUSDCHF(signal.symbol); - bool isEURCHF = _symbolParser.IsEURCHF(signal.symbol); - bool isAUDUSD = _symbolParser.IsAUDUSD(signal.symbol); - bool isNZDUSD = _symbolParser.IsNZDUSD(signal.symbol); - bool isUSDCAD = _symbolParser.IsUSDCAD(signal.symbol); - bool isEURCAD = _symbolParser.IsEURCAD(signal.symbol); - bool isDowJones = _symbolParser.IsDowJones(signal.symbol); - // string market = _account.GetCompany(); bool isAMarkets = _marketParser.IsAMarkets(market); + // + bool isAMarketFiltered = _amarketsParser.IsFiltered( + signal, + conditions, + force // + ); + // if (!force) { - // - if (isEURUSD) - { - // - result = - _eurusdLongParser.IsFiltered(conditions); - } - else if (isGBPUSD) - { - // - result = - _gbpusdLongParser.IsFiltered(conditions); - } - else if (isEURGBP) - { - // - result = - _eurgbpLongParser.IsFiltered(conditions); - } - else if (isUSDJPY) - { - // - result = - _usdjpyLongParser.IsFiltered(conditions); - } - else if (isEURJPY) - { - // - result = - _eurjpyLongParser.IsFiltered(conditions); - } - else if (isUSDCHF) - { - // - result = - _usdchfLongParser.IsFiltered(conditions); - } - else if (isEURCHF) - { - // - result = - _eurchfLongParser.IsFiltered(conditions); - } - else if (isXAUUSD) - { - // - result = - _xauusdLongParser.IsFiltered(conditions); - } - else if (isAUDUSD) - { - // - result = - _audusdLongParser.IsFiltered(conditions); - } - else if (isNZDUSD) - { - // - result = - _nzdusdLongParser.IsFiltered(conditions); - } - else if (isUSDCAD) - { - // - result = - _usdcadLongParser.IsFiltered(conditions); - } - else if (isEURCAD) - { - // - result = - _eurcadLongParser.IsFiltered(conditions); - } - else if (isDowJones) - { - // - result = - _dowjonesLongParser.IsFiltered(conditions); - } + result = isAMarketFiltered; } else { // result = // - _eurusdLongParser.IsFiltered(conditions) + isAMarketFiltered // || // - _gbpusdLongParser.IsFiltered(conditions) - // - || - // - _eurgbpLongParser.IsFiltered(conditions) - // - || - // - _usdjpyLongParser.IsFiltered(conditions) - // - || - // - _eurjpyLongParser.IsFiltered(conditions) - // - || - // - _usdchfLongParser.IsFiltered(conditions) - // - || - // - _eurchfLongParser.IsFiltered(conditions) - // - || - // - _xauusdLongParser.IsFiltered(conditions) - // - || - // - _audusdLongParser.IsFiltered(conditions) - // - || - // - _nzdusdLongParser.IsFiltered(conditions) - // - || - // - _usdcadLongParser.IsFiltered(conditions) - // - || - // - _eurcadLongParser.IsFiltered(conditions) - // - || - // - _dowjonesLongParser.IsFiltered(conditions) - // - ; - } - - // - return result; - } - - // - // Filter Short Signals ... - bool IsShortFiltered( - XSignal &signal, - XCHStrategyConditions &conditions, - bool force = false // - ) - { - // - bool result = false; - - // - bool isEURUSD = _symbolParser.IsEURUSD(signal.symbol); - bool isGBPUSD = _symbolParser.IsGBPUSD(signal.symbol); - bool isEURGBP = _symbolParser.IsEURGBP(signal.symbol); - bool isXAUUSD = _symbolParser.IsXAUUSD(signal.symbol); - bool isUSDJPY = _symbolParser.IsUSDJPY(signal.symbol); - bool isEURJPY = _symbolParser.IsEURJPY(signal.symbol); - bool isUSDCHF = _symbolParser.IsUSDCHF(signal.symbol); - bool isEURCHF = _symbolParser.IsEURCHF(signal.symbol); - bool isAUDUSD = _symbolParser.IsAUDUSD(signal.symbol); - bool isNZDUSD = _symbolParser.IsNZDUSD(signal.symbol); - bool isUSDCAD = _symbolParser.IsUSDCAD(signal.symbol); - bool isEURCAD = _symbolParser.IsEURCAD(signal.symbol); - bool isDowJones = _symbolParser.IsDowJones(signal.symbol); - - // - string market = _account.GetCompany(); - bool isAMarkets = _marketParser.IsAMarkets(market); - - // - if (!force) - { - // - if (isEURUSD) - { - // - result = - _eurusdShortParser.IsFiltered(conditions); - } - else if (isGBPUSD) - { - // - result = - _gbpusdShortParser.IsFiltered(conditions); - } - else if (isEURGBP) - { - // - result = - _eurgbpShortParser.IsFiltered(conditions); - } - else if (isUSDJPY) - { - // - result = - _usdjpyShortParser.IsFiltered(conditions); - } - else if (isEURJPY) - { - // - result = - _eurjpyShortParser.IsFiltered(conditions); - } - else if (isUSDCHF) - { - // - result = - _usdchfShortParser.IsFiltered(conditions); - } - else if (isEURCHF) - { - // - result = - _eurchfShortParser.IsFiltered(conditions); - } - else if (isXAUUSD) - { - // - result = - _xauusdShortParser.IsFiltered(conditions); - } - else if (isAUDUSD) - { - // - result = - _audusdShortParser.IsFiltered(conditions); - } - else if (isNZDUSD) - { - // - result = - _nzdusdShortParser.IsFiltered(conditions); - } - else if (isUSDCAD) - { - // - result = - _usdcadShortParser.IsFiltered(conditions); - } - else if (isEURCAD) - { - // - result = - _eurcadShortParser.IsFiltered(conditions); - } - else if (isDowJones) - { - // - result = - _dowjonesShortParser.IsFiltered(conditions); - } - } - else - { - // - result = - // - _eurusdShortParser.IsFiltered(conditions) - // - || - // - _gbpusdShortParser.IsFiltered(conditions) - // - || - // - _eurgbpShortParser.IsFiltered(conditions) - // - || - // - _usdjpyShortParser.IsFiltered(conditions) - // - || - // - _eurjpyShortParser.IsFiltered(conditions) - // - || - // - _usdchfShortParser.IsFiltered(conditions) - // - || - // - _eurchfShortParser.IsFiltered(conditions) - // - || - // - _xauusdShortParser.IsFiltered(conditions) - // - || - // - _audusdShortParser.IsFiltered(conditions) - // - || - // - _nzdusdShortParser.IsFiltered(conditions) - // - || - // - _usdcadShortParser.IsFiltered(conditions) - // - || - // - _eurcadShortParser.IsFiltered(conditions) - // - || - // - _dowjonesShortParser.IsFiltered(conditions) + false // ; }