Files
xMQL5/MQLTestWorkspace/BKPS/Templates/open.support.positions.old.ea.mq5

182 lines
3.1 KiB
Plaintext

//
// Find Reversal Position Type ...
ENUM_POSITION_TYPE GetSupportPositionType(ENUM_POSITION_TYPE type)
{
//
ENUM_POSITION_TYPE result = POSITION_TYPE_BUY;
//
if (type == POSITION_TYPE_BUY)
{
result = POSITION_TYPE_SELL;
}
else
{
result = POSITION_TYPE_BUY;
}
//
return result;
}
//
// Check a Position Has Supportable or not ...
bool IsSupportablePosition(XPosition &position)
{
//
bool result = false;
//
if (StringLen(position.comment) <= 0)
{
return result;
}
//
int supStrPos = StringFind(
position.comment,
mSupportPrefix + "(");
//
result = supStrPos < 0;
//
return result;
}
//
// Check a Position has Support Position or not ...
bool HasSupportPosition(XPosition &position)
{
//
bool result = false;
//
int positionsCount = xEATrade.PositionsCount();
//
if (positionsCount <= 0 ||
position.ticket == 0 ||
StringLen(position.comment) <= 0)
{
return result;
}
//
string supCommentStr = mSupportPrefix + "(" + (string)position.ticket + ")";
//
XPosition positions[];
xEATrade.GetPositions(positions);
//
for (int i = 0; i < positionsCount; i++)
{
//
XPosition iPosition = positions[i];
//
int supCommentPos = StringFind(
iPosition.comment,
supCommentStr);
//
result = supCommentPos >= 0;
if (result)
{
break;
}
}
//
return result;
}
//
// Open a Support Position based on Exists ...
void OpenSupportPosition(XPosition &position)
{
//
bool isSupportable = IsSupportablePosition(position);
if (!isSupportable)
{
return;
}
//
bool hasSupport = HasSupportPosition(position);
if (hasSupport)
{
return;
}
//
ENUM_POSITION_TYPE type = GetSupportPositionType(position.type);
double entry = GetEntry(
position.symbol,
type);
//
bool isLong = IsLong(type);
//
double tpPrice = PipsToPrice(
position.symbol,
10);
double slPrice = PipsToPrice(
position.symbol,
5);
//
double tp = 0;
// isLong
// ? entry + tpPrice
// : entry - tpPrice;
//
double sl = 0;
// isLong
// ? entry - slPrice
// : entry + slPrice;
//
string comment = mSupportPrefix + "(" + (string)position.ticket + ")";
//
bool isPositionOpen = false;
//
// Open Signal Position ...
if (isLong)
{
//
isPositionOpen = xEATrade.Buy(
position.symbol,
position.period,
position.volume,
entry,
sl,
tp,
comment);
}
else
{
//
isPositionOpen = xEATrade.Sell(
position.symbol,
position.period,
position.volume,
entry,
sl,
tp,
comment);
}
//
if (isPositionOpen)
{
//
LogMessage("Open Support Psition for: " + position.comment);
}
}