add Data Collector to Expert Class and implement Configs and Inputs Saving ...
This commit is contained in:
@@ -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) +
|
||||
|
||||
@@ -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 //
|
||||
);
|
||||
}
|
||||
|
||||
//
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user