Last Changes ...
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
//
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user