last ...
This commit is contained in:
@@ -46,7 +46,6 @@ input string eaSymbols = "EURUSDb,GBPUSDb,USDJPYb,USDCHFb"; // Trading Symbols
|
||||
input group "Signalling";
|
||||
input bool eaAllowLong = true; // Allow Long Signals
|
||||
input bool eaAllowShort = true; // Allow Short Signals
|
||||
input bool eaAllowTrade = true; // Allow Open Trade On Signals
|
||||
input int eaMaxAllowedLongs = 5; // Max Allowed Long Signals
|
||||
input int eaMaxAllowedShorts = 5; // Max Allowed Short Signals
|
||||
input bool eaUseMaxAllowedSignalsPerSymbol = true; // Use Max Allowed Signal Types Per Symbol
|
||||
@@ -55,6 +54,14 @@ input int eaDelaysBetweenTwoSignalsInBar = 100; // Delay between two
|
||||
input double eaMaxAllowedSpread = 25; // Max Allowed Spread for Signalling
|
||||
input int eaMinRequiredVerificationForSpreadPass = 20; // Minimum Spread Verification for Signalling
|
||||
|
||||
//
|
||||
// Trade ...
|
||||
input group "Trade";
|
||||
input bool eaAllowTrade = true; // Allow Open Trade On Signals
|
||||
input string eaStartTradeAt = "0:0"; // Enable Trade on Signals on Time
|
||||
input string eaStopTradeAt = "0:0"; // Enable Trade on Signals on Time
|
||||
input string eaCloseAllTradesAt = "0:0"; // Enable Close All Trades on Signals on Time
|
||||
|
||||
//
|
||||
// Risk Management ...
|
||||
input group "Risk Management";
|
||||
@@ -153,7 +160,6 @@ int OnInit()
|
||||
// Signalling ...
|
||||
eaExpert.AllowLong(eaAllowLong);
|
||||
eaExpert.AllowShort(eaAllowShort);
|
||||
eaExpert.AllowTrade(eaAllowTrade);
|
||||
eaExpert.MaxAllowedLongs(eaMaxAllowedLongs);
|
||||
eaExpert.MaxAllowedShorts(eaMaxAllowedShorts);
|
||||
eaExpert.UseMaxAllowedSignalsPerSymbol(eaUseMaxAllowedSignalsPerSymbol);
|
||||
@@ -162,6 +168,13 @@ int OnInit()
|
||||
eaExpert.MaxAllowedSpread(eaMaxAllowedSpread);
|
||||
eaExpert.MinRequiredVerificationForSpreadPass(eaMinRequiredVerificationForSpreadPass);
|
||||
|
||||
//
|
||||
// Trade ...
|
||||
eaExpert.AllowTrade(eaAllowTrade);
|
||||
eaExpert.StartTradeAt(eaStartTradeAt);
|
||||
eaExpert.StopTradeAt(eaStopTradeAt);
|
||||
eaExpert.CloseAllTradesAt(eaCloseAllTradesAt);
|
||||
|
||||
//
|
||||
// Risk Management ...
|
||||
eaExpert.R2R(eaR2R);
|
||||
|
||||
@@ -5778,6 +5778,74 @@ string ToFormatString(
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts an String Represetation of Time (00:00) to Date Time ..
|
||||
*
|
||||
* @param value: String ...
|
||||
*
|
||||
* @return ( datetime )
|
||||
*/
|
||||
datetime ParseDateTimeFromTimeString(string value)
|
||||
{
|
||||
//
|
||||
datetime result = NULL;
|
||||
|
||||
//
|
||||
if (!IsValid(value))
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
// Check Signalling Time ...
|
||||
MqlDateTime cTime;
|
||||
bool isTimeRecieved = TimeCurrent(cTime);
|
||||
if (!isTimeRecieved)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
// Split ...
|
||||
string parts[];
|
||||
int partsCount = SplitContent(
|
||||
parts,
|
||||
value,
|
||||
":"
|
||||
//
|
||||
);
|
||||
if (!IsValidSize(partsCount))
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
int hour = 0;
|
||||
int minute = 0;
|
||||
if (partsCount >= 1)
|
||||
{
|
||||
hour = (int)(parts[0]);
|
||||
}
|
||||
if (partsCount >= 2)
|
||||
{
|
||||
minute = (int)(parts[1]);
|
||||
}
|
||||
|
||||
//
|
||||
cTime.day_of_week = 0;
|
||||
cTime.day_of_year = 0;
|
||||
|
||||
//
|
||||
cTime.hour = hour;
|
||||
cTime.min = minute;
|
||||
|
||||
//
|
||||
result = StructToTime(cTime);
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
// Check Specific Time in Range of another Time ...
|
||||
bool IsTimeInRange(
|
||||
@@ -5791,7 +5859,7 @@ bool IsTimeInRange(
|
||||
|
||||
//
|
||||
// Normallize Current Time ...
|
||||
NormalizeTime(currentTime);
|
||||
currentTime = NormalizeTime(currentTime);
|
||||
|
||||
//
|
||||
result = !IsValid(startTime) &&
|
||||
@@ -5821,6 +5889,42 @@ bool IsTimeInRange(
|
||||
//
|
||||
return result;
|
||||
}
|
||||
bool IsTimeInRange(
|
||||
datetime currentTime,
|
||||
string startTime,
|
||||
string endTime //
|
||||
)
|
||||
{
|
||||
//
|
||||
bool result = false;
|
||||
|
||||
//
|
||||
result = IsValid(startTime) &&
|
||||
IsValid(endTime);
|
||||
if (!result)
|
||||
{
|
||||
//
|
||||
// Here Since there isnot provide any
|
||||
// data source we pass result as true ...
|
||||
result = true;
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
// Converts String Representation to Time ...
|
||||
datetime st = ParseDateTimeFromTimeString(startTime);
|
||||
datetime et = ParseDateTimeFromTimeString(endTime);
|
||||
|
||||
//
|
||||
result = IsTimeInRange(
|
||||
currentTime,
|
||||
st,
|
||||
et //
|
||||
);
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
// Bar Times ...
|
||||
|
||||
@@ -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 ...
|
||||
|
||||
|
||||
@@ -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 ...
|
||||
|
||||
Reference in New Issue
Block a user