add conditions collector and also complete generate summary ...
need to test ...
This commit is contained in:
@@ -255,6 +255,58 @@ public:
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//
|
||||||
|
// XSC5MarketConditionDataCollector ...
|
||||||
|
class XSC5MarketConditionDataCollector
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Public ...
|
||||||
|
public:
|
||||||
|
//
|
||||||
|
// Constructor ...
|
||||||
|
void XSC5MarketConditionDataCollector()
|
||||||
|
{
|
||||||
|
//
|
||||||
|
XSCDataCollector<X5MarketConditions> mBase;
|
||||||
|
mBase.Clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Cleaning Store ...
|
||||||
|
void Clear()
|
||||||
|
{
|
||||||
|
//
|
||||||
|
XSCDataCollector<X5MarketConditions> mBase;
|
||||||
|
|
||||||
|
//
|
||||||
|
mBase.Clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Add String Content ...
|
||||||
|
bool Add(string content)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
XSCDataCollector<X5MarketConditions> mBase;
|
||||||
|
|
||||||
|
//
|
||||||
|
result = mBase.Add(content);
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Protected ...
|
||||||
|
protected:
|
||||||
|
//
|
||||||
|
// Private ...
|
||||||
|
private:
|
||||||
|
};
|
||||||
|
|
||||||
//
|
//
|
||||||
// X5 Provider Market Conditions ...
|
// X5 Provider Market Conditions ...
|
||||||
class X5MarketConditions : public XSCBaseProviderMarketConditions
|
class X5MarketConditions : public XSCBaseProviderMarketConditions
|
||||||
@@ -700,15 +752,277 @@ public:
|
|||||||
// Generate Summary ...
|
// Generate Summary ...
|
||||||
virtual string GenerateSummary(
|
virtual string GenerateSummary(
|
||||||
const double multiplier = 1, // Score Multiplier
|
const double multiplier = 1, // Score Multiplier
|
||||||
|
const string separator = "\n", // Separator
|
||||||
const bool ignoreFalseConditions = true // Ignore False Conditions
|
const bool ignoreFalseConditions = true // Ignore False Conditions
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
string result = NULL;
|
string result = NULL;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Common ...
|
||||||
|
string commonStr =
|
||||||
|
//
|
||||||
|
"Commons: " + separator +
|
||||||
|
"-----------------------------" +
|
||||||
|
"Time: " + ToString(TimeCurrent()) + separator +
|
||||||
|
//
|
||||||
|
// TODO: Add Scores Later ...
|
||||||
|
""
|
||||||
|
//
|
||||||
|
;
|
||||||
|
|
||||||
|
//
|
||||||
|
// XOBD ...
|
||||||
|
string obdStr =
|
||||||
|
//
|
||||||
|
ToString("isXOBDSwingLow", isXOBDSwingLow, ignoreFalseConditions) +
|
||||||
|
ToString("isXOBDSwingHigh", isXOBDSwingHigh, ignoreFalseConditions) +
|
||||||
|
""
|
||||||
|
//
|
||||||
|
;
|
||||||
|
|
||||||
|
//
|
||||||
|
// ToString("", , ignoreFalseConditions) +
|
||||||
|
|
||||||
|
//
|
||||||
|
// XFI ...
|
||||||
|
string fiStr =
|
||||||
|
//
|
||||||
|
ToString("isXFIPeak", isXFIPeak, ignoreFalseConditions) +
|
||||||
|
ToString("isXFIVale", isXFIVale, ignoreFalseConditions) +
|
||||||
|
ToString("isXFICrossedOverZero", isXFICrossedOverZero, ignoreFalseConditions) +
|
||||||
|
ToString("isXFIOverZero", isXFIOverZero, ignoreFalseConditions) +
|
||||||
|
ToString("isXFICrossedUnderZero", isXFICrossedUnderZero, ignoreFalseConditions) +
|
||||||
|
ToString("isXFIUnderZero", isXFIUnderZero, ignoreFalseConditions) +
|
||||||
|
""
|
||||||
|
//
|
||||||
|
;
|
||||||
|
|
||||||
|
//
|
||||||
|
// XRSI ...
|
||||||
|
string rsiStr =
|
||||||
|
//
|
||||||
|
ToString("isXRSIPeak", isXRSIPeak, ignoreFalseConditions) +
|
||||||
|
ToString("isXRSIVale", isXRSIVale, ignoreFalseConditions) +
|
||||||
|
ToString("isXRSICrossedOverLongExit", isXRSICrossedOverLongExit, ignoreFalseConditions) +
|
||||||
|
ToString("isXRSICrossedOverLongEntry", isXRSICrossedOverLongEntry, ignoreFalseConditions) +
|
||||||
|
ToString("isXRSICrossedUnderShortExit", isXRSICrossedUnderShortExit, ignoreFalseConditions) +
|
||||||
|
ToString("isXRSICrossedUnderShortEntry", isXRSICrossedUnderShortEntry, ignoreFalseConditions) +
|
||||||
|
""
|
||||||
|
//
|
||||||
|
;
|
||||||
|
|
||||||
|
//
|
||||||
|
// XTM ...
|
||||||
|
string tmStr =
|
||||||
|
//
|
||||||
|
ToString("isXTMPeak", isXTMPeak, ignoreFalseConditions) +
|
||||||
|
ToString("isXTMVale", isXTMVale, ignoreFalseConditions) +
|
||||||
|
ToString("isXTMBullish", isXTMBullish, ignoreFalseConditions) +
|
||||||
|
ToString("isXTMBearish", isXTMBearish, ignoreFalseConditions) +
|
||||||
|
ToString("isXTMNeutural", isXTMNeutural, ignoreFalseConditions) +
|
||||||
|
ToString("isXTMEndBullish", isXTMEndBullish, ignoreFalseConditions) +
|
||||||
|
ToString("isXTMEndBearish", isXTMEndBearish, ignoreFalseConditions) +
|
||||||
|
ToString("isXTMStartBullish", isXTMStartBullish, ignoreFalseConditions) +
|
||||||
|
ToString("isXTMStartBearish", isXTMStartBearish, ignoreFalseConditions) +
|
||||||
|
ToString("isXTMEndBullishByNeutural", isXTMEndBullishByNeutural, ignoreFalseConditions) +
|
||||||
|
ToString("isXTMEndBearishByNeutural", isXTMEndBearishByNeutural, ignoreFalseConditions) +
|
||||||
|
ToString("isXTMStartBullishAfterNeutural", isXTMStartBullishAfterNeutural, ignoreFalseConditions) +
|
||||||
|
ToString("isXTMStartBearishAfterNeutural", isXTMStartBearishAfterNeutural, ignoreFalseConditions) +
|
||||||
|
|
||||||
|
""
|
||||||
|
//
|
||||||
|
;
|
||||||
|
|
||||||
|
//
|
||||||
|
// XAMA ...
|
||||||
|
string amaStr =
|
||||||
|
//
|
||||||
|
ToString("isXAMAPeak", isXAMAPeak, ignoreFalseConditions) +
|
||||||
|
ToString("isXAMAVale", isXAMAVale, ignoreFalseConditions) +
|
||||||
|
ToString("isXAMABullish", isXAMABullish, ignoreFalseConditions) +
|
||||||
|
ToString("isXAMABearish", isXAMABearish, ignoreFalseConditions) +
|
||||||
|
ToString("isXAMANeutural", isXAMANeutural, ignoreFalseConditions) +
|
||||||
|
ToString("isXAMAEndBullish", isXAMAEndBullish, ignoreFalseConditions) +
|
||||||
|
ToString("isXAMAEndBearish", isXAMAEndBearish, ignoreFalseConditions) +
|
||||||
|
ToString("isXAMAStartBullish", isXAMAStartBullish, ignoreFalseConditions) +
|
||||||
|
ToString("isXAMAStartBearish", isXAMAStartBearish, ignoreFalseConditions) +
|
||||||
|
ToString("isXAMAEndBullishByNeutural", isXAMAEndBullishByNeutural, ignoreFalseConditions) +
|
||||||
|
ToString("isXAMAEndBearishByNeutural", isXAMAEndBearishByNeutural, ignoreFalseConditions) +
|
||||||
|
ToString("isXAMAStartBullishAfterNeutural", isXAMAStartBullishAfterNeutural, ignoreFalseConditions) +
|
||||||
|
ToString("isXAMAStartBearishAfterNeutural", isXAMAStartBearishAfterNeutural, ignoreFalseConditions) +
|
||||||
|
""
|
||||||
|
//
|
||||||
|
;
|
||||||
|
|
||||||
|
//
|
||||||
|
// XLH ...
|
||||||
|
string lhStr =
|
||||||
|
//
|
||||||
|
ToString("isXLHHHIncreased", isXLHHHIncreased, ignoreFalseConditions) +
|
||||||
|
ToString("isXLHHHDecreased", isXLHHHDecreased, ignoreFalseConditions) +
|
||||||
|
ToString("isXLHLLIncreased", isXLHLLIncreased, ignoreFalseConditions) +
|
||||||
|
ToString("isXLHLLDecreased", isXLHLLDecreased, ignoreFalseConditions) +
|
||||||
|
ToString("isXLHLowAttachedLL", isXLHLowAttachedLL, ignoreFalseConditions) +
|
||||||
|
ToString("isXLHHighAttachedHH", isXLHHighAttachedHH, ignoreFalseConditions) +
|
||||||
|
ToString("isXLHHHSameInLength", isXLHHHSameInLength, ignoreFalseConditions) +
|
||||||
|
ToString("isXLHLLSameInLength", isXLHLLSameInLength, ignoreFalseConditions) +
|
||||||
|
ToString("isXLHPriceOverSignal", isXLHPriceOverSignal, ignoreFalseConditions) +
|
||||||
|
ToString("isXLHPriceUnderSignal", isXLHPriceUnderSignal, ignoreFalseConditions) +
|
||||||
|
ToString("isXLHPriceInSignalRange", isXLHPriceInSignalRange, ignoreFalseConditions) +
|
||||||
|
ToString("isXLHPriceCrossedOverSignal", isXLHPriceCrossedOverSignal, ignoreFalseConditions) +
|
||||||
|
ToString("isXLHPriceCrossedUnderSignal", isXLHPriceCrossedUnderSignal, ignoreFalseConditions) +
|
||||||
|
""
|
||||||
|
//
|
||||||
|
;
|
||||||
|
|
||||||
|
//
|
||||||
|
// XTD ...
|
||||||
|
string tdStr =
|
||||||
|
//
|
||||||
|
ToString("isXTDSignalPeak", isXTDSignalPeak, ignoreFalseConditions) +
|
||||||
|
ToString("isXTDSignalVale", isXTDSignalVale, ignoreFalseConditions) +
|
||||||
|
ToString("isXTDBullishPeak", isXTDBullishPeak, ignoreFalseConditions) +
|
||||||
|
ToString("isXTDBullishVale", isXTDBullishVale, ignoreFalseConditions) +
|
||||||
|
ToString("isXTDBearishPeak", isXTDBearishPeak, ignoreFalseConditions) +
|
||||||
|
ToString("isXTDBearishVale", isXTDBearishVale, ignoreFalseConditions) +
|
||||||
|
ToString("isXTDBullOverBear", isXTDBullOverBear, ignoreFalseConditions) +
|
||||||
|
ToString("isXTDBullUnderBear", isXTDBullUnderBear, ignoreFalseConditions) +
|
||||||
|
ToString("isXTDSignalOverBear", isXTDSignalOverBear, ignoreFalseConditions) +
|
||||||
|
ToString("isXTDSignalUnderBear", isXTDSignalUnderBear, ignoreFalseConditions) +
|
||||||
|
ToString("isXTDBullCrossedOverBear", isXTDBullCrossedOverBear, ignoreFalseConditions) +
|
||||||
|
ToString("isXTDBullCrossedUnderBear", isXTDBullCrossedUnderBear, ignoreFalseConditions) +
|
||||||
|
ToString("isXTDSignalCrossedOverBear", isXTDSignalCrossedOverBear, ignoreFalseConditions) +
|
||||||
|
ToString("isXTDSignalCrossedUnderBear", isXTDSignalCrossedUnderBear, ignoreFalseConditions) +
|
||||||
|
""
|
||||||
|
//
|
||||||
|
;
|
||||||
|
|
||||||
|
//
|
||||||
|
// XTS ...
|
||||||
|
string tsStr =
|
||||||
|
//
|
||||||
|
ToString("isXTSAllSame", isXTSAllSame, ignoreFalseConditions) +
|
||||||
|
ToString("isXTSCurrentMin", isXTSCurrentMin, ignoreFalseConditions) +
|
||||||
|
ToString("isXTSCurrentMax", isXTSCurrentMax, ignoreFalseConditions) +
|
||||||
|
ToString("isXTSCurrentOverFarest", isXTSCurrentOverFarest, ignoreFalseConditions) +
|
||||||
|
ToString("isXTSCurrentOverNearest", isXTSCurrentOverNearest, ignoreFalseConditions) +
|
||||||
|
ToString("isXTSCurrentOverMediest", isXTSCurrentOverMediest, ignoreFalseConditions) +
|
||||||
|
ToString("isXTSCurrentUnderFarest", isXTSCurrentUnderFarest, ignoreFalseConditions) +
|
||||||
|
ToString("isXTSCurrentUnderNearest", isXTSCurrentUnderNearest, ignoreFalseConditions) +
|
||||||
|
ToString("isXTSCurrentUnderMediest", isXTSCurrentUnderMediest, ignoreFalseConditions) +
|
||||||
|
ToString("isXTSCurrentCrossedOverFarest", isXTSCurrentCrossedOverFarest, ignoreFalseConditions) +
|
||||||
|
ToString("isXTSCurrentCrossedOverNearest", isXTSCurrentCrossedOverNearest, ignoreFalseConditions) +
|
||||||
|
ToString("isXTSCurrentCrossedOverMediest", isXTSCurrentCrossedOverMediest, ignoreFalseConditions) +
|
||||||
|
ToString("isXTSCurrentCrossedUnderFarest", isXTSCurrentCrossedUnderFarest, ignoreFalseConditions) +
|
||||||
|
ToString("isXTSCurrentCrossedUnderNearest", isXTSCurrentCrossedUnderNearest, ignoreFalseConditions) +
|
||||||
|
ToString("isXTSCurrentCrossedUnderMediest", isXTSCurrentCrossedUnderMediest, ignoreFalseConditions) +
|
||||||
|
""
|
||||||
|
//
|
||||||
|
;
|
||||||
|
|
||||||
|
//
|
||||||
|
// XCHLH ...
|
||||||
|
string chlhStr =
|
||||||
|
//
|
||||||
|
ToString("isXCHLHSameHHs", isXCHLHSameHHs, ignoreFalseConditions) +
|
||||||
|
ToString("isXCHLHSameLLs", isXCHLHSameLLs, ignoreFalseConditions) +
|
||||||
|
ToString("isXCHLHSCMCHHSame", isXCHLHSCMCHHSame, ignoreFalseConditions) +
|
||||||
|
ToString("isXCHLHSCMCLLSame", isXCHLHSCMCLLSame, ignoreFalseConditions) +
|
||||||
|
ToString("isXCHLHSCLCHHSame", isXCHLHSCLCHHSame, ignoreFalseConditions) +
|
||||||
|
ToString("isXCHLHSCLCLLSame", isXCHLHSCLCLLSame, ignoreFalseConditions) +
|
||||||
|
ToString("isXCHLHMCLCHHSame", isXCHLHMCLCHHSame, ignoreFalseConditions) +
|
||||||
|
ToString("isXCHLHMCLCLLSame", isXCHLHMCLCLLSame, ignoreFalseConditions) +
|
||||||
|
ToString("isXCHLHMCOnTopOfLC", isXCHLHMCOnTopOfLC, ignoreFalseConditions) +
|
||||||
|
ToString("isXCHLHMCInBottomOfLC", isXCHLHMCInBottomOfLC, ignoreFalseConditions) +
|
||||||
|
""
|
||||||
|
//
|
||||||
|
;
|
||||||
|
|
||||||
|
//
|
||||||
|
// XCHMA ...
|
||||||
|
string chmaStr =
|
||||||
|
//
|
||||||
|
ToString("isXCHMASCOverMax", isXCHMASCOverMax, ignoreFalseConditions) +
|
||||||
|
ToString("isXCHMASCOverMin", isXCHMASCOverMin, ignoreFalseConditions) +
|
||||||
|
ToString("isXCHMASCUnderMax", isXCHMASCUnderMax, ignoreFalseConditions) +
|
||||||
|
ToString("isXCHMASCUnderMin", isXCHMASCUnderMin, ignoreFalseConditions) +
|
||||||
|
ToString("isXCHMASCCrossedOverMax", isXCHMASCCrossedOverMax, ignoreFalseConditions) +
|
||||||
|
ToString("isXCHMASCCrossedUnderMax", isXCHMASCCrossedUnderMax, ignoreFalseConditions) +
|
||||||
|
ToString("isXCHMASCCrossedOverMin", isXCHMASCCrossedOverMin, ignoreFalseConditions) +
|
||||||
|
ToString("isXCHMASCCrossedUnderMin", isXCHMASCCrossedUnderMin, ignoreFalseConditions) +
|
||||||
|
ToString("isXCHMASCPeak", isXCHMASCPeak, ignoreFalseConditions) +
|
||||||
|
ToString("isXCHMASCVale", isXCHMASCVale, ignoreFalseConditions) +
|
||||||
|
ToString("isXCHMASCTrendsUp", isXCHMASCTrendsUp, ignoreFalseConditions) +
|
||||||
|
ToString("isXCHMASCTrendsDown", isXCHMASCTrendsDown, ignoreFalseConditions) +
|
||||||
|
ToString("isXCHMASCFastOverSlow", isXCHMASCFastOverSlow, ignoreFalseConditions) +
|
||||||
|
ToString("isXCHMASCFastUnderSlow", isXCHMASCFastUnderSlow, ignoreFalseConditions) +
|
||||||
|
ToString("isXCHMASCFastCrossedOverSlow", isXCHMASCFastCrossedOverSlow, ignoreFalseConditions) +
|
||||||
|
ToString("isXCHMASCFastCrossedUnderSlow", isXCHMASCFastCrossedUnderSlow, ignoreFalseConditions) +
|
||||||
|
ToString("isXCHMAMCPeak", isXCHMAMCPeak, ignoreFalseConditions) +
|
||||||
|
ToString("isXCHMAMCVale", isXCHMAMCVale, ignoreFalseConditions) +
|
||||||
|
ToString("isXCHMAMCTrendsUp", isXCHMAMCTrendsUp, ignoreFalseConditions) +
|
||||||
|
ToString("isXCHMAMCTrendsDown", isXCHMAMCTrendsDown, ignoreFalseConditions) +
|
||||||
|
ToString("isXCHMAMCFastOverSlow", isXCHMAMCFastOverSlow, ignoreFalseConditions) +
|
||||||
|
ToString("isXCHMAMCFastUnderSlow", isXCHMAMCFastUnderSlow, ignoreFalseConditions) +
|
||||||
|
ToString("isXCHMAMCFastCrossedOverSlow", isXCHMAMCFastCrossedOverSlow, ignoreFalseConditions) +
|
||||||
|
ToString("isXCHMAMCFastCrossedUnderSlow", isXCHMAMCFastCrossedUnderSlow, ignoreFalseConditions) +
|
||||||
|
ToString("isXCHMALCPeak", isXCHMALCPeak, ignoreFalseConditions) +
|
||||||
|
ToString("isXCHMALCVale", isXCHMALCVale, ignoreFalseConditions) +
|
||||||
|
ToString("isXCHMALCTrendsUp", isXCHMALCTrendsUp, ignoreFalseConditions) +
|
||||||
|
ToString("isXCHMALCTrendsDown", isXCHMALCTrendsDown, ignoreFalseConditions) +
|
||||||
|
ToString("isXCHMALCFastOverSlow", isXCHMALCFastOverSlow, ignoreFalseConditions) +
|
||||||
|
ToString("isXCHMALCFastUnderSlow", isXCHMALCFastUnderSlow, ignoreFalseConditions) +
|
||||||
|
ToString("isXCHMALCFastCrossedOverSlow", isXCHMALCFastCrossedOverSlow, ignoreFalseConditions) +
|
||||||
|
ToString("isXCHMALCFastCrossedUnderSlow", isXCHMALCFastCrossedUnderSlow, ignoreFalseConditions) +
|
||||||
|
""
|
||||||
|
//
|
||||||
|
;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Generating Full Result by Combining parts ...
|
||||||
|
result =
|
||||||
|
//
|
||||||
|
"[" + GetToken() + "]" + separator +
|
||||||
|
"----------------------" + separator +
|
||||||
|
commonStr +
|
||||||
|
obdStr +
|
||||||
|
fiStr +
|
||||||
|
rsiStr +
|
||||||
|
tmStr +
|
||||||
|
amaStr +
|
||||||
|
lhStr +
|
||||||
|
tdStr +
|
||||||
|
tsStr +
|
||||||
|
chlhStr +
|
||||||
|
chmaStr +
|
||||||
|
""
|
||||||
|
//
|
||||||
|
;
|
||||||
|
|
||||||
//
|
//
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// For Data Collector ...
|
||||||
|
bool IsModelValid()
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
string ToModelString()
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
bool ParseModel(string content)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
int FindIndex(X5MarketConditions &items[])
|
||||||
|
{
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -1267,10 +1581,13 @@ public:
|
|||||||
GetMarketConditions(mConditions, barIndex);
|
GetMarketConditions(mConditions, barIndex);
|
||||||
|
|
||||||
//
|
//
|
||||||
// if (result)
|
if (result)
|
||||||
// {
|
{
|
||||||
// Print(GetToken() + ", " + GetTag() + ", Salam");
|
//
|
||||||
// }
|
string mConditionsStr = mConditions.GenerateSummary();
|
||||||
|
mConditionsCollector.Add(mConditionsStr);
|
||||||
|
Print("Conditions: " + "\n" + mConditionsStr);
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
return result;
|
return result;
|
||||||
@@ -1287,6 +1604,12 @@ protected:
|
|||||||
private:
|
private:
|
||||||
//
|
//
|
||||||
// Props ...
|
// Props ...
|
||||||
|
|
||||||
|
//
|
||||||
|
// Prepare an Instance of Data Collector for MarketConditions ...
|
||||||
|
XSC5MarketConditionDataCollector mConditionsCollector;
|
||||||
|
|
||||||
|
//
|
||||||
int mNumberOfItems; // Number of Buffer Ites Read in Conditions ...
|
int mNumberOfItems; // Number of Buffer Ites Read in Conditions ...
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -191,7 +191,7 @@ public:
|
|||||||
|
|
||||||
//
|
//
|
||||||
T iItem;
|
T iItem;
|
||||||
bool isValid = iItem.Parse(content);
|
bool isValid = iItem.ParseModel(content);
|
||||||
if (isValid)
|
if (isValid)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
@@ -224,14 +224,51 @@ public:
|
|||||||
bool result = false;
|
bool result = false;
|
||||||
|
|
||||||
//
|
//
|
||||||
result = item.IsValid();
|
result = item.IsModelValid();
|
||||||
if (!result)
|
if (!result)
|
||||||
{
|
{
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
string content = item.ToString();
|
string content = item.ToModelString();
|
||||||
|
result = IsValid(content);
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
string storePath = GetStorePath();
|
||||||
|
int mFileHandler = FileOpen(
|
||||||
|
storePath,
|
||||||
|
FILE_READ | FILE_WRITE | FILE_TXT);
|
||||||
|
result = mFileHandler != INVALID_HANDLE;
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
FileSeek(mFileHandler, 0, SEEK_END);
|
||||||
|
FileWrite(mFileHandler, content);
|
||||||
|
FileFlush(mFileHandler);
|
||||||
|
FileClose(mFileHandler);
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Add Item ...
|
||||||
|
bool Add(
|
||||||
|
string content // Content
|
||||||
|
)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
//
|
||||||
result = IsValid(content);
|
result = IsValid(content);
|
||||||
if (!result)
|
if (!result)
|
||||||
{
|
{
|
||||||
@@ -282,7 +319,7 @@ public:
|
|||||||
T iItem = items[i];
|
T iItem = items[i];
|
||||||
|
|
||||||
//
|
//
|
||||||
if (!iItem.IsValid())
|
if (!iItem.IsModelValid())
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@@ -309,7 +346,7 @@ public:
|
|||||||
bool result = false;
|
bool result = false;
|
||||||
|
|
||||||
//
|
//
|
||||||
result = item.IsValid();
|
result = item.IsModelValid();
|
||||||
if (!result)
|
if (!result)
|
||||||
{
|
{
|
||||||
return result;
|
return result;
|
||||||
|
|||||||
@@ -81,6 +81,7 @@ public:
|
|||||||
// Generate Summary ...
|
// Generate Summary ...
|
||||||
virtual string GenerateSummary(
|
virtual string GenerateSummary(
|
||||||
const double multiplier = 1, // Score Multiplier
|
const double multiplier = 1, // Score Multiplier
|
||||||
|
const string separator = "\n", // Separator
|
||||||
const bool ignoreFalseConditions = true // Ignore False Conditions
|
const bool ignoreFalseConditions = true // Ignore False Conditions
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -3418,7 +3418,7 @@ MqlDateTime GetBarTimeStruct(
|
|||||||
//
|
//
|
||||||
template <typename T>
|
template <typename T>
|
||||||
bool IsSame(
|
bool IsSame(
|
||||||
T &buffer[], // Search Buffer
|
T &buffer[], // Search Buffer
|
||||||
int count = 5 // Number of Searchs
|
int count = 5 // Number of Searchs
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
@@ -3428,28 +3428,33 @@ bool IsSame(
|
|||||||
//
|
//
|
||||||
int bufferSize = ArraySize(buffer);
|
int bufferSize = ArraySize(buffer);
|
||||||
result = bufferSize > 0;
|
result = bufferSize > 0;
|
||||||
if (!result) {
|
if (!result)
|
||||||
|
{
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Validate Count ...
|
// Validate Count ...
|
||||||
result = count < bufferSize;
|
result = count < bufferSize;
|
||||||
if (!result) {
|
if (!result)
|
||||||
|
{
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
T iTem = buffer[0];
|
T iTem = buffer[0];
|
||||||
for (int i = 0; i < count; i++) {
|
for (int i = 0; i < count; i++)
|
||||||
|
{
|
||||||
//
|
//
|
||||||
if (iTem != buffer[i]) {
|
if (iTem != buffer[i])
|
||||||
|
{
|
||||||
result = false;
|
result = false;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
if (!result) {
|
if (!result)
|
||||||
|
{
|
||||||
result = true;
|
result = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -3665,21 +3670,24 @@ bool IsDecreasing(
|
|||||||
//
|
//
|
||||||
bool IsTrendingUp(
|
bool IsTrendingUp(
|
||||||
const double &buffer1[], // First Buffer
|
const double &buffer1[], // First Buffer
|
||||||
const double &buffer2[] // Seccend Buffer
|
const double &buffer2[] // Seccend Buffer
|
||||||
) {
|
)
|
||||||
|
{
|
||||||
//
|
//
|
||||||
bool result = false;
|
bool result = false;
|
||||||
|
|
||||||
//
|
//
|
||||||
int buffer1Count = ArraySize(buffer1);
|
int buffer1Count = ArraySize(buffer1);
|
||||||
int buffer2Count = ArraySize(buffer2);
|
int buffer2Count = ArraySize(buffer2);
|
||||||
if (buffer1Count <= 0 || buffer2Count <= 0) {
|
if (buffer1Count <= 0 || buffer2Count <= 0)
|
||||||
|
{
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
int count = MathMin(buffer1Count, buffer2Count);
|
int count = MathMin(buffer1Count, buffer2Count);
|
||||||
if (count <= 1) {
|
if (count <= 1)
|
||||||
|
{
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3687,17 +3695,20 @@ bool IsTrendingUp(
|
|||||||
int upCounts = 0;
|
int upCounts = 0;
|
||||||
int downCounts = 0;
|
int downCounts = 0;
|
||||||
double value = MathAbs(buffer1[0] - buffer2[0]);
|
double value = MathAbs(buffer1[0] - buffer2[0]);
|
||||||
for (int i = 1; i < count; i++) {
|
for (int i = 1; i < count; i++)
|
||||||
|
{
|
||||||
//
|
//
|
||||||
double iValue = MathAbs(buffer1[i] - buffer2[i]);
|
double iValue = MathAbs(buffer1[i] - buffer2[i]);
|
||||||
|
|
||||||
//
|
//
|
||||||
if (value > iValue) {
|
if (value > iValue)
|
||||||
|
{
|
||||||
upCounts++;
|
upCounts++;
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
if (value < iValue) {
|
if (value < iValue)
|
||||||
|
{
|
||||||
downCounts++;
|
downCounts++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -3712,21 +3723,24 @@ bool IsTrendingUp(
|
|||||||
//
|
//
|
||||||
bool IsTrendingDown(
|
bool IsTrendingDown(
|
||||||
const double &buffer1[], // First Buffer
|
const double &buffer1[], // First Buffer
|
||||||
const double &buffer2[] // Seccend Buffer
|
const double &buffer2[] // Seccend Buffer
|
||||||
) {
|
)
|
||||||
|
{
|
||||||
//
|
//
|
||||||
bool result = false;
|
bool result = false;
|
||||||
|
|
||||||
//
|
//
|
||||||
int buffer1Count = ArraySize(buffer1);
|
int buffer1Count = ArraySize(buffer1);
|
||||||
int buffer2Count = ArraySize(buffer2);
|
int buffer2Count = ArraySize(buffer2);
|
||||||
if (buffer1Count <= 0 || buffer2Count <= 0) {
|
if (buffer1Count <= 0 || buffer2Count <= 0)
|
||||||
|
{
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
int count = MathMin(buffer1Count, buffer2Count);
|
int count = MathMin(buffer1Count, buffer2Count);
|
||||||
if (count <= 1) {
|
if (count <= 1)
|
||||||
|
{
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3734,17 +3748,20 @@ bool IsTrendingDown(
|
|||||||
int upCounts = 0;
|
int upCounts = 0;
|
||||||
int downCounts = 0;
|
int downCounts = 0;
|
||||||
double value = MathAbs(buffer1[0] - buffer2[0]);
|
double value = MathAbs(buffer1[0] - buffer2[0]);
|
||||||
for (int i = 1; i < count; i++) {
|
for (int i = 1; i < count; i++)
|
||||||
|
{
|
||||||
//
|
//
|
||||||
double iValue = MathAbs(buffer1[i] - buffer2[i]);
|
double iValue = MathAbs(buffer1[i] - buffer2[i]);
|
||||||
|
|
||||||
//
|
//
|
||||||
if (value > iValue) {
|
if (value > iValue)
|
||||||
|
{
|
||||||
upCounts++;
|
upCounts++;
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
if (value < iValue) {
|
if (value < iValue)
|
||||||
|
{
|
||||||
downCounts++;
|
downCounts++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -4822,6 +4839,31 @@ string ToString(T value)
|
|||||||
return (string)value;
|
return (string)value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Used In Report or Summary Generators ...
|
||||||
|
string ToString(
|
||||||
|
string prefix, // Title
|
||||||
|
bool value, // Value
|
||||||
|
bool ignoreFalseConditions = true, // Ignore False Conditions
|
||||||
|
string prefixSeparator = ":", // Title Separator
|
||||||
|
string lineSeparator = "\n" // Line Separator
|
||||||
|
)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
string result = NULL;
|
||||||
|
|
||||||
|
//
|
||||||
|
result = (value || !ignoreFalseConditions)
|
||||||
|
? prefix +
|
||||||
|
prefixSeparator + " " +
|
||||||
|
ToString(value) +
|
||||||
|
lineSeparator
|
||||||
|
: "";
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Converts a Buffer to String Representation ...
|
// Converts a Buffer to String Representation ...
|
||||||
template <typename T>
|
template <typename T>
|
||||||
|
|||||||
@@ -856,9 +856,15 @@ struct XSignal
|
|||||||
return GetToken(this);
|
return GetToken(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
bool IsModelValid()
|
||||||
|
{
|
||||||
|
return IsValid();
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// To String Representation ...
|
// To String Representation ...
|
||||||
string ToString()
|
string ToModelString()
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
string result = NULL;
|
string result = NULL;
|
||||||
@@ -940,7 +946,7 @@ struct XSignal
|
|||||||
//
|
//
|
||||||
// Parse String Model and Fill Available
|
// Parse String Model and Fill Available
|
||||||
// Items ...
|
// Items ...
|
||||||
bool Parse(string value)
|
bool ParseModel(string value)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
bool result = false;
|
bool result = false;
|
||||||
@@ -2709,9 +2715,15 @@ struct XPositionInfo
|
|||||||
return GetToken(this);
|
return GetToken(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
bool IsModelValid()
|
||||||
|
{
|
||||||
|
return IsValid();
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Convert to String Representation
|
// Convert to String Representation
|
||||||
string ToString()
|
string ToModelString()
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
string result = NULL;
|
string result = NULL;
|
||||||
@@ -2753,7 +2765,7 @@ struct XPositionInfo
|
|||||||
|
|
||||||
//
|
//
|
||||||
// Parse and Fill from Given String Representation
|
// Parse and Fill from Given String Representation
|
||||||
bool Parse(string value)
|
bool ParseModel(string value)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
bool result = false;
|
bool result = false;
|
||||||
|
|||||||
Reference in New Issue
Block a user