add Data Collector to Expert Class and implement Configs and Inputs Saving ...

This commit is contained in:
2025-06-05 22:04:39 +03:30
parent ed9a2c84f3
commit 519dc3b59f
2 changed files with 290 additions and 1 deletions
+45 -1
View File
@@ -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 <typename T>
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) +
+245
View File
@@ -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 //
);
}
//
};