last ...
This commit is contained in:
@@ -514,6 +514,85 @@ public:
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
XSCZones *GetZones(
|
||||||
|
ENUM_X_MARKET_CYCLES cycle = X_MARKET_CYCLE_UNKNOWN, //
|
||||||
|
int barIndex = 0, //
|
||||||
|
int numberOfZones = 10 //
|
||||||
|
)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
XSCZonesInput zInputs;
|
||||||
|
zInputs.numberOfZones = numberOfZones;
|
||||||
|
zInputs.AddLevelColor(
|
||||||
|
0.15,
|
||||||
|
clrYellow //
|
||||||
|
);
|
||||||
|
zInputs.AddLevelColor(
|
||||||
|
0.20,
|
||||||
|
clrOrange //
|
||||||
|
);
|
||||||
|
zInputs.AddLevelColor(
|
||||||
|
0.25,
|
||||||
|
clrRed //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
int length = 0;
|
||||||
|
ENUM_TIMEFRAMES zPeriod = NULL;
|
||||||
|
switch (cycle)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
case X_MARKET_CYCLE_SHORT:
|
||||||
|
//
|
||||||
|
zPeriod = sCycle.GetPeriod();
|
||||||
|
break;
|
||||||
|
|
||||||
|
//
|
||||||
|
case X_MARKET_CYCLE_MEDIUM:
|
||||||
|
//
|
||||||
|
zPeriod = mCycle.GetPeriod();
|
||||||
|
break;
|
||||||
|
|
||||||
|
//
|
||||||
|
case X_MARKET_CYCLE_LONG:
|
||||||
|
//
|
||||||
|
zPeriod = lCycle.GetPeriod();
|
||||||
|
break;
|
||||||
|
|
||||||
|
//
|
||||||
|
case X_MARKET_CYCLE_HIND:
|
||||||
|
//
|
||||||
|
zPeriod = hCycle.GetPeriod();
|
||||||
|
break;
|
||||||
|
|
||||||
|
//
|
||||||
|
default:
|
||||||
|
case X_MARKET_CYCLE_UNKNOWN:
|
||||||
|
//
|
||||||
|
zPeriod = cCycle.GetPeriod();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
ENUM_TIMEFRAMES cPeriod = GetPeriod();
|
||||||
|
length = (PeriodSeconds(zPeriod) / PeriodSeconds(cPeriod)) + 1;
|
||||||
|
|
||||||
|
//
|
||||||
|
zInputs.length = length;
|
||||||
|
XSCZones *result = new XSCZones(
|
||||||
|
GetSymbol(),
|
||||||
|
cPeriod //
|
||||||
|
);
|
||||||
|
if (!result.Init(zInputs))
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Protected ...
|
// Protected ...
|
||||||
protected:
|
protected:
|
||||||
|
|||||||
@@ -1042,6 +1042,118 @@ public:
|
|||||||
mSave = value;
|
mSave = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Trailling Stop ...
|
||||||
|
|
||||||
|
//
|
||||||
|
bool AllowTrailStop()
|
||||||
|
{
|
||||||
|
return mAllowTrailStop;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
void AllowTrailStop(bool value)
|
||||||
|
{
|
||||||
|
mAllowTrailStop = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
double NextTrailPoint()
|
||||||
|
{
|
||||||
|
return mNextTrailPoint;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
void NextTrailPoint(double value)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
if (value < 0)
|
||||||
|
{
|
||||||
|
value = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
mNextTrailPoint = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
double FirstTrailPoint()
|
||||||
|
{
|
||||||
|
return mFirstTrailPoint;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
void FirstTrailPoint(double value)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
if (value < 0)
|
||||||
|
{
|
||||||
|
value = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
mFirstTrailPoint = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
double NextTrailDistance()
|
||||||
|
{
|
||||||
|
return mNextTrailDistance;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
void NextTrailDistance(double value)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
if (value < 0)
|
||||||
|
{
|
||||||
|
value = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
mNextTrailDistance = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
double FirstTrailDistance()
|
||||||
|
{
|
||||||
|
return mFirstTrailDistance;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
void FirstTrailDistance(double value)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
if (value < 0)
|
||||||
|
{
|
||||||
|
value = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
mFirstTrailDistance = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
bool EnableTrailling()
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
result =
|
||||||
|
//
|
||||||
|
AllowTrailStop() &&
|
||||||
|
NextTrailPoint() > 0 &&
|
||||||
|
FirstTrailPoint() > 0 &&
|
||||||
|
NextTrailDistance() > 0 &&
|
||||||
|
FirstTrailDistance() > 0
|
||||||
|
//
|
||||||
|
;
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Grid System ...
|
// Grid System ...
|
||||||
|
|
||||||
@@ -1469,6 +1581,140 @@ public:
|
|||||||
Finish(infoIDX);
|
Finish(infoIDX);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Protection Handlers ...
|
||||||
|
|
||||||
|
//
|
||||||
|
int HandleTrailling()
|
||||||
|
{
|
||||||
|
//
|
||||||
|
int result = 0;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Check Trailling is Enabled or not ...
|
||||||
|
if (!EnableTrailling())
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Do Synch Before Start Trailing ...
|
||||||
|
Sync();
|
||||||
|
|
||||||
|
//
|
||||||
|
// Since Trailing Done based On In Profit Positions ...
|
||||||
|
// First we Check if ...
|
||||||
|
XPosition positions[];
|
||||||
|
int positionsCount = mTrader.GetInProfitPositions(positions);
|
||||||
|
if (!IsValidSize(positionsCount))
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
for (int i = 0; i < positionsCount; i++)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
XPosition iPosition = positions[i];
|
||||||
|
|
||||||
|
//
|
||||||
|
// ignore Support Positions ...
|
||||||
|
bool isSupport = IsSupport(iPosition.comment);
|
||||||
|
if (isSupport)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Find Positin Info Index ...
|
||||||
|
int idx = FindIndex(iPosition.ticket);
|
||||||
|
if (!IsValidIndex(idx))
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
bool isLong = IsLong(iPosition.type);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Here we Select Price for SL Trailling ...
|
||||||
|
double usedPrice =
|
||||||
|
iPosition.sl > 0 &&
|
||||||
|
isLong
|
||||||
|
? iPosition.sl < iPosition.entry
|
||||||
|
? iPosition.entry
|
||||||
|
: iPosition.sl
|
||||||
|
: iPosition.sl > iPosition.entry
|
||||||
|
? iPosition.entry
|
||||||
|
: iPosition.sl;
|
||||||
|
|
||||||
|
//
|
||||||
|
double nextTrailPoint = NextTrailPoint();
|
||||||
|
double firstTrailPoint = FirstTrailPoint();
|
||||||
|
double nextTrailDistance = NextTrailDistance();
|
||||||
|
double firstTrailDistance = FirstTrailDistance();
|
||||||
|
|
||||||
|
//
|
||||||
|
bool isFirstTrail = usedPrice == iPosition.entry;
|
||||||
|
|
||||||
|
//
|
||||||
|
double usedTrailDiff =
|
||||||
|
isFirstTrail
|
||||||
|
? MathMax(firstTrailPoint, firstTrailDistance)
|
||||||
|
: MathMax(nextTrailPoint, nextTrailDistance);
|
||||||
|
|
||||||
|
//
|
||||||
|
double iExit = GetExit(
|
||||||
|
iPosition.symbol,
|
||||||
|
iPosition.type //
|
||||||
|
);
|
||||||
|
double iPriceDistance = MathAbs(usedPrice - iExit);
|
||||||
|
double iPriceDistanceInPoint = PriceToPoint(
|
||||||
|
iPriceDistance,
|
||||||
|
iPosition.symbol //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
bool canTrail = iPriceDistanceInPoint >= usedTrailDiff;
|
||||||
|
if (!canTrail)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
usedTrailDiff =
|
||||||
|
isFirstTrail
|
||||||
|
? MathMin(firstTrailPoint, firstTrailDistance)
|
||||||
|
: MathMin(nextTrailPoint, nextTrailDistance);
|
||||||
|
double usedTrailDiffPrice = PointToPrice(
|
||||||
|
usedTrailDiff,
|
||||||
|
iPosition.symbol //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
double sl =
|
||||||
|
isLong
|
||||||
|
? usedPrice + usedTrailDiffPrice
|
||||||
|
: usedPrice - usedTrailDiffPrice;
|
||||||
|
string comment = PrepareSLTrailTag(iPosition.comment);
|
||||||
|
|
||||||
|
//
|
||||||
|
bool isModified = mTrader.Modify(
|
||||||
|
iPosition.ticket,
|
||||||
|
sl,
|
||||||
|
iPosition.tp,
|
||||||
|
comment //
|
||||||
|
);
|
||||||
|
if (isModified)
|
||||||
|
{
|
||||||
|
result++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
int RequestForGrid(XSignal &signals[])
|
int RequestForGrid(XSignal &signals[])
|
||||||
{
|
{
|
||||||
@@ -1703,6 +1949,14 @@ protected:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Stop Trailling ...
|
||||||
|
bool mAllowTrailStop; // Enable Trailling Stop Losses
|
||||||
|
double mFirstTrailDistance; // Start Trailling Distance
|
||||||
|
double mFirstTrailPoint; // First Stop Trail
|
||||||
|
double mNextTrailDistance; // Next Trailling Distance
|
||||||
|
double mNextTrailPoint; // Next Trailling Step
|
||||||
|
|
||||||
//
|
//
|
||||||
// Grid ...
|
// Grid ...
|
||||||
bool mAllowGrid; // Use Grid System to Recovery Positions
|
bool mAllowGrid; // Use Grid System to Recovery Positions
|
||||||
@@ -2006,6 +2260,69 @@ public:
|
|||||||
mUseSupport = value;
|
mUseSupport = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Trailling Stop ...
|
||||||
|
|
||||||
|
//
|
||||||
|
bool AllowTrailStop()
|
||||||
|
{
|
||||||
|
return mTradeInfoHandler.AllowTrailStop();
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
void AllowTrailStop(bool value)
|
||||||
|
{
|
||||||
|
mTradeInfoHandler.AllowTrailStop(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
double NextTrailPoint()
|
||||||
|
{
|
||||||
|
return mTradeInfoHandler.NextTrailPoint();
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
void NextTrailPoint(double value)
|
||||||
|
{
|
||||||
|
mTradeInfoHandler.NextTrailPoint(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
double FirstTrailPoint()
|
||||||
|
{
|
||||||
|
return mTradeInfoHandler.FirstTrailPoint();
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
void FirstTrailPoint(double value)
|
||||||
|
{
|
||||||
|
mTradeInfoHandler.FirstTrailPoint(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
double NextTrailDistance()
|
||||||
|
{
|
||||||
|
return mTradeInfoHandler.NextTrailDistance();
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
void NextTrailDistance(double value)
|
||||||
|
{
|
||||||
|
mTradeInfoHandler.NextTrailDistance(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
double FirstTrailDistance()
|
||||||
|
{
|
||||||
|
return mTradeInfoHandler.FirstTrailDistance();
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
void FirstTrailDistance(double value)
|
||||||
|
{
|
||||||
|
mTradeInfoHandler.FirstTrailDistance(value);
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Grid System ...
|
// Grid System ...
|
||||||
|
|
||||||
@@ -3087,9 +3404,52 @@ private:
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
int FindSetupIndex(
|
||||||
|
string symbol //
|
||||||
|
)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
int result = -1;
|
||||||
|
|
||||||
|
//
|
||||||
|
int count = CountSetups();
|
||||||
|
if (!IsValidSize(count))
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
for (int i = 0; i < count; i++)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
XSCX121SetupCycles *iSetup = mSetups[i];
|
||||||
|
|
||||||
|
//
|
||||||
|
X121SetupInputs iInputs = iSetup.GetInputs();
|
||||||
|
|
||||||
|
//
|
||||||
|
if (iInputs.symbol == symbol)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
result = i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// EQM Functions ...
|
// EQM Functions ...
|
||||||
|
|
||||||
|
//
|
||||||
|
bool EnableTrailling()
|
||||||
|
{
|
||||||
|
return mTradeInfoHandler.EnableTrailling();
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
bool EnableGrid()
|
bool EnableGrid()
|
||||||
{
|
{
|
||||||
@@ -3105,7 +3465,7 @@ private:
|
|||||||
//
|
//
|
||||||
bool EnableProtection()
|
bool EnableProtection()
|
||||||
{
|
{
|
||||||
return EnableGrid() || EnableRecovery();
|
return EnableGrid() || EnableRecovery() || EnableTrailling();
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -3347,6 +3707,22 @@ private:
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Handle Trailling ...
|
||||||
|
if (EnableTrailling())
|
||||||
|
{
|
||||||
|
//
|
||||||
|
int trailsCount = mTradeInfoHandler.HandleTrailling();
|
||||||
|
if (IsValidSize(trailsCount))
|
||||||
|
{
|
||||||
|
//
|
||||||
|
string message = XEQMSupportToken + " Successfully Trail Stop for: " + ToString(trailsCount) + " Position(s) ...";
|
||||||
|
|
||||||
|
//
|
||||||
|
Alert(message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
XSignal signals[];
|
XSignal signals[];
|
||||||
int signalsCount = mTradeInfoHandler
|
int signalsCount = mTradeInfoHandler
|
||||||
@@ -3364,6 +3740,10 @@ private:
|
|||||||
states,
|
states,
|
||||||
false // Ignore Policies ...
|
false // Ignore Policies ...
|
||||||
);
|
);
|
||||||
|
if (executed != signalsCount)
|
||||||
|
{
|
||||||
|
Print("Error On Executing Support Signal ...");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -344,7 +344,8 @@ public:
|
|||||||
|
|
||||||
//
|
//
|
||||||
// Find Highest Value in Range ...
|
// Find Highest Value in Range ...
|
||||||
mRangeHigh = mHighs[ArrayMaximum(mHighs)];
|
int highIDX = ArrayMaximum(mHighs);
|
||||||
|
mRangeHigh = mHighs[highIDX];
|
||||||
|
|
||||||
//
|
//
|
||||||
// Retrieve Lows ...
|
// Retrieve Lows ...
|
||||||
@@ -359,7 +360,20 @@ public:
|
|||||||
|
|
||||||
//
|
//
|
||||||
// Find Lowest Value in Range ...
|
// Find Lowest Value in Range ...
|
||||||
mRangeLow = mLows[ArrayMinimum(mLows)];
|
int lowIDX = ArrayMinimum(mLows);
|
||||||
|
mRangeLow = mLows[lowIDX];
|
||||||
|
|
||||||
|
//
|
||||||
|
datetime mTimes[];
|
||||||
|
CopyTime(
|
||||||
|
mSymbol,
|
||||||
|
mPeriod,
|
||||||
|
mStartTime,
|
||||||
|
mEndTime,
|
||||||
|
mTimes //
|
||||||
|
);
|
||||||
|
mRangeHighTime = mTimes[highIDX];
|
||||||
|
mRangeLowTime = mTimes[lowIDX];
|
||||||
|
|
||||||
//
|
//
|
||||||
double mRangeSize = GetRange();
|
double mRangeSize = GetRange();
|
||||||
@@ -632,7 +646,9 @@ protected:
|
|||||||
double mHighs[];
|
double mHighs[];
|
||||||
double mLows[];
|
double mLows[];
|
||||||
double mRangeHigh;
|
double mRangeHigh;
|
||||||
|
datetime mRangeHighTime;
|
||||||
double mRangeLow;
|
double mRangeLow;
|
||||||
|
datetime mRangeLowTime;
|
||||||
|
|
||||||
//
|
//
|
||||||
CArrayObj mZones;
|
CArrayObj mZones;
|
||||||
|
|||||||
@@ -1280,7 +1280,7 @@ protected:
|
|||||||
string message = "Guard Hedge " + provider + "'s Positions on Profit: " + ToString(profit);
|
string message = "Guard Hedge " + provider + "'s Positions on Profit: " + ToString(profit);
|
||||||
|
|
||||||
//
|
//
|
||||||
mAlert.Alert(message);
|
Alert(message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1323,7 +1323,7 @@ protected:
|
|||||||
string message = "Guard Close (" + ToString(positionsCount) + ") Postion(s) In Profit ...";
|
string message = "Guard Close (" + ToString(positionsCount) + ") Postion(s) In Profit ...";
|
||||||
|
|
||||||
//
|
//
|
||||||
mAlert.Alert(message);
|
Alert(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -1365,7 +1365,7 @@ protected:
|
|||||||
string message = "Guard Close (" + ToString(positionsCount) + ") Position(s) In Drawdown ...";
|
string message = "Guard Close (" + ToString(positionsCount) + ") Position(s) In Drawdown ...";
|
||||||
|
|
||||||
//
|
//
|
||||||
mAlert.Alert(message);
|
Alert(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -1441,7 +1441,7 @@ protected:
|
|||||||
//
|
//
|
||||||
if (IsValid(comment))
|
if (IsValid(comment))
|
||||||
{
|
{
|
||||||
mAlert.Alert(comment);
|
Alert(comment);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1519,7 +1519,7 @@ protected:
|
|||||||
string message = "(" + ToString(modified) + ") Position's Stop Trailed Successfully ...";
|
string message = "(" + ToString(modified) + ") Position's Stop Trailed Successfully ...";
|
||||||
|
|
||||||
//
|
//
|
||||||
mAlert.Alert(message);
|
Alert(message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1573,7 +1573,7 @@ protected:
|
|||||||
//
|
//
|
||||||
if (IsValid(comment))
|
if (IsValid(comment))
|
||||||
{
|
{
|
||||||
mAlert.Alert(comment);
|
Alert(comment);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1613,7 +1613,7 @@ protected:
|
|||||||
string message = "Guard Cancel (" + ToString(canceledOrdersCount) + ") Pending Orders ...";
|
string message = "Guard Cancel (" + ToString(canceledOrdersCount) + ") Pending Orders ...";
|
||||||
|
|
||||||
//
|
//
|
||||||
mAlert.Alert(message);
|
Alert(message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,140 @@
|
|||||||
|
|
||||||
|
//
|
||||||
|
XSCZones *mLastHindZones;
|
||||||
|
XSCZones *mLastLongZones;
|
||||||
|
XSCZones *mLastMediumZones;
|
||||||
|
|
||||||
|
//
|
||||||
|
bool DoEQMProtectOfSupports()
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
// The Senario is When all Signals are Support and Account in Drawdown
|
||||||
|
// here we have to Do some Support Actions ...
|
||||||
|
|
||||||
|
//
|
||||||
|
XPosition positions[];
|
||||||
|
int positionsCount = mTrader.GetPositions(positions);
|
||||||
|
result = IsValidSize(positionsCount);
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Noe We Have to Separate Support Positions ...
|
||||||
|
XPosition supports[];
|
||||||
|
int supportsCount = ExtractSupportPositions(
|
||||||
|
positions,
|
||||||
|
supports //
|
||||||
|
);
|
||||||
|
result = IsValidSize(supportsCount);
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Now We Are sure we have Support Positions ...
|
||||||
|
// then we must Check the Supports are Long enough to make the Support ...
|
||||||
|
XPosition youngest;
|
||||||
|
int youngestAge = GetYoungest(
|
||||||
|
youngest,
|
||||||
|
supports //
|
||||||
|
);
|
||||||
|
result = youngestAge > 2;
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Try to Find Youngest Support's Setup ...
|
||||||
|
int setupIDX = FindSetupIndex(
|
||||||
|
youngest.symbol //
|
||||||
|
);
|
||||||
|
result = IsValidIndex(setupIDX);
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Now we can Implememnt Support of Supports based on
|
||||||
|
// Several Senarios ...
|
||||||
|
// 1. Recieve Market Conditions;
|
||||||
|
// 2. Recieve Summary of Long Verifications and Short Verifications;
|
||||||
|
// 3. Collect VolumeOSC and also Bullish and Bearish Scores;
|
||||||
|
// 4. Collect XSCZones of Last HIND Market;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Hind Zone ...
|
||||||
|
if (mLastHindZones == NULL)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
mLastHindZones = mSetups[setupIDX].GetZones(
|
||||||
|
X_MARKET_CYCLE_HIND //
|
||||||
|
);
|
||||||
|
result = mLastHindZones != NULL;
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
result = mLastHindZones.DrawZones(0, "HIN");
|
||||||
|
if (result)
|
||||||
|
{
|
||||||
|
Print("Zone Drawn ...");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Long Zone ...
|
||||||
|
if (mLastLongZones == NULL)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
mLastLongZones = mSetups[setupIDX].GetZones(
|
||||||
|
X_MARKET_CYCLE_LONG //
|
||||||
|
);
|
||||||
|
result = mLastLongZones != NULL;
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
result = mLastLongZones.DrawZones(0, "LON");
|
||||||
|
if (result)
|
||||||
|
{
|
||||||
|
Print("Zone Drawn ...");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Medium Zone ...
|
||||||
|
if (mLastMediumZones == NULL)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
mLastMediumZones = mSetups[setupIDX].GetZones(
|
||||||
|
X_MARKET_CYCLE_MEDIUM //
|
||||||
|
);
|
||||||
|
result = mLastMediumZones != NULL;
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
result = mLastMediumZones.DrawZones(0, "MED");
|
||||||
|
if (result)
|
||||||
|
{
|
||||||
|
Print("Zone Drawn ...");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
@@ -49,16 +49,21 @@ input bool x121EAGetVerificationFromOtherTimeFrames = true; // Get Verifications
|
|||||||
// Risk Management ...
|
// Risk Management ...
|
||||||
input group "Risk Management";
|
input group "Risk Management";
|
||||||
input double x121EAVolume = 0.01; // Static Volume
|
input double x121EAVolume = 0.01; // Static Volume
|
||||||
input double x121EATPPoint = 100; // TP Point
|
input double x121EATPPoint = 200; // TP Point
|
||||||
input double x121EASLPoint = 100; // SL Point
|
input double x121EASLPoint = 200; // SL Point
|
||||||
input int x121EAMaxAllowedTrades = 1; // Max Allowed Positions
|
input int x121EAMaxAllowedTrades = 1; // Max Allowed Positions
|
||||||
input bool x121EAIgnoreSL = false; // Ignore Calculated SL
|
input bool x121EAIgnoreSL = false; // Ignore Calculated SL
|
||||||
input bool x121EAIgnoreTP = false; // Ignore Calculated TP
|
input bool x121EAIgnoreTP = false; // Ignore Calculated TP
|
||||||
|
input bool x121EAAllowTrailStop = true; // Enable Trailling Stop Losses
|
||||||
|
input double x121EAFirstTrailDistance = 60; // Start Trailling Distance
|
||||||
|
input double x121EAFirstTrailPoint = 50; // First Stop Trail
|
||||||
|
input double x121EANextTrailDistance = 10; // Next Trailling Distance
|
||||||
|
input double x121EANextTrailPoint = 5; // Next Trailling Step
|
||||||
input bool x121EAUseSupport = false; // Use Support Signals
|
input bool x121EAUseSupport = false; // Use Support Signals
|
||||||
input bool x121EAAllowGrid = false; // Allow Grid Signals
|
input bool x121EAAllowGrid = false; // Allow Grid Signals
|
||||||
input double x121EAGridDistance = 100; // Grid Distance
|
input double x121EAGridDistance = 100; // Grid Distance
|
||||||
input double x121EAGridVolumeMultiplier = 2; // Grid Volume Multiplier
|
input double x121EAGridVolumeMultiplier = 2; // Grid Volume Multiplier
|
||||||
input bool x121EAAllowRecovery = true; // Allow Recovery Signals
|
input bool x121EAAllowRecovery = false; // Allow Recovery Signals
|
||||||
input double x121EARecoveryDistance = 100; // Recovery Distance
|
input double x121EARecoveryDistance = 100; // Recovery Distance
|
||||||
input double x121EARecoveryVolumeMultiplier = 2; // Recovery Volume Multiplier
|
input double x121EARecoveryVolumeMultiplier = 2; // Recovery Volume Multiplier
|
||||||
input double x121EAMinRequiredProfitPerTrade = 0.5; // Minimum Required Profit for Hedging
|
input double x121EAMinRequiredProfitPerTrade = 0.5; // Minimum Required Profit for Hedging
|
||||||
@@ -204,6 +209,14 @@ bool InitialEA()
|
|||||||
x121EA.RecoveryDistance(x121EARecoveryDistance);
|
x121EA.RecoveryDistance(x121EARecoveryDistance);
|
||||||
x121EA.RecoveryVolumeMultiplier(x121EARecoveryVolumeMultiplier);
|
x121EA.RecoveryVolumeMultiplier(x121EARecoveryVolumeMultiplier);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Stop Loss Trailing ...
|
||||||
|
x121EA.AllowTrailStop(x121EAAllowTrailStop);
|
||||||
|
x121EA.NextTrailPoint(x121EANextTrailPoint);
|
||||||
|
x121EA.FirstTrailPoint(x121EAFirstTrailPoint);
|
||||||
|
x121EA.NextTrailDistance(x121EANextTrailDistance);
|
||||||
|
x121EA.FirstTrailDistance(x121EAFirstTrailDistance);
|
||||||
|
|
||||||
//
|
//
|
||||||
// Configure Alert ...
|
// Configure Alert ...
|
||||||
x121EA.SetAlertPrefix(ShortName);
|
x121EA.SetAlertPrefix(ShortName);
|
||||||
|
|||||||
@@ -4086,6 +4086,7 @@ ulong ExtractSupportedTicket(string value)
|
|||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
|
// Extract Support Positions ...
|
||||||
int ExtractSupportPositions(
|
int ExtractSupportPositions(
|
||||||
XPosition &source[],
|
XPosition &source[],
|
||||||
XPosition &dest[] // Result ...
|
XPosition &dest[] // Result ...
|
||||||
@@ -4111,8 +4112,9 @@ int ExtractSupportPositions(
|
|||||||
XPosition iSource = source[i];
|
XPosition iSource = source[i];
|
||||||
|
|
||||||
//
|
//
|
||||||
ulong iParentTicket = ExtractSupportedTicket(iSource.comment);
|
ulong isSupport = ExtractSupportedTicket(iSource.comment) > 0;
|
||||||
if (iParentTicket > 0)
|
ulong iEQMSupport = ExtractEQMSupportedTicket(iSource.comment) > 0;
|
||||||
|
if (isSupport || iEQMSupport)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
AddRef(
|
AddRef(
|
||||||
@@ -4153,6 +4155,31 @@ ulong ExtractEQMSupportedTicket(string value)
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
bool IsSupport(string value)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
bool isSupport = ExtractSupportedTicket(value) > 0;
|
||||||
|
bool isEQMSupport = ExtractEQMSupportedTicket(value) > 0;
|
||||||
|
|
||||||
|
//
|
||||||
|
result =
|
||||||
|
//
|
||||||
|
isSupport
|
||||||
|
//
|
||||||
|
||
|
||||||
|
//
|
||||||
|
isEQMSupport
|
||||||
|
//
|
||||||
|
;
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// SL Trails ...
|
// SL Trails ...
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user