1380 lines
32 KiB
Plaintext
1380 lines
32 KiB
Plaintext
|
|
//
|
|
// POSITIONPACK ...
|
|
|
|
//
|
|
// Check a Position Pack is Ready for Hedging ...
|
|
bool IsReadyForEQMHedge(XPositionPack &pack)
|
|
{
|
|
//
|
|
bool result = false;
|
|
|
|
//
|
|
if (mMinProfitPerTrade <= 0 ||
|
|
mMinProfitPerVolumeFactor <= 0)
|
|
{
|
|
return result;
|
|
}
|
|
|
|
//
|
|
if (pack.supportPositionsCount <= 0)
|
|
{
|
|
return result;
|
|
}
|
|
|
|
//
|
|
double profit = pack.position.profit;
|
|
double requiredProfit =
|
|
((pack.position.volume / mMinProfitPerVolumeFactor) *
|
|
mMinProfitPerTrade) +
|
|
(-1 * pack.position.swap);
|
|
|
|
//
|
|
for (int i = 0; i < pack.supportPositionsCount; i++)
|
|
{
|
|
//
|
|
XPosition iPosition = pack.supportPositions[i];
|
|
|
|
//
|
|
profit += iPosition.profit;
|
|
requiredProfit +=
|
|
((iPosition.volume / mMinProfitPerVolumeFactor) *
|
|
mMinProfitPerTrade) +
|
|
(-1 * iPosition.swap);
|
|
}
|
|
|
|
//
|
|
result = profit >= requiredProfit;
|
|
|
|
//
|
|
return result;
|
|
}
|
|
|
|
//
|
|
// POSITIONMANAGEMENT ...
|
|
//
|
|
|
|
//
|
|
// Manage Positions ...
|
|
void HandlePositionManagement()
|
|
{
|
|
//
|
|
// HandleHedgePositionPacks();
|
|
|
|
//
|
|
// HandleHedgePositions();
|
|
|
|
//
|
|
// HandleCloseOrTrailStopMinProfitPositions();
|
|
}
|
|
|
|
//
|
|
void HandleHedgePositions()
|
|
{
|
|
//
|
|
bool isReady = IsPositionsReadyForEQMHedge();
|
|
if (!isReady)
|
|
{
|
|
return;
|
|
}
|
|
|
|
//
|
|
XPosition positions[];
|
|
int positionsCount = GetPositions(positions);
|
|
|
|
//
|
|
string comment = "EQM Hedge Positions ...";
|
|
|
|
//
|
|
int closed = mTrader.ClosePositions(
|
|
positions,
|
|
comment);
|
|
bool isClosed = closed == positionsCount;
|
|
if (isClosed)
|
|
{
|
|
//
|
|
LogMessage(comment);
|
|
}
|
|
}
|
|
|
|
//
|
|
// Close a Position Pack Wen Reached to Specific Profit ...
|
|
void HandleHedgePositionPacks()
|
|
{
|
|
//
|
|
XPosition positions[];
|
|
int positionsCount = GetPositions(positions);
|
|
if (positionsCount <= 0)
|
|
{
|
|
return;
|
|
}
|
|
|
|
//
|
|
for (int i = 0; i < positionsCount; i++)
|
|
{
|
|
//
|
|
XPosition iPosition = positions[i];
|
|
|
|
//
|
|
XPositionPack iPack;
|
|
bool hasPack = mTrader.GetPositionPack(
|
|
iPosition.ticket,
|
|
iPosition.symbol,
|
|
iPosition.period,
|
|
iPack);
|
|
if (!hasPack)
|
|
{
|
|
continue;
|
|
}
|
|
|
|
//
|
|
// Check Pack for Open Positions ...
|
|
bool isValidPack = iPack.supportPositionsCount > 0;
|
|
if (!isValidPack)
|
|
{
|
|
continue;
|
|
}
|
|
|
|
//
|
|
// we sure a Position has Support and it's support open ...
|
|
bool isReady = IsReadyForEQMHedge(iPack);
|
|
if (!isReady)
|
|
{
|
|
continue;
|
|
}
|
|
|
|
//
|
|
bool isClosed = HandleClosePack(iPack);
|
|
}
|
|
}
|
|
|
|
//
|
|
// Try to Trail StopLoss or Close Posititons
|
|
// when reached Min Profit ...
|
|
void HandleCloseOrTrailStopMinProfitPositions()
|
|
{
|
|
//
|
|
// Retrieve In Profit Positions ...
|
|
XPosition positions[];
|
|
int positionsCount = GetInProfitPositions(positions);
|
|
if (positionsCount <= 0)
|
|
{
|
|
return;
|
|
}
|
|
|
|
//
|
|
for (int i = 0; i < positionsCount; i++)
|
|
{
|
|
//
|
|
XPosition iPosition = positions[i];
|
|
|
|
//
|
|
// Now we have to Calculate min Profit ...
|
|
double requiredProfit =
|
|
((iPosition.volume / mMinProfitPerVolumeFactor) *
|
|
mMinProfitPerTrade) +
|
|
(-1 * iPosition.swap);
|
|
|
|
//
|
|
// Now we Have to Check if Trailed Before or not ...
|
|
int trailLevel = ExtractSLTrailLevel(iPosition.comment);
|
|
if (trailLevel > 0)
|
|
{
|
|
requiredProfit *= (trailLevel + 1);
|
|
}
|
|
|
|
//
|
|
// Check Can Trail or Close on Min Profit ...
|
|
bool conditionsPassed = iPosition.profit >= requiredProfit;
|
|
if (!conditionsPassed)
|
|
{
|
|
continue;
|
|
}
|
|
|
|
//
|
|
// Now we have Sure iPosition is Ready for Trailing Stop or Close on Min Profit ...
|
|
bool isLong = IsLong(iPosition.type);
|
|
|
|
//
|
|
// CASE A try to Trail Stop ...
|
|
double sl = 0;
|
|
double distance = 0;
|
|
if ((isLong && (iPosition.price > iPosition.entry &&
|
|
iPosition.entry > iPosition.sl)) ||
|
|
(!isLong && (iPosition.price < iPosition.entry &&
|
|
iPosition.entry < iPosition.sl)))
|
|
{
|
|
//
|
|
// First Trail ...
|
|
|
|
//
|
|
distance = isLong
|
|
? iPosition.price - iPosition.entry
|
|
: iPosition.entry - iPosition.price;
|
|
|
|
//
|
|
sl = iPosition.entry;
|
|
}
|
|
else if ((isLong && (iPosition.price > iPosition.sl &&
|
|
iPosition.entry <= iPosition.sl)) ||
|
|
(!isLong && (iPosition.price < iPosition.sl &&
|
|
iPosition.entry >= iPosition.sl)))
|
|
{
|
|
//
|
|
// Trailed Before ...
|
|
|
|
//
|
|
distance = isLong
|
|
? iPosition.price - iPosition.entry
|
|
: iPosition.entry - iPosition.price;
|
|
|
|
//
|
|
sl = isLong
|
|
? iPosition.sl + distance
|
|
: iPosition.sl - distance;
|
|
}
|
|
|
|
//
|
|
// Check Main Selected Position is Support of another Position or not ...
|
|
string params[];
|
|
bool isSupport = ExtractSupportParams(
|
|
iPosition.comment,
|
|
params);
|
|
|
|
//
|
|
bool isTrailed = false;
|
|
bool canTrail = !isSupport && sl > 0 && distance > 0;
|
|
if (canTrail)
|
|
{
|
|
//
|
|
string comment = PrepareSLTrailComment(iPosition.comment);
|
|
|
|
//
|
|
isTrailed = mTrader.Modify(
|
|
iPosition.ticket,
|
|
sl,
|
|
iPosition.tp);
|
|
}
|
|
if (isTrailed)
|
|
{
|
|
//
|
|
string message = "EQM Trail Position(" + ToString(iPosition.ticket) + ")'s Stop Loss ...";
|
|
|
|
//
|
|
LogMessage(message);
|
|
|
|
//
|
|
continue;
|
|
}
|
|
|
|
//
|
|
// CASE B if not Trail, Close it in Min Profit ...
|
|
string comment = "EQM Close Min Profit ...";
|
|
|
|
//
|
|
// Check Position has Pack Or Not ...
|
|
// if has Pack must Close Pack ...
|
|
// if not, Close position itself ...
|
|
XPositionPack iPack;
|
|
bool hasPack = mTrader.GetPositionPack(
|
|
iPosition.ticket,
|
|
iPosition.symbol,
|
|
iPosition.period,
|
|
iPack);
|
|
if (hasPack)
|
|
{
|
|
//
|
|
HandleClosePack(iPack);
|
|
}
|
|
else
|
|
{
|
|
//
|
|
if (!isSupport)
|
|
{
|
|
//
|
|
bool isClosed = mTrader.Close(
|
|
iPosition.ticket,
|
|
comment);
|
|
if (isClosed)
|
|
{
|
|
//
|
|
string message = "EQM Close Position(" + ToString(iPosition.ticket) + ") In Min Profit: " + ToString(iPosition.profit);
|
|
|
|
//
|
|
LogMessage(message);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
//
|
|
// Check Positions is Ready fro Hedging ...
|
|
bool IsPositionsReadyForEQMHedge()
|
|
{
|
|
//
|
|
bool result = false;
|
|
|
|
//
|
|
if (mMinProfitPerTrade <= 0 ||
|
|
mMinProfitPerVolumeFactor <= 0)
|
|
{
|
|
return result;
|
|
}
|
|
|
|
//
|
|
double profit = 0;
|
|
double requiredProfit = 0;
|
|
|
|
//
|
|
XPosition positions[];
|
|
int positionsCount = GetPositions(positions);
|
|
if (positionsCount <= 1)
|
|
{
|
|
return result;
|
|
}
|
|
|
|
//
|
|
profit = CalculatePositionsProfit(positions);
|
|
requiredProfit = CalculateRequiredProfitForHedge(positions);
|
|
|
|
//
|
|
result = profit >= requiredProfit;
|
|
|
|
//
|
|
return result;
|
|
}
|
|
|
|
|
|
//
|
|
// Check Account is Ready for EQM Hedge or not ...
|
|
bool IsReadyForEQMHedge()
|
|
{
|
|
//
|
|
bool result = false;
|
|
|
|
//
|
|
// Check required Inputs ...
|
|
if (mMinProfitPerTrade <= 0 ||
|
|
mMinProfitPerVolumeFactor <= 0)
|
|
{
|
|
return result;
|
|
}
|
|
|
|
//
|
|
// Check at least One EQM Support Position must be Open ...
|
|
XPosition eqmPositions[];
|
|
int eqmPositionsCount = GetEQMPositions(eqmPositions);
|
|
if (eqmPositionsCount <= 0)
|
|
{
|
|
return result;
|
|
}
|
|
|
|
//
|
|
// Get All Open Positions for Calculate Account Profit ...
|
|
XPosition positions[];
|
|
int positionsCount = GetPositions(
|
|
positions);
|
|
if (positionsCount <= 0)
|
|
{
|
|
return result;
|
|
}
|
|
|
|
//
|
|
// Define Factor Variables ...
|
|
double profit = 0;
|
|
double requiredProfit = 0;
|
|
|
|
//
|
|
// Calculate Account Profit Factors ...
|
|
for (int i = 0; i < positionsCount; i++)
|
|
{
|
|
//
|
|
XPosition iPosition = positions[i];
|
|
|
|
//
|
|
profit += iPosition.profit;
|
|
requiredProfit +=
|
|
((iPosition.volume / mMinProfitPerVolumeFactor) *
|
|
mMinProfitPerTrade) +
|
|
(-1 * iPosition.swap);
|
|
}
|
|
|
|
//
|
|
// Calculate the result ...
|
|
result = profit >= requiredProfit;
|
|
|
|
//
|
|
return result;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//
|
|
if (isLongSupport)
|
|
{
|
|
//
|
|
if (!onlyGoldenZone && isPriceUnderFib5)
|
|
{
|
|
//
|
|
// Price between Fib 1 and Peak ...
|
|
XSignal signal;
|
|
Clean(signal);
|
|
|
|
//
|
|
// In Direction Positions ...
|
|
|
|
//
|
|
signal.type = type;
|
|
signal.volume = volume;
|
|
signal.period = period;
|
|
signal.mode = X_ORDER_MODE_STOP;
|
|
signal.symbol = conditions.symbol;
|
|
|
|
//
|
|
signal.sl = placeSL ? vale : 0;
|
|
signal.entry = fib5;
|
|
signal.tp = placeTP ? fib4 : 0;
|
|
|
|
//
|
|
Add(
|
|
signal,
|
|
supports //
|
|
);
|
|
|
|
//
|
|
signal.sl = placeSL ? fib5 : 0;
|
|
signal.entry = fib4;
|
|
signal.tp = placeTP ? fib3 : 0;
|
|
|
|
//
|
|
Add(
|
|
signal,
|
|
supports //
|
|
);
|
|
|
|
//
|
|
signal.sl = placeSL ? fib4 : 0;
|
|
signal.entry = fib3;
|
|
signal.tp = placeTP ? fib2 : 0;
|
|
|
|
//
|
|
Add(
|
|
signal,
|
|
supports //
|
|
);
|
|
|
|
//
|
|
signal.sl = placeSL ? fib3 : 0;
|
|
signal.entry = fib2;
|
|
signal.tp = placeTP ? fib1 : 0;
|
|
|
|
//
|
|
Add(
|
|
signal,
|
|
supports //
|
|
);
|
|
|
|
//
|
|
signal.sl = placeSL ? fib2 : 0;
|
|
signal.entry = fib1;
|
|
signal.tp = placeTP ? peak : 0;
|
|
|
|
//
|
|
Add(
|
|
signal,
|
|
supports //
|
|
);
|
|
|
|
//
|
|
// Diection Positions ...
|
|
|
|
//
|
|
signal.mode = X_ORDER_MODE_STOP;
|
|
signal.type = inDPosition.type;
|
|
|
|
//
|
|
// Since Price is Under Fib 5
|
|
// this so Important to Handle also Vale Breakouts ...
|
|
|
|
//
|
|
signal.sl = placeSL ? fib5 : 0;
|
|
signal.entry = vale;
|
|
signal.tp = placeTP ? 0 : 0;
|
|
|
|
//
|
|
Add(
|
|
signal,
|
|
supports //
|
|
);
|
|
}
|
|
else if (!onlyGoldenZone && isPriceUnderFib4)
|
|
{
|
|
//
|
|
// Price between Fib 1 and Peak ...
|
|
XSignal signal;
|
|
Clean(signal);
|
|
|
|
//
|
|
// In Direction Positions ...
|
|
|
|
//
|
|
signal.type = type;
|
|
signal.volume = volume;
|
|
signal.period = period;
|
|
signal.mode = X_ORDER_MODE_STOP;
|
|
signal.symbol = conditions.symbol;
|
|
|
|
//
|
|
signal.sl = placeSL ? fib5 : 0;
|
|
signal.entry = fib4;
|
|
signal.tp = placeTP ? fib3 : 0;
|
|
|
|
//
|
|
Add(
|
|
signal,
|
|
supports //
|
|
);
|
|
|
|
//
|
|
signal.sl = placeSL ? fib4 : 0;
|
|
signal.entry = fib3;
|
|
signal.tp = placeTP ? fib2 : 0;
|
|
|
|
//
|
|
Add(
|
|
signal,
|
|
supports //
|
|
);
|
|
|
|
//
|
|
signal.sl = placeSL ? fib3 : 0;
|
|
signal.entry = fib2;
|
|
signal.tp = placeTP ? fib1 : 0;
|
|
|
|
//
|
|
Add(
|
|
signal,
|
|
supports //
|
|
);
|
|
|
|
//
|
|
signal.sl = placeSL ? fib2 : 0;
|
|
signal.entry = fib1;
|
|
signal.tp = placeTP ? peak : 0;
|
|
|
|
//
|
|
Add(
|
|
signal,
|
|
supports //
|
|
);
|
|
|
|
//
|
|
// Diection Positions ...
|
|
|
|
//
|
|
signal.mode = X_ORDER_MODE_STOP;
|
|
signal.type = inDPosition.type;
|
|
|
|
//
|
|
signal.sl = placeSL ? fib4 : 0;
|
|
signal.entry = fib5;
|
|
signal.tp = placeTP ? vale : 0;
|
|
|
|
//
|
|
Add(
|
|
signal,
|
|
supports //
|
|
);
|
|
}
|
|
else if (isPriceUnderFib3)
|
|
{
|
|
//
|
|
// Price between Fib 1 and Peak ...
|
|
XSignal signal;
|
|
Clean(signal);
|
|
|
|
//
|
|
// In Direction Positions ...
|
|
|
|
//
|
|
signal.type = type;
|
|
signal.volume = volume;
|
|
signal.period = period;
|
|
signal.mode = X_ORDER_MODE_STOP;
|
|
signal.symbol = conditions.symbol;
|
|
|
|
//
|
|
signal.sl = placeSL ? fib4 : 0;
|
|
signal.entry = fib3;
|
|
signal.tp = placeTP ? fib2 : 0;
|
|
|
|
//
|
|
Add(
|
|
signal,
|
|
supports //
|
|
);
|
|
|
|
//
|
|
signal.sl = placeSL ? fib3 : 0;
|
|
signal.entry = fib2;
|
|
signal.tp = placeTP ? fib1 : 0;
|
|
|
|
//
|
|
Add(
|
|
signal,
|
|
supports //
|
|
);
|
|
|
|
//
|
|
signal.sl = placeSL ? fib2 : 0;
|
|
signal.entry = fib1;
|
|
signal.tp = placeTP ? peak : 0;
|
|
|
|
//
|
|
Add(
|
|
signal,
|
|
supports //
|
|
);
|
|
|
|
//
|
|
// Diection Positions ...
|
|
|
|
//
|
|
signal.mode = X_ORDER_MODE_STOP;
|
|
signal.type = inDPosition.type;
|
|
|
|
//
|
|
signal.sl = placeSL ? fib4 : 0;
|
|
signal.entry = fib5;
|
|
signal.tp = placeTP ? vale : 0;
|
|
|
|
//
|
|
Add(
|
|
signal,
|
|
supports //
|
|
);
|
|
|
|
//
|
|
signal.sl = placeSL ? fib3 : 0;
|
|
signal.entry = fib4;
|
|
signal.tp = placeTP ? fib5 : 0;
|
|
|
|
//
|
|
Add(
|
|
signal,
|
|
supports //
|
|
);
|
|
}
|
|
else if (!onlyGoldenZone && isPriceUnderFib2)
|
|
{
|
|
//
|
|
// Price between Fib 1 and Peak ...
|
|
XSignal signal;
|
|
Clean(signal);
|
|
|
|
//
|
|
// In Direction Positions ...
|
|
|
|
//
|
|
signal.type = type;
|
|
signal.volume = volume;
|
|
signal.period = period;
|
|
signal.mode = X_ORDER_MODE_STOP;
|
|
signal.symbol = conditions.symbol;
|
|
|
|
//
|
|
signal.sl = placeSL ? fib3 : 0;
|
|
signal.entry = fib2;
|
|
signal.tp = placeTP ? fib1 : 0;
|
|
|
|
//
|
|
Add(
|
|
signal,
|
|
supports //
|
|
);
|
|
|
|
//
|
|
signal.sl = placeSL ? fib2 : 0;
|
|
signal.entry = fib1;
|
|
signal.tp = placeTP ? peak : 0;
|
|
|
|
//
|
|
Add(
|
|
signal,
|
|
supports //
|
|
);
|
|
|
|
//
|
|
// Diection Positions ...
|
|
|
|
//
|
|
signal.mode = X_ORDER_MODE_STOP;
|
|
signal.type = inDPosition.type;
|
|
|
|
//
|
|
signal.sl = placeSL ? fib4 : 0;
|
|
signal.entry = fib5;
|
|
signal.tp = placeTP ? vale : 0;
|
|
|
|
//
|
|
Add(
|
|
signal,
|
|
supports //
|
|
);
|
|
|
|
//
|
|
signal.sl = placeSL ? fib3 : 0;
|
|
signal.entry = fib4;
|
|
signal.tp = placeTP ? fib5 : 0;
|
|
|
|
//
|
|
Add(
|
|
signal,
|
|
supports //
|
|
);
|
|
|
|
//
|
|
signal.sl = placeSL ? fib2 : 0;
|
|
signal.entry = fib3;
|
|
signal.tp = placeTP ? fib4 : 0;
|
|
|
|
//
|
|
Add(
|
|
signal,
|
|
supports //
|
|
);
|
|
}
|
|
else if (!onlyGoldenZone && isPriceUnderFib1)
|
|
{
|
|
//
|
|
// Price between Fib 1 and Peak ...
|
|
XSignal signal;
|
|
Clean(signal);
|
|
|
|
//
|
|
// In Direction Positions ...
|
|
|
|
//
|
|
signal.type = type;
|
|
signal.volume = volume;
|
|
signal.period = period;
|
|
signal.mode = X_ORDER_MODE_STOP;
|
|
signal.symbol = conditions.symbol;
|
|
|
|
//
|
|
signal.sl = placeSL ? fib2 : 0;
|
|
signal.entry = fib1;
|
|
signal.tp = placeTP ? peak : 0;
|
|
|
|
//
|
|
Add(
|
|
signal,
|
|
supports //
|
|
);
|
|
|
|
//
|
|
// Diection Positions ...
|
|
|
|
//
|
|
signal.mode = X_ORDER_MODE_STOP;
|
|
signal.type = inDPosition.type;
|
|
|
|
//
|
|
signal.sl = placeSL ? fib4 : 0;
|
|
signal.entry = fib5;
|
|
signal.tp = placeTP ? vale : 0;
|
|
|
|
//
|
|
Add(
|
|
signal,
|
|
supports //
|
|
);
|
|
|
|
//
|
|
signal.sl = placeSL ? fib3 : 0;
|
|
signal.entry = fib4;
|
|
signal.tp = placeTP ? fib5 : 0;
|
|
|
|
//
|
|
Add(
|
|
signal,
|
|
supports //
|
|
);
|
|
|
|
//
|
|
signal.sl = placeSL ? fib2 : 0;
|
|
signal.entry = fib3;
|
|
signal.tp = placeTP ? fib4 : 0;
|
|
|
|
//
|
|
Add(
|
|
signal,
|
|
supports //
|
|
);
|
|
|
|
//
|
|
signal.sl = placeSL ? fib1 : 0;
|
|
signal.entry = fib2;
|
|
signal.tp = placeTP ? fib3 : 0;
|
|
|
|
//
|
|
Add(
|
|
signal,
|
|
supports //
|
|
);
|
|
}
|
|
else if (!onlyGoldenZone)
|
|
{
|
|
//
|
|
// Price between Fib 1 and Peak ...
|
|
XSignal signal;
|
|
Clean(signal);
|
|
|
|
//
|
|
// In Direction Positions ...
|
|
|
|
//
|
|
signal.volume = volume;
|
|
signal.period = period;
|
|
signal.symbol = conditions.symbol;
|
|
|
|
//
|
|
// Diection Positions ...
|
|
|
|
//
|
|
signal.mode = X_ORDER_MODE_STOP;
|
|
signal.type = inDPosition.type;
|
|
|
|
//
|
|
signal.sl = placeSL ? fib4 : 0;
|
|
signal.entry = fib5;
|
|
signal.tp = placeTP ? vale : 0;
|
|
|
|
//
|
|
Add(
|
|
signal,
|
|
supports //
|
|
);
|
|
|
|
//
|
|
signal.sl = placeSL ? fib3 : 0;
|
|
signal.entry = fib4;
|
|
signal.tp = placeTP ? fib5 : 0;
|
|
|
|
//
|
|
Add(
|
|
signal,
|
|
supports //
|
|
);
|
|
|
|
//
|
|
signal.sl = placeSL ? fib2 : 0;
|
|
signal.entry = fib3;
|
|
signal.tp = placeTP ? fib4 : 0;
|
|
|
|
//
|
|
Add(
|
|
signal,
|
|
supports //
|
|
);
|
|
|
|
//
|
|
signal.sl = placeSL ? fib1 : 0;
|
|
signal.entry = fib2;
|
|
signal.tp = placeTP ? fib3 : 0;
|
|
|
|
//
|
|
Add(
|
|
signal,
|
|
supports //
|
|
);
|
|
|
|
//
|
|
signal.sl = placeSL ? peak : 0;
|
|
signal.entry = fib1;
|
|
signal.tp = placeTP ? fib2 : 0;
|
|
|
|
//
|
|
Add(
|
|
signal,
|
|
supports //
|
|
);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
//
|
|
if (!onlyGoldenZone && isPriceOverFib1)
|
|
{
|
|
//
|
|
// Price between Fib 1 and Peak ...
|
|
XSignal signal;
|
|
Clean(signal);
|
|
|
|
//
|
|
signal.type = type;
|
|
signal.volume = volume;
|
|
signal.period = period;
|
|
signal.mode = X_ORDER_MODE_STOP;
|
|
signal.symbol = conditions.symbol;
|
|
|
|
//
|
|
signal.sl = placeSL ? peak : 0;
|
|
signal.entry = fib1;
|
|
signal.tp = placeTP ? fib2 : 0;
|
|
|
|
//
|
|
Add(
|
|
signal,
|
|
supports //
|
|
);
|
|
|
|
//
|
|
signal.sl = placeSL ? fib1 : 0;
|
|
signal.entry = fib2;
|
|
signal.tp = placeTP ? fib3 : 0;
|
|
|
|
//
|
|
Add(
|
|
signal,
|
|
supports //
|
|
);
|
|
|
|
//
|
|
signal.sl = placeSL ? fib2 : 0;
|
|
signal.entry = fib3;
|
|
signal.tp = placeTP ? fib4 : 0;
|
|
|
|
//
|
|
Add(
|
|
signal,
|
|
supports //
|
|
);
|
|
|
|
//
|
|
signal.sl = placeSL ? fib3 : 0;
|
|
signal.entry = fib4;
|
|
signal.tp = placeTP ? fib5 : 0;
|
|
|
|
//
|
|
Add(
|
|
signal,
|
|
supports //
|
|
);
|
|
|
|
//
|
|
signal.sl = placeSL ? fib4 : 0;
|
|
signal.entry = fib5;
|
|
signal.tp = placeTP ? vale : 0;
|
|
|
|
//
|
|
Add(
|
|
signal,
|
|
supports //
|
|
);
|
|
|
|
//
|
|
// Diection Positions ...
|
|
|
|
//
|
|
signal.mode = X_ORDER_MODE_STOP;
|
|
signal.type = inDPosition.type;
|
|
|
|
//
|
|
// Since Price is Over Fib 1
|
|
// this so Important to Handle also Peak Breakouts ...
|
|
|
|
//
|
|
signal.sl = placeSL ? fib1 : 0;
|
|
signal.entry = peak;
|
|
signal.tp = placeTP ? 0 : 0;
|
|
|
|
//
|
|
Add(
|
|
signal,
|
|
supports //
|
|
);
|
|
}
|
|
else if (!onlyGoldenZone && isPriceOverFib2)
|
|
{
|
|
//
|
|
// Price between Fib 1 and Peak ...
|
|
XSignal signal;
|
|
Clean(signal);
|
|
|
|
//
|
|
// In Direction Positions ...
|
|
|
|
//
|
|
signal.type = type;
|
|
signal.volume = volume;
|
|
signal.period = period;
|
|
signal.mode = X_ORDER_MODE_STOP;
|
|
signal.symbol = conditions.symbol;
|
|
|
|
//
|
|
signal.sl = placeSL ? fib1 : 0;
|
|
signal.entry = fib2;
|
|
signal.tp = placeTP ? fib3 : 0;
|
|
|
|
//
|
|
Add(
|
|
signal,
|
|
supports //
|
|
);
|
|
|
|
//
|
|
signal.sl = placeSL ? fib2 : 0;
|
|
signal.entry = fib3;
|
|
signal.tp = placeTP ? fib4 : 0;
|
|
|
|
//
|
|
Add(
|
|
signal,
|
|
supports //
|
|
);
|
|
|
|
//
|
|
signal.sl = placeSL ? fib3 : 0;
|
|
signal.entry = fib4;
|
|
signal.tp = placeTP ? fib5 : 0;
|
|
|
|
//
|
|
Add(
|
|
signal,
|
|
supports //
|
|
);
|
|
|
|
//
|
|
signal.sl = placeSL ? fib4 : 0;
|
|
signal.entry = fib5;
|
|
signal.tp = placeTP ? vale : 0;
|
|
|
|
//
|
|
Add(
|
|
signal,
|
|
supports //
|
|
);
|
|
|
|
//
|
|
// Diection Positions ...
|
|
|
|
//
|
|
signal.mode = X_ORDER_MODE_STOP;
|
|
signal.type = inDPosition.type;
|
|
|
|
//
|
|
signal.sl = placeSL ? fib2 : 0;
|
|
signal.entry = fib1;
|
|
signal.tp = placeTP ? peak : 0;
|
|
|
|
//
|
|
Add(
|
|
signal,
|
|
supports //
|
|
);
|
|
}
|
|
else if (isPriceOverFib3)
|
|
{
|
|
//
|
|
// Price between Fib 1 and Peak ...
|
|
XSignal signal;
|
|
Clean(signal);
|
|
|
|
//
|
|
signal.type = type;
|
|
signal.volume = volume;
|
|
signal.period = period;
|
|
signal.mode = X_ORDER_MODE_STOP;
|
|
signal.symbol = conditions.symbol;
|
|
|
|
//
|
|
signal.sl = placeSL ? fib2 : 0;
|
|
signal.entry = fib3;
|
|
signal.tp = placeTP ? fib4 : 0;
|
|
|
|
//
|
|
Add(
|
|
signal,
|
|
supports //
|
|
);
|
|
|
|
//
|
|
signal.sl = placeSL ? fib3 : 0;
|
|
signal.entry = fib4;
|
|
signal.tp = placeTP ? fib5 : 0;
|
|
|
|
//
|
|
Add(
|
|
signal,
|
|
supports //
|
|
);
|
|
|
|
//
|
|
signal.sl = placeSL ? fib4 : 0;
|
|
signal.entry = fib5;
|
|
signal.tp = placeTP ? vale : 0;
|
|
|
|
//
|
|
Add(
|
|
signal,
|
|
supports //
|
|
);
|
|
|
|
//
|
|
// Diection Positions ...
|
|
|
|
//
|
|
signal.mode = X_ORDER_MODE_STOP;
|
|
signal.type = inDPosition.type;
|
|
|
|
//
|
|
signal.sl = placeSL ? fib2 : 0;
|
|
signal.entry = fib1;
|
|
signal.tp = placeTP ? peak : 0;
|
|
|
|
//
|
|
Add(
|
|
signal,
|
|
supports //
|
|
);
|
|
|
|
//
|
|
signal.sl = placeSL ? fib3 : 0;
|
|
signal.entry = fib2;
|
|
signal.tp = placeTP ? fib1 : 0;
|
|
|
|
//
|
|
Add(
|
|
signal,
|
|
supports //
|
|
);
|
|
}
|
|
else if (!onlyGoldenZone && isPriceOverFib4)
|
|
{
|
|
//
|
|
// Price between Fib 1 and Peak ...
|
|
XSignal signal;
|
|
Clean(signal);
|
|
|
|
//
|
|
signal.type = type;
|
|
signal.volume = volume;
|
|
signal.period = period;
|
|
signal.mode = X_ORDER_MODE_STOP;
|
|
signal.symbol = conditions.symbol;
|
|
|
|
//
|
|
signal.sl = placeSL ? fib3 : 0;
|
|
signal.entry = fib4;
|
|
signal.tp = placeTP ? fib5 : 0;
|
|
|
|
//
|
|
Add(
|
|
signal,
|
|
supports //
|
|
);
|
|
|
|
//
|
|
signal.sl = placeSL ? fib4 : 0;
|
|
signal.entry = fib5;
|
|
signal.tp = placeTP ? vale : 0;
|
|
|
|
//
|
|
Add(
|
|
signal,
|
|
supports //
|
|
);
|
|
|
|
//
|
|
// Diection Positions ...
|
|
|
|
//
|
|
signal.mode = X_ORDER_MODE_STOP;
|
|
signal.type = inDPosition.type;
|
|
|
|
//
|
|
signal.sl = placeSL ? fib2 : 0;
|
|
signal.entry = fib1;
|
|
signal.tp = placeTP ? peak : 0;
|
|
|
|
//
|
|
Add(
|
|
signal,
|
|
supports //
|
|
);
|
|
|
|
//
|
|
signal.sl = placeSL ? fib3 : 0;
|
|
signal.entry = fib2;
|
|
signal.tp = placeTP ? fib1 : 0;
|
|
|
|
//
|
|
Add(
|
|
signal,
|
|
supports //
|
|
);
|
|
|
|
//
|
|
signal.sl = placeSL ? fib4 : 0;
|
|
signal.entry = fib3;
|
|
signal.tp = placeTP ? fib2 : 0;
|
|
|
|
//
|
|
Add(
|
|
signal,
|
|
supports //
|
|
);
|
|
}
|
|
else if (!onlyGoldenZone && isPriceOverFib5)
|
|
{
|
|
//
|
|
// Price between Fib 1 and Peak ...
|
|
XSignal signal;
|
|
Clean(signal);
|
|
|
|
//
|
|
signal.type = type;
|
|
signal.volume = volume;
|
|
signal.period = period;
|
|
signal.mode = X_ORDER_MODE_STOP;
|
|
signal.symbol = conditions.symbol;
|
|
|
|
//
|
|
signal.sl = placeSL ? fib4 : 0;
|
|
signal.entry = fib5;
|
|
signal.tp = placeTP ? vale : 0;
|
|
|
|
//
|
|
Add(
|
|
signal,
|
|
supports //
|
|
);
|
|
|
|
//
|
|
// Diection Positions ...
|
|
|
|
//
|
|
signal.mode = X_ORDER_MODE_STOP;
|
|
signal.type = inDPosition.type;
|
|
|
|
//
|
|
signal.sl = placeSL ? fib2 : 0;
|
|
signal.entry = fib1;
|
|
signal.tp = placeTP ? peak : 0;
|
|
|
|
//
|
|
Add(
|
|
signal,
|
|
supports //
|
|
);
|
|
|
|
//
|
|
signal.sl = placeSL ? fib3 : 0;
|
|
signal.entry = fib2;
|
|
signal.tp = placeTP ? fib1 : 0;
|
|
|
|
//
|
|
Add(
|
|
signal,
|
|
supports //
|
|
);
|
|
|
|
//
|
|
signal.sl = placeSL ? fib4 : 0;
|
|
signal.entry = fib3;
|
|
signal.tp = placeTP ? fib2 : 0;
|
|
|
|
//
|
|
Add(
|
|
signal,
|
|
supports //
|
|
);
|
|
|
|
//
|
|
signal.sl = placeSL ? fib5 : 0;
|
|
signal.entry = fib4;
|
|
signal.tp = placeTP ? fib3 : 0;
|
|
|
|
//
|
|
Add(
|
|
signal,
|
|
supports //
|
|
);
|
|
}
|
|
else if (!onlyGoldenZone)
|
|
{
|
|
//
|
|
// Diection Positions ...
|
|
XSignal signal;
|
|
Clean(signal);
|
|
|
|
//
|
|
signal.volume = volume;
|
|
signal.period = period;
|
|
signal.symbol = conditions.symbol;
|
|
|
|
//
|
|
signal.mode = X_ORDER_MODE_STOP;
|
|
signal.type = inDPosition.type;
|
|
|
|
//
|
|
signal.sl = placeSL ? fib2 : 0;
|
|
signal.entry = fib1;
|
|
signal.tp = placeTP ? peak : 0;
|
|
|
|
//
|
|
Add(
|
|
signal,
|
|
supports //
|
|
);
|
|
|
|
//
|
|
signal.sl = placeSL ? fib3 : 0;
|
|
signal.entry = fib2;
|
|
signal.tp = placeTP ? fib1 : 0;
|
|
|
|
//
|
|
Add(
|
|
signal,
|
|
supports //
|
|
);
|
|
|
|
//
|
|
signal.sl = placeSL ? fib4 : 0;
|
|
signal.entry = fib3;
|
|
signal.tp = placeTP ? fib2 : 0;
|
|
|
|
//
|
|
Add(
|
|
signal,
|
|
supports //
|
|
);
|
|
|
|
//
|
|
signal.sl = placeSL ? fib5 : 0;
|
|
signal.entry = fib4;
|
|
signal.tp = placeTP ? fib3 : 0;
|
|
|
|
//
|
|
Add(
|
|
signal,
|
|
supports //
|
|
);
|
|
|
|
//
|
|
signal.sl = placeSL ? vale : 0;
|
|
signal.entry = fib5;
|
|
signal.tp = placeTP ? fib4 : 0;
|
|
|
|
//
|
|
Add(
|
|
signal,
|
|
supports //
|
|
);
|
|
}
|
|
}
|