add support for restrictions report and save ...
This commit is contained in:
@@ -146,6 +146,7 @@ input bool eaReportNewDays = true; // Report New Days
|
||||
input bool eaReportNewHours = false; // Report New Hours
|
||||
input bool eaReportTrades = true; // Report Trades
|
||||
input bool eaReportSignals = true; // Report Signals
|
||||
input bool eaReportRestrictions = true; // Report Restrictions
|
||||
input bool eaReportProtector = true; // Report Protector Actions
|
||||
input bool eaReportAfterTradesBalance = true; // Report Balance after a Trade Finished
|
||||
|
||||
@@ -156,6 +157,7 @@ input bool eaSaveTrades = false; // Save Trades
|
||||
input bool eaSaveSignals = false; // Save Signals
|
||||
input bool eaSaveWins = false; // Save Winning Conditions
|
||||
input bool eaSaveLosts = false; // Save Lost Conditions
|
||||
input bool eaSaveRestrictions = false; // Save Restriction Reports
|
||||
|
||||
//
|
||||
// Variables ...
|
||||
@@ -306,6 +308,7 @@ int OnInit()
|
||||
eaExpert.eaReportNewHours = eaReportNewHours;
|
||||
eaExpert.eaReportProtector = eaReportProtector;
|
||||
eaExpert.eaReportNewMonths = eaReportNewMonths;
|
||||
eaExpert.eaReportRestrictions = eaReportRestrictions;
|
||||
eaExpert.eaReportAfterTradesBalance = eaReportAfterTradesBalance;
|
||||
|
||||
//
|
||||
@@ -314,6 +317,7 @@ int OnInit()
|
||||
eaExpert.eaSaveLosts = eaSaveLosts;
|
||||
eaExpert.eaSaveTrades = eaSaveTrades;
|
||||
eaExpert.eaSaveSignals = eaSaveSignals;
|
||||
eaExpert.eaSaveRestrictions = eaSaveRestrictions;
|
||||
|
||||
//
|
||||
// Attach Event Handlers ...
|
||||
|
||||
@@ -147,6 +147,7 @@ class XCXCATBEAExpert : public XCBase
|
||||
bool eaReportTrades; // Report Trades
|
||||
bool eaReportSignals; // Report Signals
|
||||
bool eaReportProtector; // Report Protector Actions
|
||||
bool eaReportRestrictions; // Report Restrictions
|
||||
bool eaReportAfterTradesBalance; // Report Balance after a Trade Finished
|
||||
|
||||
//
|
||||
@@ -155,6 +156,7 @@ class XCXCATBEAExpert : public XCBase
|
||||
bool eaSaveSignals; // Save Signals
|
||||
bool eaSaveWins; // Save Winning Conditions
|
||||
bool eaSaveLosts; // Save Lost Conditions
|
||||
bool eaSaveRestrictions; // Save Restriction Reports
|
||||
|
||||
//
|
||||
// Trade Event Handlers ...
|
||||
@@ -305,6 +307,7 @@ class XCXCATBEAExpert : public XCBase
|
||||
eaTradeManager.SaveLosts(eaSaveLosts);
|
||||
eaTradeManager.SaveTrades(eaSaveTrades);
|
||||
eaTradeManager.SaveSignals(eaSaveSignals);
|
||||
eaTradeManager.SaveRestrictions(eaSaveRestrictions);
|
||||
|
||||
//
|
||||
// Enable Force Close At ...
|
||||
@@ -317,6 +320,7 @@ class XCXCATBEAExpert : public XCBase
|
||||
eaReportTrades,
|
||||
eaReportSignals,
|
||||
eaReportProtector,
|
||||
eaReportRestrictions,
|
||||
eaReportAfterTradesBalance //
|
||||
);
|
||||
|
||||
|
||||
@@ -98,11 +98,18 @@ struct XCATBEASymbolInfo
|
||||
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 ...
|
||||
XCATBEASymbolInfo()
|
||||
@@ -131,11 +138,18 @@ struct XCATBEASymbolInfo
|
||||
losses = 0;
|
||||
profits = 0;
|
||||
|
||||
//
|
||||
managedStart = NULL;
|
||||
|
||||
//
|
||||
managedSLs = 0;
|
||||
managedTPs = 0;
|
||||
managedTrades = 0;
|
||||
|
||||
//
|
||||
managedBalance = 0;
|
||||
managedProfits = 0;
|
||||
|
||||
//
|
||||
ZeroMemory(this);
|
||||
}
|
||||
@@ -168,6 +182,41 @@ struct XCATBEASymbolInfo
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
string GetRestrictionDescription(
|
||||
ENUM_XCATBEA_TRADE_RESTRICTION_PERIOD period //
|
||||
)
|
||||
{
|
||||
//
|
||||
string result = NULL;
|
||||
|
||||
//
|
||||
if (!IsValid() &&
|
||||
period != XCATBEA_TRADE_RESTRICATION_NONE)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
result +=
|
||||
"-------------------" + "\n" +
|
||||
"Restrictions: " + "\n" +
|
||||
"-------------------" + "\n" +
|
||||
"Symbol: " + ToString(symbol) + "\n" +
|
||||
"Period: " + ToString(period) + "\n" +
|
||||
"Start: " + ToFormatString(managedStart) + "\n" +
|
||||
"Balance: " + ToString(managedBalance) + "\n" +
|
||||
"-------------------" + "\n" +
|
||||
"Trades: " + ToString(managedTrades) + "\n" +
|
||||
"SL: " + ToString(managedSLs) + "\n" +
|
||||
"TP: " + ToString(managedTPs) + "\n" +
|
||||
"Profit: " + ToString(managedProfits) + "\n" +
|
||||
"";
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
};
|
||||
|
||||
//
|
||||
@@ -819,6 +868,18 @@ class XCXCATBEATradeManager : public XCBaseAlert
|
||||
mSaveLosts = value;
|
||||
}
|
||||
|
||||
//
|
||||
bool SaveRestrictions()
|
||||
{
|
||||
return mSaveRestrictions;
|
||||
}
|
||||
|
||||
//
|
||||
void SaveRestrictions(bool value)
|
||||
{
|
||||
mSaveRestrictions = value;
|
||||
}
|
||||
|
||||
//
|
||||
void SetForceCloseTradesAt(
|
||||
string _forceCloseAt //
|
||||
@@ -908,6 +969,7 @@ class XCXCATBEATradeManager : public XCBaseAlert
|
||||
bool _reportTrades,
|
||||
bool _reportSignals,
|
||||
bool _reportProtector,
|
||||
bool _reportRestrictions,
|
||||
bool _reportAfterTradesBalance //
|
||||
)
|
||||
{
|
||||
@@ -915,6 +977,7 @@ class XCXCATBEATradeManager : public XCBaseAlert
|
||||
reportTrades = _reportTrades;
|
||||
reportSignals = _reportSignals;
|
||||
reportProtector = _reportProtector;
|
||||
reportRestrictions = _reportRestrictions;
|
||||
reportAfterTradesBalance = _reportAfterTradesBalance;
|
||||
}
|
||||
|
||||
@@ -1603,6 +1666,18 @@ class XCXCATBEATradeManager : public XCBaseAlert
|
||||
iSymbolInfo.shorts = 1;
|
||||
}
|
||||
|
||||
//
|
||||
// Fill Balance for Restrications ...
|
||||
bool hasRestrictions = HasRestrictions();
|
||||
if (hasRestrictions)
|
||||
{
|
||||
//
|
||||
// Read Balance ...
|
||||
double balance = trader.mAccount.GetBalance();
|
||||
iSymbolInfo.managedBalance = balance;
|
||||
iSymbolInfo.managedStart = TimeCurrent();
|
||||
}
|
||||
|
||||
//
|
||||
AddOrUpdateSymbolInfo(iSymbolInfo);
|
||||
|
||||
@@ -1730,6 +1805,7 @@ class XCXCATBEATradeManager : public XCBaseAlert
|
||||
iSymbolInfo.profits = 1;
|
||||
iSymbolInfo.managedTPs = 1;
|
||||
iSymbolInfo.symbol = trades[idx].signal.symbol;
|
||||
iSymbolInfo.managedProfits = trades[idx].profit;
|
||||
|
||||
//
|
||||
AddOrUpdateSymbolInfo(iSymbolInfo);
|
||||
@@ -1804,6 +1880,7 @@ class XCXCATBEATradeManager : public XCBaseAlert
|
||||
iSymbolInfo.managedSLs = 1;
|
||||
}
|
||||
iSymbolInfo.symbol = trades[idx].signal.symbol;
|
||||
iSymbolInfo.managedProfits = trades[idx].profit;
|
||||
|
||||
//
|
||||
AddOrUpdateSymbolInfo(iSymbolInfo);
|
||||
@@ -1886,6 +1963,7 @@ class XCXCATBEATradeManager : public XCBaseAlert
|
||||
iSymbolInfo.managedSLs = 1;
|
||||
}
|
||||
iSymbolInfo.symbol = trades[idx].signal.symbol;
|
||||
iSymbolInfo.managedProfits = trades[idx].profit;
|
||||
|
||||
//
|
||||
AddOrUpdateSymbolInfo(iSymbolInfo);
|
||||
@@ -2207,6 +2285,34 @@ class XCXCATBEATradeManager : public XCBaseAlert
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
string GetRestrictionsFilePath(string symbol)
|
||||
{
|
||||
//
|
||||
string result = NULL;
|
||||
|
||||
//
|
||||
if (!IsValid(symbol))
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
string mPath = collector.Path();
|
||||
|
||||
//
|
||||
result =
|
||||
//
|
||||
mPath + "\\" +
|
||||
"Restrictions" + "\\" +
|
||||
symbol + "\\" + ".x121.log"
|
||||
//
|
||||
;
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
void HandleReportBalance(string prefix = NULL)
|
||||
{
|
||||
@@ -2418,6 +2524,46 @@ class XCXCATBEATradeManager : public XCBaseAlert
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
bool SaveRestrictions(XCATBEASymbolInfo &info)
|
||||
{
|
||||
//
|
||||
bool result = false;
|
||||
|
||||
//
|
||||
if (!mSaveRestrictions)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
result = info.IsValid();
|
||||
if (!result)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
string filePath = GetRestrictionsFilePath(info.symbol);
|
||||
result = IsValid(filePath);
|
||||
if (!result)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
string content = info.GetRestrictionDescription(restrictionsPeriod);
|
||||
|
||||
//
|
||||
result = collector.Append(
|
||||
filePath,
|
||||
content //
|
||||
);
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
// Symbol Info ...
|
||||
|
||||
@@ -2536,6 +2682,7 @@ class XCXCATBEATradeManager : public XCBaseAlert
|
||||
symbols[index].managedSLs += item.managedSLs;
|
||||
symbols[index].managedTPs += item.managedTPs;
|
||||
symbols[index].managedTrades += item.managedTrades;
|
||||
symbols[index].managedProfits += item.managedProfits;
|
||||
|
||||
//
|
||||
// Handle Remove on Managed SL based On Managed TP ...
|
||||
@@ -2573,14 +2720,41 @@ class XCXCATBEATradeManager : public XCBaseAlert
|
||||
//
|
||||
string prefix = "Protector: ";
|
||||
|
||||
//
|
||||
datetime start = TimeCurrent();
|
||||
double balance = trader.mAccount.GetBalance();
|
||||
bool hasRestrictions = HasRestrictions();
|
||||
if (!hasRestrictions)
|
||||
{
|
||||
//
|
||||
balance = 0;
|
||||
start = NULL;
|
||||
}
|
||||
|
||||
//
|
||||
int count = ArraySize(symbols);
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
//
|
||||
XCATBEASymbolInfo iInfo = symbols[i];
|
||||
if (reportRestrictions)
|
||||
{
|
||||
//
|
||||
string message = iInfo.GetRestrictionDescription(restrictionsPeriod);
|
||||
SendAlert(message);
|
||||
}
|
||||
SaveRestrictions(iInfo);
|
||||
|
||||
//
|
||||
symbols[i].managedSLs = 0;
|
||||
symbols[i].managedTPs = 0;
|
||||
symbols[i].managedTrades = 0;
|
||||
symbols[i].managedProfits = 0;
|
||||
symbols[i].managedStart = start;
|
||||
symbols[i].managedBalance = balance;
|
||||
|
||||
//
|
||||
iInfo.Clean();
|
||||
}
|
||||
|
||||
//
|
||||
@@ -2748,17 +2922,23 @@ class XCXCATBEATradeManager : public XCBaseAlert
|
||||
int maxAllowedSLs;
|
||||
int maxAllowedTrades;
|
||||
ENUM_XCATBEA_TRADE_RESTRICTION_PERIOD restrictionsPeriod;
|
||||
bool HasRestrictions()
|
||||
{
|
||||
return restrictionsPeriod != XCATBEA_TRADE_RESTRICATION_NONE;
|
||||
}
|
||||
|
||||
//
|
||||
bool mSaveWins;
|
||||
bool mSaveLosts;
|
||||
bool mSaveTrades;
|
||||
bool mSaveSignals;
|
||||
bool mSaveRestrictions;
|
||||
|
||||
//
|
||||
bool reportTrades;
|
||||
bool reportSignals;
|
||||
bool reportProtector;
|
||||
bool reportRestrictions;
|
||||
bool reportAfterTradesBalance;
|
||||
|
||||
//
|
||||
|
||||
Reference in New Issue
Block a user