diff --git a/Libraries/x-saherelm.common.extensions.lib.mq5 b/Libraries/x-saherelm.common.extensions.lib.mq5 index 1dc48dc5..1fa8f880 100644 --- a/Libraries/x-saherelm.common.extensions.lib.mq5 +++ b/Libraries/x-saherelm.common.extensions.lib.mq5 @@ -1841,6 +1841,44 @@ string ToString(T value) return (string)value; } +string Trim(string value) +{ + // + string result = NULL; + + // + result = value; + + // + StringTrimRight(result); + StringTrimLeft(result); + + // + return result; +} + +template +bool IsBoolean(T value) +{ + // + bool result = false; + + // + string normalizedValue = ToString(value); + StringToLower(normalizedValue); + normalizedValue = Trim(normalizedValue); + + // + result = + !IsValid(normalizedValue) + ? false + : (normalizedValue == "true" || + normalizedValue == "false"); + + // + return result; +} + // // Used In Report or Summary Generators ... string ToString( @@ -1855,7 +1893,13 @@ string ToString( string result = NULL; // - result = (value || !ignoreFalseConditions) + bool canSet = + IsBoolean(value) + ? (bool)value || !ignoreFalseConditions + : true; + + // + result = canSet ? prefix + prefixSeparator + " " + ToString(value) + diff --git a/XCATBEA/Classes/xcatbea.expert.class.mq5 b/XCATBEA/Classes/xcatbea.expert.class.mq5 index fc5a42dc..9677582c 100644 --- a/XCATBEA/Classes/xcatbea.expert.class.mq5 +++ b/XCATBEA/Classes/xcatbea.expert.class.mq5 @@ -179,6 +179,7 @@ class XCXCATBEAExpert : public XCBase XCGuard *eaGuard; // EA Scope Guard Handler ... XCVolume *eaVolume; // EA Scope Voluem Handler ... XTimeTracker eaTimeTracker; // EA Scope Time Tracker ... + XCDataCollector *eaCollector; // EA Scope Data Collector ... XCXCATBEASignaller *eaSignallers[]; // EA Signallers Collection ... XCXCATBEATradeManager *eaTradeManager; // EA Scope Trade Manager ... @@ -551,6 +552,12 @@ class XCXCATBEAExpert : public XCBase eaTrade // ); + // + // Initialize Data Collector ... + eaCollector = new XCDataCollector(); + string mPath = eaAlert.GetPrefix() + "\\" + "Configs"; + eaCollector.Path(mPath); + // // Initialize Trae Manager ... eaTradeManager = new XCXCATBEATradeManager( @@ -856,6 +863,9 @@ class XCXCATBEAExpert : public XCBase // string message = "Initialized Successfully ..."; eaAlert.SendAlert(message); + + // + SaveConfigs(); } else { @@ -895,6 +905,10 @@ class XCXCATBEAExpert : public XCBase delete eaTradeManager; ZeroMemory(eaTradeManager); + // + delete eaCollector; + ZeroMemory(eaCollector); + // string message = "DeInitialized Successfully ..."; eaAlert.SendAlert(message); @@ -1415,6 +1429,237 @@ class XCXCATBEAExpert : public XCBase TOnPositionsChanged mPositionsChangedEventHandlers[]; TOnTradeStateChanged mTradeStateChangedEventHandlers[]; + // + void SaveConfigs() + { + // + string content = NULL; + + // + string separator = "\n"; + bool ignoreFalseConditions = false; + + // + // Preparng Condtions ... + content += + // + "-----------------------" + separator + + "Validating: " + separator + + "-----------------------" + separator + + ToString("eaForceHasSwing", eaForceHasSwing, ignoreFalseConditions, separator) + + ToString("eaForceOBBarType", eaForceOBBarType, ignoreFalseConditions, separator) + + ToString("eaForceFVGBarType", eaForceFVGBarType, ignoreFalseConditions, separator) + + ToString("eaForceHasFLiquidity", eaForceHasFLiquidity, ignoreFalseConditions, separator) + + ToString("eaForceHasRLiquidity", eaForceHasRLiquidity, ignoreFalseConditions, separator) + + ToString("eaValidateGapSequence", eaValidateGapSequence, ignoreFalseConditions, separator) + + ToString("eaValidateBlockEdgeBreakout", eaValidateBlockEdgeBreakout, ignoreFalseConditions, separator) + + // + "-----------------------" + separator + + "Filtering: " + separator + + "-----------------------" + separator + + ToString("eaFilterBasedOnKI", eaFilterBasedOnKI, ignoreFalseConditions, separator) + + ToString("eaFilterBasedOnPV", eaFilterBasedOnPV, ignoreFalseConditions, separator) + + ToString("eaFilterBasedOnSar", eaFilterBasedOnSar, ignoreFalseConditions, separator) + + ToString("eaForceSarSwitched", eaForceSarSwitched, ignoreFalseConditions, separator) + + ToString("eaForceSarOnBothSide", eaForceSarOnBothSide, ignoreFalseConditions, separator) + + ToString("eaForceSarHasBreakout", eaForceSarHasBreakout, ignoreFalseConditions, separator) + + ToString("eaForceSarHasReversalSide", eaForceSarHasReversalSide, ignoreFalseConditions, separator) + + ToString("eaFilterBasedOnRSI", eaFilterBasedOnRSI, ignoreFalseConditions, separator) + + ToString("eaForceHasRSITrending", eaForceHasRSITrending, ignoreFalseConditions, separator) + + ToString("eaForceHasRSIVPattern", eaForceHasRSIVPattern, ignoreFalseConditions, separator) + + ToString("eaForceHasRSICrossing", eaForceHasRSICrossing, ignoreFalseConditions, separator) + + ToString("eaFilterBasedOnADX", eaFilterBasedOnADX, ignoreFalseConditions, separator) + + ToString("eaForceHasADXTrending", eaForceHasADXTrending, ignoreFalseConditions, separator) + + ToString("eaForceHasADXCrossing", eaForceHasADXCrossing, ignoreFalseConditions, separator) + + ToString("eaFilterBasedOnATR", eaFilterBasedOnATR, ignoreFalseConditions, separator) + + ToString("eaForceHasATRTrending", eaForceHasATRTrending, ignoreFalseConditions, separator) + + ToString("eaForceHasATRBreakout", eaForceHasATRBreakout, ignoreFalseConditions, separator) + + ToString("eaFilterBasedOnTrend", eaFilterBasedOnTrend, ignoreFalseConditions, separator) + + ToString("eaForceHasTrendDir", eaForceHasTrendDir, ignoreFalseConditions, separator) + + ToString("eaForceHasTrendPlace", eaForceHasTrendPlace, ignoreFalseConditions, separator) + + ToString("eaForceHasTrendChange", eaForceHasTrendChange, ignoreFalseConditions, separator) + + ToString("eaForceHasTrendTrending", eaForceHasTrendTrending, ignoreFalseConditions, separator) + + ToString("eaForceHasTrendRejection", eaForceHasTrendRejection, ignoreFalseConditions, separator) + + ToString("eaForceHasTrendLineInside", eaForceHasTrendLineInside, ignoreFalseConditions, separator) + + ToString("eaForceHasTrendDirOnBothSide", eaForceHasTrendDirOnBothSide, ignoreFalseConditions, separator) + + ToString("eaFilterBasedOnDelta", eaFilterBasedOnDelta, ignoreFalseConditions, separator) + + ToString("eaFilterBasedOnVolume", eaFilterBasedOnVolume, ignoreFalseConditions, separator) + + ToString("eaFilterBasedOnSignalBar", eaFilterBasedOnSignalBar, ignoreFalseConditions, separator) + + ToString("eaFilterBasedOnHKSignalBar", eaFilterBasedOnHKSignalBar, ignoreFalseConditions, separator) + + // + "" + // + ; + + // + // Try to Save Condtions ... + string fileName = eaCollector.GetFilePath("XConfigs"); + bool has = IsValid(fileName); + if (!has) + { + return; + } + + // + eaCollector.Save( + fileName, + content // + ); + + // + // Try to Save Inputs ... + fileName = eaCollector.GetFilePath("XInputs"); + has = IsValid(fileName); + if (!has) + { + return; + } + + // + // Preparing Inputs String Reperesentation ... + content = NULL; + content += + // + "//" + separator + + "// Common ..." + separator + + ToString("eaMagicNumber", eaMagicNumber, separator) + + ToString("eaSlippage", eaSlippage, separator) + + ToString("eaLogSuffix", eaLogSuffix, separator) + + "" + separator + + "//" + separator + + "// Detector ..." + separator + + "" + separator + + "//" + separator + + "// Validating ..." + separator + + ToString("eaForceHasSwing", eaForceHasSwing, ignoreFalseConditions, separator) + + ToString("eaForceOBBarType", eaForceOBBarType, ignoreFalseConditions, separator) + + ToString("eaMinRequiredOBBar", eaMinRequiredOBBar, ignoreFalseConditions, separator) + + ToString("eaForceFVGBarType", eaForceFVGBarType, ignoreFalseConditions, separator) + + ToString("eaLiquidityLoopback", eaLiquidityLoopback, ignoreFalseConditions, separator) + + ToString("eaMaxAllowedRange", ToString(eaMaxAllowedRange), separator) + + ToString("eaMinAllowedRange", ToString(eaMinAllowedRange), separator) + + ToString("eaForceHasFLiquidity", eaForceHasFLiquidity, ignoreFalseConditions, separator) + + ToString("eaForceHasRLiquidity", eaForceHasRLiquidity, ignoreFalseConditions, separator) + + ToString("eaValidateGapSequence", eaValidateGapSequence, ignoreFalseConditions, separator) + + ToString("eaMinAllowedBlockLength", eaMinAllowedBlockLength, ignoreFalseConditions, separator) + + ToString("eaValidateBlockEdgeBreakout", eaValidateBlockEdgeBreakout, ignoreFalseConditions, separator) + + "" + separator + + "//" + separator + + "// Filtering ..." + separator + + ToString("eaFilterBasedOnKI", eaFilterBasedOnKI, ignoreFalseConditions, separator) + + ToString("eaFilterBasedOnPV", eaFilterBasedOnPV, ignoreFalseConditions, separator) + + ToString("eaBosLoopback", eaBosLoopback, ignoreFalseConditions, separator) + + ToString("eaFilterBasedOnSar", eaFilterBasedOnSar, ignoreFalseConditions, separator) + + ToString("eaForceSarSwitched", eaForceSarSwitched, ignoreFalseConditions, separator) + + ToString("eaForceSarOnBothSide", eaForceSarOnBothSide, ignoreFalseConditions, separator) + + ToString("eaForceSarHasBreakout", eaForceSarHasBreakout, ignoreFalseConditions, separator) + + ToString("eaForceSarHasReversalSide", eaForceSarHasReversalSide, ignoreFalseConditions, separator) + + ToString("eaFilterBasedOnRSI", eaFilterBasedOnRSI, ignoreFalseConditions, separator) + + ToString("eaForceHasRSITrending", eaForceHasRSITrending, ignoreFalseConditions, separator) + + ToString("eaForceHasRSIVPattern", eaForceHasRSIVPattern, ignoreFalseConditions, separator) + + ToString("eaForceHasRSICrossing", eaForceHasRSICrossing, ignoreFalseConditions, separator) + + ToString("eaFilterBasedOnADX", eaFilterBasedOnADX, ignoreFalseConditions, separator) + + ToString("eaForceHasADXTrending", eaForceHasADXTrending, ignoreFalseConditions, separator) + + ToString("eaForceHasADXCrossing", eaForceHasADXCrossing, ignoreFalseConditions, separator) + + ToString("eaFilterBasedOnATR", eaFilterBasedOnATR, ignoreFalseConditions, separator) + + ToString("eaForceHasATRTrending", eaForceHasATRTrending, ignoreFalseConditions, separator) + + ToString("eaForceHasATRBreakout", eaForceHasATRBreakout, ignoreFalseConditions, separator) + + ToString("eaFilterBasedOnTrend", eaFilterBasedOnTrend, ignoreFalseConditions, separator) + + ToString("eaForceHasTrendDir", eaForceHasTrendDir, ignoreFalseConditions, separator) + + ToString("eaForceHasTrendPlace", eaForceHasTrendPlace, ignoreFalseConditions, separator) + + ToString("eaForceHasTrendChange", eaForceHasTrendChange, ignoreFalseConditions, separator) + + ToString("eaForceHasTrendTrending", eaForceHasTrendTrending, ignoreFalseConditions, separator) + + ToString("eaForceHasTrendRejection", eaForceHasTrendRejection, ignoreFalseConditions, separator) + + ToString("eaForceHasTrendLineInside", eaForceHasTrendLineInside, ignoreFalseConditions, separator) + + ToString("eaForceHasTrendDirOnBothSide", eaForceHasTrendDirOnBothSide, ignoreFalseConditions, separator) + + ToString("eaFilterBasedOnDelta", eaFilterBasedOnDelta, ignoreFalseConditions, separator) + + ToString("eaFilterBasedOnVolume", eaFilterBasedOnVolume, ignoreFalseConditions, separator) + + ToString("eaFilterBasedOnSignalBar", eaFilterBasedOnSignalBar, ignoreFalseConditions, separator) + + ToString("eaFilterBasedOnHKSignalBar", eaFilterBasedOnHKSignalBar, ignoreFalseConditions, separator) + + "" + separator + + "//" + separator + + "// Signal ..." + separator + + ToString("eaSignalR2R", eaSignalR2R, ignoreFalseConditions, separator) + + ToString("eaSLATRMultiplier", ToString(eaSLATRMultiplier), separator) + + ToString("eaAllowSignallingBasedOnConditions", eaAllowSignallingBasedOnConditions, ignoreFalseConditions, separator) + + ToString("eaAllowSignallingBasedOnTriggerBlocks", eaAllowSignallingBasedOnTriggerBlocks, ignoreFalseConditions, separator) + + ToString("eaAllowSignallingBasedOnTriggerBlocksInsideOther", eaAllowSignallingBasedOnTriggerBlocksInsideOther, ignoreFalseConditions, separator) + + ToString("eaSecondsTriggersSLUsingFirstTriggerBlock", eaSecondsTriggersSLUsingFirstTriggerBlock, ignoreFalseConditions, separator) + + ToString("eaApplyValidateAndFilterOnSelectInsideOthers", eaApplyValidateAndFilterOnSelectInsideOthers, ignoreFalseConditions, separator) + + ToString("eaAllowSignallingConditions1", eaAllowSignallingConditions1, ignoreFalseConditions, separator) + + ToString("eaAllowSignallingConditions2", eaAllowSignallingConditions2, ignoreFalseConditions, separator) + + ToString("eaAllowSignallingConditions3", eaAllowSignallingConditions3, ignoreFalseConditions, separator) + + ToString("eaAllowSignallingConditions4", eaAllowSignallingConditions4, ignoreFalseConditions, separator) + + ToString("eaAllowSignallingConditions5", eaAllowSignallingConditions5, ignoreFalseConditions, separator) + + ToString("eaAllowSignallingConditions6", eaAllowSignallingConditions6, ignoreFalseConditions, separator) + + "" + separator + + "//" + separator + + "// Volume ..." + separator + + ToString("eaVolumeSelect", ToString(eaVolumeSelect), separator) + + ToString("eaStaticVoluem", ToString(eaStaticVoluem), separator) + + ToString("eaDynamicVolumeStepBalance", ToString(eaDynamicVolumeStepBalance), separator) + + ToString("eaDynamicVolumeStepVolume", ToString(eaDynamicVolumeStepVolume), separator) + + ToString("eaConstantRiskBalance", ToString(eaConstantRiskBalance), separator) + + ToString("eaConstantPercent", ToString(eaConstantPercent), separator) + + ToString("eaConstantBalance", ToString(eaConstantBalance), separator) + + "" + separator + + "//" + separator + + "// Management ..." + separator + + ToString("eaSymbols", eaSymbols, separator) + + ToString("eaAllowGuards", eaAllowGuards, ignoreFalseConditions, separator) + + ToString("eaAllowTrade", eaAllowTrade, ignoreFalseConditions, separator) + + ToString("eaAllowLongs", eaAllowLongs, ignoreFalseConditions, separator) + + ToString("eaAllowShorts", eaAllowShorts, ignoreFalseConditions, separator) + + ToString("eaSessions", eaSessions, separator) + + ToString("eaRestrictionsPeriod", ToString(eaRestrictionsPeriod), separator) + + ToString("eaMaxAllowedTPs", eaMaxAllowedTPs, ignoreFalseConditions, separator) + + ToString("eaMaxAllowedSLs", eaMaxAllowedSLs, ignoreFalseConditions, separator) + + ToString("eaMaxAllowedTrades", eaMaxAllowedTrades, ignoreFalseConditions, separator) + + ToString("eaMaxAllowedPositions", eaMaxAllowedPositions, ignoreFalseConditions, separator) + + ToString("eaMaxAllowedSpread", ToString(eaMaxAllowedSpread), separator) + + ToString("eaMaxAllowedDrawdownFactor", ToString(eaMaxAllowedDrawdownFactor), separator) + + ToString("eaCloseAllOpenTradesAt", eaCloseAllOpenTradesAt, separator) + + "" + separator + + "//" + separator + + "// Alert ..." + separator + + ToString("eaEnableAlerts", eaEnableAlerts, ignoreFalseConditions, separator) + + ToString("eaSaveAlerts", eaSaveAlerts, ignoreFalseConditions, separator) + + ToString("eaLogAlerts", eaLogAlerts, ignoreFalseConditions, separator) + + ToString("eaMailAlerts", eaMailAlerts, ignoreFalseConditions, separator) + + ToString("eaPushAlerts", eaPushAlerts, ignoreFalseConditions, separator) + + ToString("eaTerminalAlerts", eaTerminalAlerts, ignoreFalseConditions, separator) + + "" + separator + + "//" + separator + + "// Time Report ..." + separator + + ToString("eaReportNewMonths", eaReportNewMonths, ignoreFalseConditions, separator) + + ToString("eaReportNewWeeks", eaReportNewWeeks, ignoreFalseConditions, separator) + + ToString("eaReportNewDays", eaReportNewDays, ignoreFalseConditions, separator) + + ToString("eaReportNewHours", eaReportNewHours, ignoreFalseConditions, separator) + + ToString("eaReportTrades", eaReportTrades, ignoreFalseConditions, separator) + + ToString("eaReportSignals", eaReportSignals, ignoreFalseConditions, separator) + + ToString("eaReportProtector", eaReportProtector, ignoreFalseConditions, separator) + + ToString("eaReportRestrictions", eaReportRestrictions, ignoreFalseConditions, separator) + + ToString("eaReportAfterTradesBalance", eaReportAfterTradesBalance, ignoreFalseConditions, separator) + + "" + separator + + "//" + separator + + "// Collector ..." + separator + + ToString("eaSaveTrades", eaSaveTrades, ignoreFalseConditions, separator) + + ToString("eaSaveSignals", eaSaveSignals, ignoreFalseConditions, separator) + + ToString("eaSaveWins", eaSaveWins, ignoreFalseConditions, separator) + + ToString("eaSaveLosts", eaSaveLosts, ignoreFalseConditions, separator) + + ToString("eaSaveRestrictions", eaSaveRestrictions, ignoreFalseConditions, separator) + + // + "" + // + ; + + // + eaCollector.Save( + fileName, + content // + ); + } + // };