last ...
This commit is contained in:
@@ -46,7 +46,6 @@ input string eaSymbols = "EURUSDb,GBPUSDb,USDJPYb,USDCHFb"; // Trading Symbols
|
|||||||
input group "Signalling";
|
input group "Signalling";
|
||||||
input bool eaAllowLong = true; // Allow Long Signals
|
input bool eaAllowLong = true; // Allow Long Signals
|
||||||
input bool eaAllowShort = true; // Allow Short 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 eaMaxAllowedLongs = 5; // Max Allowed Long Signals
|
||||||
input int eaMaxAllowedShorts = 5; // Max Allowed Short Signals
|
input int eaMaxAllowedShorts = 5; // Max Allowed Short Signals
|
||||||
input bool eaUseMaxAllowedSignalsPerSymbol = true; // Use Max Allowed Signal Types Per Symbol
|
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 double eaMaxAllowedSpread = 25; // Max Allowed Spread for Signalling
|
||||||
input int eaMinRequiredVerificationForSpreadPass = 20; // Minimum Spread Verification 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 ...
|
// Risk Management ...
|
||||||
input group "Risk Management";
|
input group "Risk Management";
|
||||||
@@ -153,7 +160,6 @@ int OnInit()
|
|||||||
// Signalling ...
|
// Signalling ...
|
||||||
eaExpert.AllowLong(eaAllowLong);
|
eaExpert.AllowLong(eaAllowLong);
|
||||||
eaExpert.AllowShort(eaAllowShort);
|
eaExpert.AllowShort(eaAllowShort);
|
||||||
eaExpert.AllowTrade(eaAllowTrade);
|
|
||||||
eaExpert.MaxAllowedLongs(eaMaxAllowedLongs);
|
eaExpert.MaxAllowedLongs(eaMaxAllowedLongs);
|
||||||
eaExpert.MaxAllowedShorts(eaMaxAllowedShorts);
|
eaExpert.MaxAllowedShorts(eaMaxAllowedShorts);
|
||||||
eaExpert.UseMaxAllowedSignalsPerSymbol(eaUseMaxAllowedSignalsPerSymbol);
|
eaExpert.UseMaxAllowedSignalsPerSymbol(eaUseMaxAllowedSignalsPerSymbol);
|
||||||
@@ -162,6 +168,13 @@ int OnInit()
|
|||||||
eaExpert.MaxAllowedSpread(eaMaxAllowedSpread);
|
eaExpert.MaxAllowedSpread(eaMaxAllowedSpread);
|
||||||
eaExpert.MinRequiredVerificationForSpreadPass(eaMinRequiredVerificationForSpreadPass);
|
eaExpert.MinRequiredVerificationForSpreadPass(eaMinRequiredVerificationForSpreadPass);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Trade ...
|
||||||
|
eaExpert.AllowTrade(eaAllowTrade);
|
||||||
|
eaExpert.StartTradeAt(eaStartTradeAt);
|
||||||
|
eaExpert.StopTradeAt(eaStopTradeAt);
|
||||||
|
eaExpert.CloseAllTradesAt(eaCloseAllTradesAt);
|
||||||
|
|
||||||
//
|
//
|
||||||
// Risk Management ...
|
// Risk Management ...
|
||||||
eaExpert.R2R(eaR2R);
|
eaExpert.R2R(eaR2R);
|
||||||
|
|||||||
@@ -5778,6 +5778,74 @@ string ToFormatString(
|
|||||||
return result;
|
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 ...
|
// Check Specific Time in Range of another Time ...
|
||||||
bool IsTimeInRange(
|
bool IsTimeInRange(
|
||||||
@@ -5791,7 +5859,7 @@ bool IsTimeInRange(
|
|||||||
|
|
||||||
//
|
//
|
||||||
// Normallize Current Time ...
|
// Normallize Current Time ...
|
||||||
NormalizeTime(currentTime);
|
currentTime = NormalizeTime(currentTime);
|
||||||
|
|
||||||
//
|
//
|
||||||
result = !IsValid(startTime) &&
|
result = !IsValid(startTime) &&
|
||||||
@@ -5821,6 +5889,42 @@ bool IsTimeInRange(
|
|||||||
//
|
//
|
||||||
return result;
|
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 ...
|
// Bar Times ...
|
||||||
|
|||||||
@@ -3311,6 +3311,79 @@ class XC121SMCTradeHandler : public XCBaseAlert
|
|||||||
return result;
|
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 ...
|
// Timing Actions ...
|
||||||
|
|
||||||
|
|||||||
@@ -165,28 +165,6 @@ class XC121SMCExpert : public XCBaseExpert
|
|||||||
ReConfigure();
|
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 ...
|
* Get Use Max Allowed Signal Types Per Symbol State ...
|
||||||
*
|
*
|
||||||
@@ -329,6 +307,89 @@ class XC121SMCExpert : public XCBaseExpert
|
|||||||
ReConfigure();
|
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 ...
|
// Risk Management Props ...
|
||||||
|
|
||||||
@@ -782,7 +843,13 @@ class XC121SMCExpert : public XCBaseExpert
|
|||||||
if (mAlertRawSignals)
|
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);
|
Alert(msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -831,6 +898,18 @@ class XC121SMCExpert : public XCBaseExpert
|
|||||||
// Chack Allow Trades ...
|
// Chack Allow Trades ...
|
||||||
bool allowTrade = AllowTrade();
|
bool allowTrade = AllowTrade();
|
||||||
if (allowTrade)
|
if (allowTrade)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
string startTime = StartTradeAt();
|
||||||
|
string endTime = StopTradeAt();
|
||||||
|
bool isTimePassed = IsTimeInRange(
|
||||||
|
TimeCurrent(),
|
||||||
|
startTime,
|
||||||
|
endTime //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
if (isTimePassed)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
// Execute Signal Using Trade Handler ...
|
// Execute Signal Using Trade Handler ...
|
||||||
@@ -842,6 +921,7 @@ class XC121SMCExpert : public XCBaseExpert
|
|||||||
false // ignore Policies ...
|
false // ignore Policies ...
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
@@ -869,14 +949,14 @@ class XC121SMCExpert : public XCBaseExpert
|
|||||||
signal,
|
signal,
|
||||||
signalObject //
|
signalObject //
|
||||||
);
|
);
|
||||||
DrawX121SMCStrategyConditions(
|
// DrawX121SMCStrategyConditions(
|
||||||
conditions,
|
// conditions,
|
||||||
objects,
|
// objects,
|
||||||
eaDrawer,
|
// eaDrawer,
|
||||||
true, // draw Market Structure ...
|
// true, // draw Market Structure ...
|
||||||
true, // Draw Price Zones ...
|
// true, // Draw Price Zones ...
|
||||||
true // Draw Decision Zones ...
|
// true // Draw Decision Zones ...
|
||||||
);
|
// );
|
||||||
|
|
||||||
//
|
//
|
||||||
Add(
|
Add(
|
||||||
@@ -1243,6 +1323,19 @@ class XC121SMCExpert : public XCBaseExpert
|
|||||||
*/
|
*/
|
||||||
void HandleStrategiesOnTick() override
|
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 ...
|
// Update Positions Data ...
|
||||||
mTradeHandler.UpdateData();
|
mTradeHandler.UpdateData();
|
||||||
@@ -1645,7 +1738,6 @@ class XC121SMCExpert : public XCBaseExpert
|
|||||||
// Signalling Props ...
|
// Signalling Props ...
|
||||||
bool mAllowLong; // Allow Long Signals ...
|
bool mAllowLong; // Allow Long Signals ...
|
||||||
bool mAllowShort; // Allow Short Signals ...
|
bool mAllowShort; // Allow Short Signals ...
|
||||||
bool mAllowTrade; // Allow Open Trade On Signals ...
|
|
||||||
int mMaxAllowedLongs; // Max Allowed Long Signals ...
|
int mMaxAllowedLongs; // Max Allowed Long Signals ...
|
||||||
int mMaxAllowedShorts; // Max Allowed Short Signals ...
|
int mMaxAllowedShorts; // Max Allowed Short Signals ...
|
||||||
bool mUseMaxAllowedSignalsPerSymbol; // Use Max Allowed Signal Types Per Symbol ...
|
bool mUseMaxAllowedSignalsPerSymbol; // Use Max Allowed Signal Types Per Symbol ...
|
||||||
@@ -1654,6 +1746,13 @@ class XC121SMCExpert : public XCBaseExpert
|
|||||||
double mMaxAllowedSpread; // Max Allowed Spread for Signalling ...
|
double mMaxAllowedSpread; // Max Allowed Spread for Signalling ...
|
||||||
int mMinRequiredVerificationForSpreadPass; // Minimum Spread Verification 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 ...
|
// Risk Management Props ...
|
||||||
double mR2R; // Signallers Risk to Reward Ratio ...
|
double mR2R; // Signallers Risk to Reward Ratio ...
|
||||||
|
|||||||
Reference in New Issue
Block a user