This commit is contained in:
2025-09-10 17:23:52 +03:30
parent 4a8924c3f6
commit 247f50adfa
4 changed files with 197 additions and 52 deletions
@@ -285,6 +285,27 @@ class XCTradeManager : public XCBase
? iParts[5]
: "";
iRestrictionsDescriptor = EscapeString(iRestrictionsDescriptor);
//
XSymbolTradeConfig iConfig;
//
// Initialize Config ...
has = iConfig.Init(
iSymbol,
iPeriod,
iSessionsDescriptor,
iMaxAllowedSpread,
iMaxAllowedPositions,
iRestrictionsDescriptor //
);
if (has) {
AddOrUpdateSymbolConfiguration(iConfig);
}
//
// Cleanup Resources ...
iConfig.Clean();
}
//
+23 -24
View File
@@ -37,26 +37,33 @@ input string eaLogSuffix = ""; // Log Suffix
//
// Symbols
// [Symbol|period|(ST_04:00_08:30),(TL_10:30_12:00),(NY_16:00_20:00)]
input string eaSymbolConfiguration; // Symbol Configurations
// [
// Symbol|
// period|
// (ST_04:00_08:30),(TL_10:30_12:00),(NY_16:00_20:00)|
// maxAllowedSpread|
// maxAllowedPosition|
// (
// restrictionsPeriod,
// maxAllowedTPs,
// maxAllowedSLs,
// maxAllowedTrades,
// closeAllOpenTradesAt
// )
// ]
//
//
// [XAUUSDb|M5|(ST_04:00_08:30),(TL_10:30_12:00),(NY_16:00_20:00)|25.0|5|(Per_Day,0,2,0)]
input string eaSymbolConfiguration = "[XAUUSDb|M5|(ST_04:00_08:30),(TL_10:30_12:00),(NY_16:00_20:00)|25.0|5|(XTRADE_RESTRICATION_DAILY,0,2,0)]"; // Symbol Configurations
//
// Management ...
// eaSessions => (ST_04:00_08:30),(TL_10:30_12:00),(NY_16:00_20:00)
input group "Management";
input bool eaAllowGuards = false; // Allow Guards
input bool eaAllowTrade = true; // Allow Trade on Signals
input bool eaAllowLongs = true; // Allow Long Trades
input bool eaAllowShorts = true; // Allow Short Trades
input string eaSessions = ""; // Active Sessions
input ENUM_XTRADE_RESTRICTION_PERIOD eaRestrictionsPeriod = XTRADE_RESTRICATION_NONE; // Restrictions Period
input int eaMaxAllowedTPs = 0; // Max Allowed TP(s) in Restrictions Period
input int eaMaxAllowedSLs = 0; // Max Allowed SL(s) in Restrictions Period
input int eaMaxAllowedTrades = 0; // Max Allowed Trades in Restrictions Period
input int eaMaxAllowedPositions = 5; // Max Allowed Same Time Trades
input double eaMaxAllowedSpread = 25; // Max Allowed Spread For Trade
input double eaMaxAllowedDrawdownFactor = 0.3; // Max Allowed DrawDown for Trade
input string eaCloseAllOpenTradesAt = ""; // Close All Open Trades per Day At Specified Time
input bool eaAllowGuards = false; // Allow Guards
input bool eaAllowTrade = true; // Allow Trade on Signals
input bool eaAllowLongs = true; // Allow Long Trades
input bool eaAllowShorts = true; // Allow Short Trades
input double eaMaxAllowedDrawdownFactor = 0.3; // Max Allowed DrawDown for Trade
//
// Volume ...
@@ -155,15 +162,7 @@ int OnInit()
eaExpert.eaAllowTrade = eaAllowTrade;
eaExpert.eaAllowLongs = eaAllowLongs;
eaExpert.eaAllowShorts = eaAllowShorts;
eaExpert.eaSessions = eaSessions;
eaExpert.eaRestrictionsPeriod = eaRestrictionsPeriod;
eaExpert.eaMaxAllowedTPs = eaMaxAllowedTPs;
eaExpert.eaMaxAllowedSLs = eaMaxAllowedSLs;
eaExpert.eaMaxAllowedTrades = eaMaxAllowedTrades;
eaExpert.eaMaxAllowedPositions = eaMaxAllowedPositions;
eaExpert.eaMaxAllowedSpread = eaMaxAllowedSpread;
eaExpert.eaMaxAllowedDrawdownFactor = eaMaxAllowedDrawdownFactor;
eaExpert.eaCloseAllOpenTradesAt = eaCloseAllOpenTradesAt;
//
// Volume ...
+150 -17
View File
@@ -318,7 +318,61 @@ enum ENUM_XTRADE_RESTRICTION_PERIOD
//
string ToXString(ENUM_XTRADE_RESTRICTION_PERIOD value)
{
return EnumToString(value);
//
string result = NULL;
//
result = EnumToString(value);
//
return result;
}
//
ENUM_XTRADE_RESTRICTION_PERIOD ToXRestrictionPeriod(string value)
{
//
ENUM_XTRADE_RESTRICTION_PERIOD result = XTRADE_RESTRICATION_NONE;
//
if (!IsSpecifiedValid(value))
{
return result;
}
//
// None ...
if (value == ToXString(XTRADE_RESTRICATION_NONE))
{
result = XTRADE_RESTRICATION_NONE;
}
//
// Per Hour ...
else if (value == ToXString(XTRADE_RESTRICATION_HOURLY))
{
result = XTRADE_RESTRICATION_HOURLY;
}
//
// Per Day ...
else if (value == ToXString(XTRADE_RESTRICATION_DAILY))
{
result = XTRADE_RESTRICATION_DAILY;
}
//
// Per Week ...
else if (value == ToXString(XTRADE_RESTRICATION_WEEKLY))
{
result = XTRADE_RESTRICATION_WEEKLY;
}
//
// Per Month ...
else if (value == ToXString(XTRADE_RESTRICATION_MONTHLY))
{
result = XTRADE_RESTRICATION_MONTHLY;
}
//
return result;
}
/**
@@ -2873,10 +2927,7 @@ struct XSymbolTradeConfig
* @param _sessionsDescriptor: Sessions Description
* @param _maxAllowedSpread: Max Allowed Spread for Open Trade
* @param _maxAllowedPositions: Max Allowed Same Time Position
* @param _closeAllOpenTradesAt: Close All Open Trades
* @param _maxAllowedTPs: Max Allowed TPs in Restrictions Period
* @param _maxAllowedSLs: Max Allowed SLs in Restrictions Period
* @param _restrictionsPeriod: Restrictions Period
* @param _restrictionsDescriptor: Restrictions Descriptor
*
* @return ( bool )
*/
@@ -2887,10 +2938,6 @@ struct XSymbolTradeConfig
double _maxAllowedSpread = 25,
int _maxAllowedPositions = 5,
string _restrictionsDescriptor = NULL //
// string _closeAllOpenTradesAt = NULL,
// int _maxAllowedTPs = 0,
// int _maxAllowedSLs = 0,
// ENUM_XTRADE_RESTRICTION_PERIOD _restrictionsPeriod = XTRADE_RESTRICATION_NONE //
)
{
//
@@ -2907,12 +2954,6 @@ struct XSymbolTradeConfig
maxAllowedSpread = _maxAllowedSpread;
maxAllowedPositions = _maxAllowedPositions;
//
// maxAllowedTPs = _maxAllowedTPs;
// maxAllowedSLs = _maxAllowedSLs;
// restrictionsPeriod = _restrictionsPeriod;
// closeAllOpenTradesAt = _closeAllOpenTradesAt;
//
// Parse Sessions ...
ParseSessions(_sessionsDescriptor);
@@ -2922,6 +2963,7 @@ struct XSymbolTradeConfig
ParseRestrictions(_restrictionsDescriptor);
//
// Check Validation ...
result = IsValid();
//
@@ -3011,6 +3053,7 @@ struct XSymbolTradeConfig
void ParseSessions(string descriptor)
{
//
// Validate ...
if (!IsSpecifiedValid(descriptor))
{
return;
@@ -3098,8 +3141,98 @@ struct XSymbolTradeConfig
//
// Parse Restrictions ...
void ParseRestrictions(string descriptor) {
void ParseRestrictions(string descriptor)
{
//
// Validate ...
if (!IsSpecifiedValid(descriptor))
{
return;
}
//
// Extract Content ...
descriptor = ExtractString(descriptor);
if (!IsSpecifiedValid(descriptor))
{
return;
}
//
int count = 0;
bool has = false;
string iRestrictionsParts[];
//
// Extract Parts ...
count = SplitContent(
iRestrictionsParts,
descriptor,
"," //
);
has = IsValidSize(count);
if (!has)
{
//
// Default Restrictions ...
ApplyDefaultRestrictions();
return;
}
//
// Try To Extract Required Parts ...
bool hasRestrictionsPeriod = count >= 1;
bool hasMaxAllowedTPs = count >= 2;
bool hasMaxAllowedSLs = count >= 3;
bool hasMaxAllowedTrades = count >= 4;
bool hasCloseAllOpenTradesAt = count >= 5;
//
// Restrictions Period ...
restrictionsPeriod =
hasRestrictionsPeriod
? ToXRestrictionPeriod(Trim(iRestrictionsParts[0]))
: XTRADE_RESTRICATION_NONE;
//
// Max Allowed TPs ...
maxAllowedTPs =
hasMaxAllowedTPs
? (int)(Trim(iRestrictionsParts[1]))
: 0;
//
// Max Allowed SLs ...
maxAllowedSLs =
hasMaxAllowedSLs
? (int)(Trim(iRestrictionsParts[2]))
: 0;
//
// Max Allowed Trades ...
maxAllowedTrades =
hasMaxAllowedTrades
? (int)(Trim(iRestrictionsParts[3]))
: 0;
//
// Close All Open Trades At ...
closeAllOpenTradesAt =
hasCloseAllOpenTradesAt
? Trim(iRestrictionsParts[4])
: NULL;
}
//
// Apply Default Restrictions ...
void ApplyDefaultRestrictions()
{
//
maxAllowedTPs = 0;
maxAllowedSLs = 0;
maxAllowedTrades = 0;
closeAllOpenTradesAt = NULL;
restrictionsPeriod = XTRADE_RESTRICATION_NONE;
}
//
+3 -11
View File
@@ -58,15 +58,7 @@ class XCXOM1EAExpert : public XCBase
bool eaAllowTrade; // Allow Trade on Signals
bool eaAllowLongs; // Allow Long Trades
bool eaAllowShorts; // Allow Short Trades
string eaSessions; // Active Sessions
ENUM_XTRADE_RESTRICTION_PERIOD eaRestrictionsPeriod; // Restrictions Period
int eaMaxAllowedTPs; // Max Allowed TP(s) in Restrictions Period
int eaMaxAllowedSLs; // Max Allowed SL(s) in Restrictions Period
int eaMaxAllowedTrades; // Max Allowed Trades in Restrictions Period
int eaMaxAllowedPositions; // Max Allowed Same Time Trades
double eaMaxAllowedSpread; // Max Allowed Spread For Trade
double eaMaxAllowedDrawdownFactor; // Max Allowed DrawDown for Trade
string eaCloseAllOpenTradesAt; // Close All Open Trades per Day At Specified Time
//
// Volume ...
@@ -375,8 +367,8 @@ class XCXOM1EAExpert : public XCBase
eaTrade = new XCTrade(
eaSlippage,
eaMagicNumber,
eaMaxAllowedSpread,
eaMaxAllowedPositions,
0,
0,
eaMaxAllowedDrawdownFactor //
);
@@ -551,7 +543,7 @@ class XCXOM1EAExpert : public XCBase
eaTradeManager.SetSymbolConfigurations(eaSymbolConfiguration);
count = eaTradeManager.FillSymbolConfigurations(symbolConfigurations);
has = IsValidSize(count);
//
// Here we Apply Symbols,Periods and Configs ...