Last Changes ...

This commit is contained in:
2025-09-09 16:49:16 +03:30
parent 43f26fa3e0
commit 62af2237e4
6 changed files with 610 additions and 188 deletions
+185 -147
View File
@@ -2702,149 +2702,6 @@ struct XOnTradeHandlerState
}
};
//
// an Structure for Holds an Specified Symbols
// Positions Info ...
struct XTradeSymbolInfo
{
//
// Properties ...
//
string symbol; // Trading Symbol
//
int longs; // All Long Trades
int shorts; // All Short Trades
//
int trades; // All Trades
//
int losses; // All Loosing Trades
int profits; // All Winning Trades
//
datetime managedStart; // Managed Start Time
//
int managedSLs; // Managed SL(s)
int managedTPs; // Managed TP(s)
int managedTrades; // Managed Trades
//
double managedBalance; // Managed Start Balance
double managedProfits; // Managed Profit(s)
//
// Constructor ...
XTradeSymbolInfo()
{
Clean();
}
//
// Tools ...
//
// Cleanup ...
void Clean()
{
//
symbol = NULL;
//
longs = 0;
shorts = 0;
//
trades = 0;
//
losses = 0;
profits = 0;
//
managedStart = NULL;
//
managedSLs = 0;
managedTPs = 0;
managedTrades = 0;
//
managedBalance = 0;
managedProfits = 0;
//
ZeroMemory(this);
}
//
// Validate ...
bool IsValid()
{
//
bool result = false;
//
result = IsSpecifiedValid(symbol);
//
return result;
}
//
bool IsSameAs(XTradeSymbolInfo &item)
{
//
bool result = false;
//
result = IsValid() &&
item.IsValid() &&
symbol == item.symbol;
//
return result;
}
//
string GetRestrictionDescription(
ENUM_XTRADE_RESTRICTION_PERIOD period //
)
{
//
string result = NULL;
//
if (!IsValid() ||
!HasRestrictions(period))
{
return result;
}
//
result +=
"-------------------" + "\n" +
"Restrictions: " + "\n" +
"-------------------" + "\n" +
"Symbol: " + ToXString(symbol) + "\n" +
"Period: " + ToXString(period) + "\n" +
"Start: " + ToFormatString(managedStart) + "\n" +
"Balance: " + ToXString(managedBalance) + "\n" +
"-------------------" + "\n" +
"Trades: " + ToXString(managedTrades) + "\n" +
"SL: " + ToXString(managedSLs) + "\n" +
"TP: " + ToXString(managedTPs) + "\n" +
"Profit: " + ToXString(managedProfits) + "\n" +
"";
//
return result;
}
};
//
// an Structure for Describe aTrading Session ...
struct XTradeSession
@@ -2929,18 +2786,37 @@ struct XTradeSession
//
// an Structure for Describe an Specified Symbols
// Trading Sessions ...
struct XSymbolSessions
struct XSymbolTradeConfig
{
//
// Propeties ...
//
string symbol; // Trading Symbol
XTradeSession sessions[]; // Trading Sessions
int longs; // All Long Trades
int shorts; // All Short Trades
int trades; // All Trades
int losses; // All Loosing Trades
int profits; // All Winning Trades
string symbol; // Trading Symbol
int managedSLs; // Managed SL(s)
int managedTPs; // Managed TP(s)
int managedTrades; // Managed Trades
int maxAllowedTPs; // Max Allowed TP(s) in Restrictions Period
int maxAllowedSLs; // Max Allowed SL(s) in Restrictions Period
int maxAllowedTrades; // Max Allowed Trades in Restrictions Period
datetime managedStart; // Managed Start Time
double managedBalance; // Managed Start Balance
double managedProfits; // Managed Profit(s)
ENUM_TIMEFRAMES period; // Trading Period
int maxAllowedPositions; // Max Allowed Same Time Trades
double maxAllowedSpread; // Max Allowed Spread For Trade
XTradeSession sessions[]; // Trading Sessions
string closeAllOpenTradesAt; // Close All Open Trades per Day At Specified Time
ENUM_XTRADE_RESTRICTION_PERIOD restrictionsPeriod; // Trade Restrictions Period
//
// Constructor ...
XSymbolSessions()
XSymbolTradeConfig()
{
Clean();
}
@@ -2954,12 +2830,84 @@ struct XSymbolSessions
{
//
symbol = NULL;
period = NULL;
SpecifiedClean(sessions);
//
longs = 0;
shorts = 0;
trades = 0;
losses = 0;
profits = 0;
//
managedStart = NULL;
//
managedSLs = 0;
managedTPs = 0;
managedTrades = 0;
//
managedBalance = 0;
managedProfits = 0;
//
maxAllowedTPs = 0;
maxAllowedSLs = 0;
maxAllowedTrades = 0;
maxAllowedSpread = 25;
maxAllowedPositions = 5;
closeAllOpenTradesAt = "";
restrictionsPeriod = XTRADE_RESTRICATION_NONE;
//
ZeroMemory(this);
}
//
// Initial ...
bool Init(
string _symbol = NULL,
ENUM_TIMEFRAMES _period = NULL,
string _sessionsDescriptor = NULL,
double _maxAllowedSpread = 25,
int _maxAllowedPositions = 5,
string _closeAllOpenTradesAt = NULL,
int _maxAllowedTPs = 0,
int _maxAllowedSLs = 0,
ENUM_XTRADE_RESTRICTION_PERIOD _restrictionsPeriod = XTRADE_RESTRICATION_NONE //
)
{
//
bool result = false;
//
// Normalize Symbol ...
_symbol = NormalizeSymbol(_symbol);
_period = NormalizePeriod(_period);
//
symbol = _symbol;
period = _period;
maxAllowedTPs = _maxAllowedTPs;
maxAllowedSLs = _maxAllowedSLs;
maxAllowedSpread = _maxAllowedSpread;
restrictionsPeriod = _restrictionsPeriod;
maxAllowedPositions = _maxAllowedPositions;
closeAllOpenTradesAt = _closeAllOpenTradesAt;
//
// Parse Sessions ...
ParseSessions(_sessionsDescriptor);
//
result = IsValid();
//
return result;
}
//
// Validate ...
bool IsValid()
@@ -3019,6 +2967,96 @@ struct XSymbolSessions
return result;
}
//
// Parse Sessions ...
void ParseSessions(string descriptor)
{
//
if (!IsSpecifiedValid(descriptor))
{
return;
}
//
bool has = false;
string _sessions[];
int sessionsCount = 0;
//
// Extract Per Symbol Sessions ...
sessionsCount = SplitContent(
_sessions,
descriptor,
"," //
);
//
// Try to Extract Start and End Times Series ...
has = IsValidSize(sessionsCount);
if (!has)
{
return;
}
//
// Iterate Sessions ...
for (int i = 0; i < sessionsCount; i++)
{
//
// Ignore unused Cases and Extracts only Content ...
string iSessionDescriptorStr = ExtractString(_sessions[i]);
has = IsSpecifiedValid(iSessionDescriptorStr);
if (has)
{
//
// Extract Session Descriptor Data ...
string parts[];
int partsCount = SplitContent(
parts,
iSessionDescriptorStr,
"_" //
);
has = IsValidSize(partsCount) && partsCount == 3;
if (has)
{
//
string iName = parts[0];
string iStart = parts[1];
string iEnd = parts[2];
has = IsSpecifiedValid(iName) &&
IsSpecifiedValid(iStart) &&
IsSpecifiedValid(iEnd);
if (has)
{
//
// Set Active Session Per Symbols ...
XTradeSession session;
//
session.end = iEnd;
session.name = iName;
session.start = iStart;
//
AddRef(
session,
sessions //
);
//
session.Clean();
}
}
//
SpecifiedClean(parts);
}
}
//
SpecifiedClean(_sessions);
}
//
};