Inclustion of example EA
This commit is contained in:
@@ -0,0 +1,81 @@
|
||||
// ---------------------------------------------------------------------
|
||||
// ENUM: MODE_SPLIT_DATA
|
||||
// ---------------------------------------------------------------------
|
||||
// Defines how to split data during testing based on time attributes.
|
||||
//
|
||||
// Values:
|
||||
// - NO_SPLIT : Do not split, always return true.
|
||||
// - ODD_YEARS : Include only odd-numbered years.
|
||||
// - EVEN_YEARS : Include only even-numbered years.
|
||||
// - ODD_MONTHS : Include only odd-numbered months.
|
||||
// - EVEN_MONTHS : Include only even-numbered months.
|
||||
// - ODD_WEEKS : Include only odd-numbered weeks.
|
||||
// - EVEN_WEEKS : Include only even-numbered weeks.
|
||||
// ---------------------------------------------------------------------
|
||||
enum MODE_SPLIT_DATA {
|
||||
NO_SPLIT,
|
||||
ODD_YEARS,
|
||||
EVEN_YEARS,
|
||||
ODD_MONTHS,
|
||||
EVEN_MONTHS,
|
||||
ODD_WEEKS,
|
||||
EVEN_WEEKS
|
||||
};
|
||||
|
||||
// ---------------------------------------------------------------------
|
||||
// CLASS: TestDataSplit
|
||||
// ---------------------------------------------------------------------
|
||||
// Provides logic to determine whether the current date falls within
|
||||
// a selected split group for testing or optimization purposes.
|
||||
// ---------------------------------------------------------------------
|
||||
class TestDataSplit {
|
||||
public:
|
||||
bool in_test_period(MODE_SPLIT_DATA data_split_method);
|
||||
};
|
||||
|
||||
// ---------------------------------------------------------------------
|
||||
// Determines whether the current time falls in the selected group.
|
||||
//
|
||||
// Parameters:
|
||||
// - data_split_method : Enum value defining the split strategy.
|
||||
//
|
||||
// Logic:
|
||||
// - Extracts current date components (year, month, ISO week).
|
||||
// - Returns true if current time matches the given split rule.
|
||||
// ---------------------------------------------------------------------
|
||||
bool TestDataSplit::in_test_period(MODE_SPLIT_DATA data_split_method) {
|
||||
string result[];
|
||||
string string_tc = TimeToString(TimeCurrent());
|
||||
|
||||
// Extract components from datetime string (assumes YYYY.MM.DD format)
|
||||
ushort u_sep = StringGetCharacter(".", 0);
|
||||
StringSplit(string_tc, u_sep, result);
|
||||
|
||||
bool odd_year = int(result[0]) % 2;
|
||||
bool odd_month = int(result[1]) % 2;
|
||||
|
||||
// Calculate week of the year (approximate ISO week)
|
||||
MqlDateTime dt;
|
||||
TimeToStruct(TimeCurrent(), dt);
|
||||
int i_day = (dt.day_of_week + 6) % 7 + 1; // Convert to 1=Mon,...,7=Sun
|
||||
int i_week = (dt.day_of_year - i_day + 10) / 7; // Approximate ISO week number
|
||||
bool odd_week = i_week % 2;
|
||||
|
||||
// Split logic depending on mode
|
||||
if (data_split_method == NO_SPLIT)
|
||||
return true;
|
||||
if (data_split_method == ODD_YEARS && odd_year)
|
||||
return true;
|
||||
if (data_split_method == EVEN_YEARS && !odd_year)
|
||||
return true;
|
||||
if (data_split_method == ODD_MONTHS && odd_month)
|
||||
return true;
|
||||
if (data_split_method == EVEN_MONTHS && !odd_month)
|
||||
return true;
|
||||
if (data_split_method == ODD_WEEKS && odd_week)
|
||||
return true;
|
||||
if (data_split_method == EVEN_WEEKS && !odd_week)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
Reference in New Issue
Block a user