This commit is contained in:
2025-01-04 00:01:22 +03:30
parent 6e03d6d993
commit fbc232a2b7
4 changed files with 331 additions and 42 deletions
@@ -3311,6 +3311,79 @@ class XC121SMCTradeHandler : public XCBaseAlert
return result;
}
/**
* Force Close Specified Positions ...
*
* @param symbol: String ...
* @param provider: String ...
* @param period: ENUM_TIMEFRAMES member ...
* @param type: ENUM_X_POSITION_TYPES member ...
*
* @return ( bool )
*/
bool ForceClose(
string symbol = NULL,
string provider = NULL,
ENUM_TIMEFRAMES period = NULL,
ENUM_X_POSITION_TYPES type = NULL //
)
{
//
bool result = false;
//
XPosition positions[];
int count = mTrader.GetPositions(
positions,
symbol,
provider,
period,
type //
);
result = IsValidSize(count);
if (!result)
{
return result;
}
//
datetime cTime = TimeCurrent();
//
string comment = "Force Close (" + ToString(count) + ") Positions At: " + ToFormatString(cTime) + "...";
int closedPositionsCount = mTrader.Close(
positions,
comment //
);
result = IsValidSize(closedPositionsCount);
if (result)
{
//
// Finish Positions and Clear Data ...
for (int i = 0; i < ArraySize(positions); i++)
{
//
XPosition iPosition = positions[i];
Finish(
iPosition.ticket,
iPosition,
comment //
);
}
//
ResetProtections();
//
string message = "Force Close (" + ToString(count) + ") Positions At: " +
ToFormatString(cTime) + " Successfully ...";
Alert(message);
}
//
return result;
}
//
// Timing Actions ...
+138 -39
View File
@@ -165,28 +165,6 @@ class XC121SMCExpert : public XCBaseExpert
ReConfigure();
}
/**
* Get Allow Open Trade On Signals State ...
*
* @return ( bool )
*/
bool AllowTrade()
{
return mAllowTrade;
}
/**
* Set Allow Open Trade On Signals State ...
*
* @param value: Boolean ...
*/
void AllowTrade(bool value)
{
//
mAllowTrade = value;
ReConfigure();
}
/**
* Get Use Max Allowed Signal Types Per Symbol State ...
*
@@ -329,6 +307,89 @@ class XC121SMCExpert : public XCBaseExpert
ReConfigure();
}
//
// Trade ...
/**
* Get Allow Open Trade On Signals State ...
*
* @return ( bool )
*/
bool AllowTrade()
{
return mAllowTrade;
}
/**
* Set Allow Open Trade On Signals State ...
*
* @param value: Boolean ...
*/
void AllowTrade(bool value)
{
mAllowTrade = value;
}
/**
* Get Enable Trade on Signals on Time ...
*
* @return ( string )
*/
string StartTradeAt()
{
return mStartTradeAt;
}
/**
* Set Enable Trade on Signals on Time ...
*
* @param value: String ...
*/
void StartTradeAt(string value)
{
mStartTradeAt = value;
}
/**
* Get Enable Trade on Signals on Time ...
*
* @return ( string )
*/
string StopTradeAt()
{
return mStopTradeAt;
}
/**
* Set Enable Trade on Signals on Time ...
*
* @param value: String ...
*/
void StopTradeAt(string value)
{
mStopTradeAt = value;
}
/**
* Get Enable Close All Trades on Signals on Time ...
*
* @return ( string )
*/
string CloseAllTradesAt()
{
return mCloseAllTradesAt;
}
/**
* Set Enable Close All Trades on Signals on Time ...
*
* @param value: String ...
*/
void CloseAllTradesAt(string value)
{
mCloseAllTradesAt = value;
}
//
// Risk Management Props ...
@@ -782,7 +843,13 @@ class XC121SMCExpert : public XCBaseExpert
if (mAlertRawSignals)
{
//
string msg = "Raw " + (IsLong(signal.type) ? "Long" : "Short") + " Signal Recieved: (" + signal.provider + "," + signal.symbol + "," + ToString(signal.period) + ") ...";
string msg = "Raw " + (IsLong(signal.type) ? "Long" : "Short") +
" Signal Recieved: (" + signal.provider + "," +
signal.symbol + "," +
ToString(signal.period) +
") ...";
//
Alert(msg);
}
@@ -833,14 +900,27 @@ class XC121SMCExpert : public XCBaseExpert
if (allowTrade)
{
//
// Execute Signal Using Trade Handler ...
ENUM_X_SIGNAL_EXECUTION_RESULT state;
bool isExecuted = mTradeHandler.ExecuteSignal(
signal,
conditions,
state,
false // ignore Policies ...
string startTime = StartTradeAt();
string endTime = StopTradeAt();
bool isTimePassed = IsTimeInRange(
TimeCurrent(),
startTime,
endTime //
);
//
if (isTimePassed)
{
//
// Execute Signal Using Trade Handler ...
ENUM_X_SIGNAL_EXECUTION_RESULT state;
bool isExecuted = mTradeHandler.ExecuteSignal(
signal,
conditions,
state,
false // ignore Policies ...
);
}
}
else
{
@@ -869,14 +949,14 @@ class XC121SMCExpert : public XCBaseExpert
signal,
signalObject //
);
DrawX121SMCStrategyConditions(
conditions,
objects,
eaDrawer,
true, // draw Market Structure ...
true, // Draw Price Zones ...
true // Draw Decision Zones ...
);
// DrawX121SMCStrategyConditions(
// conditions,
// objects,
// eaDrawer,
// true, // draw Market Structure ...
// true, // Draw Price Zones ...
// true // Draw Decision Zones ...
// );
//
Add(
@@ -1243,6 +1323,19 @@ class XC121SMCExpert : public XCBaseExpert
*/
void HandleStrategiesOnTick() override
{
//
// Check Force Close ...
string forceCloseTimeStr = CloseAllTradesAt();
datetime forceCloseTime = ParseDateTimeFromTimeString(forceCloseTimeStr);
bool canForceClose = IsTimeInRange(
TimeCurrent(),
forceCloseTime //
);
if (canForceClose)
{
mTradeHandler.ForceClose();
}
//
// Update Positions Data ...
mTradeHandler.UpdateData();
@@ -1645,7 +1738,6 @@ class XC121SMCExpert : public XCBaseExpert
// Signalling Props ...
bool mAllowLong; // Allow Long Signals ...
bool mAllowShort; // Allow Short Signals ...
bool mAllowTrade; // Allow Open Trade On Signals ...
int mMaxAllowedLongs; // Max Allowed Long Signals ...
int mMaxAllowedShorts; // Max Allowed Short Signals ...
bool mUseMaxAllowedSignalsPerSymbol; // Use Max Allowed Signal Types Per Symbol ...
@@ -1654,6 +1746,13 @@ class XC121SMCExpert : public XCBaseExpert
double mMaxAllowedSpread; // Max Allowed Spread for Signalling ...
int mMinRequiredVerificationForSpreadPass; // Minimum Spread Verification for Signalling ...
//
// Trade ...
bool mAllowTrade; // Allow Open Trade On Signals ...
string mStartTradeAt; // Enable Trade on Signals on Time ...
string mStopTradeAt; // Enable Trade on Signals on Time ...
string mCloseAllTradesAt; // Enable Close All Trades on Signals on Time ...
//
// Risk Management Props ...
double mR2R; // Signallers Risk to Reward Ratio ...