add conditions collector and also complete generate summary ...

need to test ...
This commit is contained in:
2024-05-19 14:55:23 +03:30
parent d70845c664
commit fa6387725a
5 changed files with 448 additions and 33 deletions
+327 -4
View File
@@ -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 ...
class X5MarketConditions : public XSCBaseProviderMarketConditions
@@ -700,15 +752,277 @@ public:
// Generate Summary ...
virtual string GenerateSummary(
const double multiplier = 1, // Score Multiplier
const string separator = "\n", // Separator
const bool ignoreFalseConditions = true // Ignore False Conditions
)
{
//
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;
}
//
// 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);
//
// if (result)
// {
// Print(GetToken() + ", " + GetTag() + ", Salam");
// }
if (result)
{
//
string mConditionsStr = mConditions.GenerateSummary();
mConditionsCollector.Add(mConditionsStr);
Print("Conditions: " + "\n" + mConditionsStr);
}
//
return result;
@@ -1287,6 +1604,12 @@ protected:
private:
//
// Props ...
//
// Prepare an Instance of Data Collector for MarketConditions ...
XSC5MarketConditionDataCollector mConditionsCollector;
//
int mNumberOfItems; // Number of Buffer Ites Read in Conditions ...
//
+42 -5
View File
@@ -191,7 +191,7 @@ public:
//
T iItem;
bool isValid = iItem.Parse(content);
bool isValid = iItem.ParseModel(content);
if (isValid)
{
//
@@ -224,14 +224,51 @@ public:
bool result = false;
//
result = item.IsValid();
result = item.IsModelValid();
if (!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);
if (!result)
{
@@ -282,7 +319,7 @@ public:
T iItem = items[i];
//
if (!iItem.IsValid())
if (!iItem.IsModelValid())
{
continue;
}
@@ -309,7 +346,7 @@ public:
bool result = false;
//
result = item.IsValid();
result = item.IsModelValid();
if (!result)
{
return result;
+1
View File
@@ -81,6 +81,7 @@ public:
// Generate Summary ...
virtual string GenerateSummary(
const double multiplier = 1, // Score Multiplier
const string separator = "\n", // Separator
const bool ignoreFalseConditions = true // Ignore False Conditions
);
};
+62 -20
View File
@@ -3418,7 +3418,7 @@ MqlDateTime GetBarTimeStruct(
//
template <typename T>
bool IsSame(
T &buffer[], // Search Buffer
T &buffer[], // Search Buffer
int count = 5 // Number of Searchs
)
{
@@ -3428,28 +3428,33 @@ bool IsSame(
//
int bufferSize = ArraySize(buffer);
result = bufferSize > 0;
if (!result) {
if (!result)
{
return result;
}
//
// Validate Count ...
result = count < bufferSize;
if (!result) {
if (!result)
{
return result;
}
//
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;
break;
}
//
if (!result) {
if (!result)
{
result = true;
}
}
@@ -3665,21 +3670,24 @@ bool IsDecreasing(
//
bool IsTrendingUp(
const double &buffer1[], // First Buffer
const double &buffer2[] // Seccend Buffer
) {
const double &buffer2[] // Seccend Buffer
)
{
//
bool result = false;
//
int buffer1Count = ArraySize(buffer1);
int buffer2Count = ArraySize(buffer2);
if (buffer1Count <= 0 || buffer2Count <= 0) {
if (buffer1Count <= 0 || buffer2Count <= 0)
{
return result;
}
//
int count = MathMin(buffer1Count, buffer2Count);
if (count <= 1) {
if (count <= 1)
{
return result;
}
@@ -3687,17 +3695,20 @@ bool IsTrendingUp(
int upCounts = 0;
int downCounts = 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]);
//
if (value > iValue) {
if (value > iValue)
{
upCounts++;
}
//
if (value < iValue) {
if (value < iValue)
{
downCounts++;
}
}
@@ -3712,21 +3723,24 @@ bool IsTrendingUp(
//
bool IsTrendingDown(
const double &buffer1[], // First Buffer
const double &buffer2[] // Seccend Buffer
) {
const double &buffer2[] // Seccend Buffer
)
{
//
bool result = false;
//
int buffer1Count = ArraySize(buffer1);
int buffer2Count = ArraySize(buffer2);
if (buffer1Count <= 0 || buffer2Count <= 0) {
if (buffer1Count <= 0 || buffer2Count <= 0)
{
return result;
}
//
int count = MathMin(buffer1Count, buffer2Count);
if (count <= 1) {
if (count <= 1)
{
return result;
}
@@ -3734,17 +3748,20 @@ bool IsTrendingDown(
int upCounts = 0;
int downCounts = 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]);
//
if (value > iValue) {
if (value > iValue)
{
upCounts++;
}
//
if (value < iValue) {
if (value < iValue)
{
downCounts++;
}
}
@@ -4822,6 +4839,31 @@ string ToString(T 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 ...
template <typename T>
+16 -4
View File
@@ -856,9 +856,15 @@ struct XSignal
return GetToken(this);
}
//
bool IsModelValid()
{
return IsValid();
}
//
// To String Representation ...
string ToString()
string ToModelString()
{
//
string result = NULL;
@@ -940,7 +946,7 @@ struct XSignal
//
// Parse String Model and Fill Available
// Items ...
bool Parse(string value)
bool ParseModel(string value)
{
//
bool result = false;
@@ -2709,9 +2715,15 @@ struct XPositionInfo
return GetToken(this);
}
//
bool IsModelValid()
{
return IsValid();
}
//
// Convert to String Representation
string ToString()
string ToModelString()
{
//
string result = NULL;
@@ -2753,7 +2765,7 @@ struct XPositionInfo
//
// Parse and Fill from Given String Representation
bool Parse(string value)
bool ParseModel(string value)
{
//
bool result = false;