I could not see why HGB closed some of my Range/RAD trades so I had a look at the code. Usual thingy: copy/paste/forget to edit. Hey ho.
Easiest if you want to make the changes yourselves is to copy this over the top of the existing function:
Code: Select all
bool LookForTradeClosure(int ticket)
{
//Close the trade if the close conditions are met.
//Called from within CountOpenTrades(). Returns true if a close is needed and succeeds, so that COT can increment cc,
//else returns false
if(!OrderSelect(ticket, SELECT_BY_TICKET) ) return(true);
if(OrderSelect(ticket, SELECT_BY_TICKET) && OrderCloseTime() > 0) return(true);
bool CloseThisTrade=false;
string LineName=TpPrefix+DoubleToStr(ticket,0);
//Work with the lines on the chart that represent the hidden tp/sl
double take=ObjectGet(LineName,OBJPROP_PRICE1);
if(CloseEnough(take,0)) take=OrderTakeProfit();
LineName=SlPrefix+DoubleToStr(ticket,0);
double stop=ObjectGet(LineName,OBJPROP_PRICE1);
if(CloseEnough(stop,0)) stop=OrderStopLoss();
///////////////////////////////////////////////////////////////////////////////////////////////////////////
if(OrderType()==OP_BUY)
{
//TP
if(Bid>=take && !CloseEnough(take,0) && !CloseEnough(take,OrderTakeProfit())) CloseThisTrade=true;
//SL
if(Bid<=stop && !CloseEnough(stop,0) && !CloseEnough(stop,OrderStopLoss())) CloseThisTrade=true;
//Trend opposite signal
if (OrderComment() == TrendTradeComment)
{
//Opposite Trend arrow
if (TrendCloseOnOppositeTrendArrow)
if (TrendArrowStatus == Trenddownarrow)
CloseThisTrade = true;
//TMA high
if (TrendCloseOnOppositeTMA)
if (TmaStatus == Tmahighsignal)
CloseThisTrade = true;
}//if (OrderComment() == TrendTradeComment)
//Range opposite signal
if (OrderComment() == RangeTradeComment)
{
//Opposite Range arrow
if (RangeCloseOnOppositeRangeArrow)
if (RangeArrowStatus == Rangedownarrow)
CloseThisTrade = true;
//TMA high
if (RangeCloseOnOppositeTMA)
if (TmaStatus == Tmahighsignal)
CloseThisTrade = true;
}//if (OrderComment() == RangeTradeComment)
//Rad opposite signal
if (OrderComment() == RadTradeComment)
{
//Opposite Rad arrow
if (RadCloseOnOppositeRadArrow)
if (RadArrowStatus == Raddownarrow)
CloseThisTrade = true;
//TMA high
if (RadCloseOnOppositeTMA)
if (TmaStatus == Tmahighsignal)
CloseThisTrade = true;
}//if (OrderComment() == RadTradeComment)
}//if (OrderType() == OP_BUY)
///////////////////////////////////////////////////////////////////////////////////////////////////////////
if(OrderType()==OP_SELL)
{
//TP
if(Bid<=take && !CloseEnough(take,0) && !CloseEnough(take,OrderTakeProfit())) CloseThisTrade=true;
//SL
if(Bid>=stop && !CloseEnough(stop,0) && !CloseEnough(stop,OrderStopLoss())) CloseThisTrade=true;
//Trend opposite signal
if (OrderComment() == TrendTradeComment)
{
//Opposite trend arrow
if (TrendCloseOnOppositeTrendArrow)
if (TrendArrowStatus == Trenduparrow)
CloseThisTrade = true;
//TMA low
if (TrendCloseOnOppositeTMA)
if (TmaStatus == Tmalowsignal)
CloseThisTrade = true;
}//if (OrderComment() == TrendTradeComment)
//Range opposite signal
if (OrderComment() == RangeTradeComment)
{
//Opposite trend arrow
if (RangeCloseOnOppositeRangeArrow)
if (RangeArrowStatus == Rangeuparrow)
CloseThisTrade = true;
//TMA low
if (RangeCloseOnOppositeTMA)
if (TmaStatus == Tmalowsignal)
CloseThisTrade = true;
}//if (OrderComment() == RngeTradeComment)
//Rad opposite signal
if (OrderComment() == RadTradeComment)
{
//Opposite trend arrow
if (RadCloseOnOppositeRadArrow)
if (RadArrowStatus == Raduparrow)
CloseThisTrade = true;
//TMA low
if (RadCloseOnOppositeTMA)
if (TmaStatus == Tmalowsignal)
CloseThisTrade = true;
}//if (OrderComment() == RngeTradeComment)
}//if (OrderType() == OP_SELL)
///////////////////////////////////////////////////////////////////////////////////////////////////////////
if (CloseThisTrade)
{
bool result = CloseOrder(ticket);
//Actions when trade close succeeds
if (result)
{
DeletePendingPriceLines();
TicketNo = -1;//TicketNo is the most recently trade opened, so this might need editing in a multi-trade EA
OpenTrades--;//Rather than OpenTrades = 0 to cater for multi-trade EA's
return(true);//Makes CountOpenTrades increment cc to avoid missing out ccounting a trade
}//if (result)
//Actions when trade close fails
if (!result)
{
return(false);//Do not increment cc
}//if (!result)
}//if (CloseThisTrade)
//Got this far, so no trade closure
return(false);//Do not increment cc
}//End bool LookForTradeClosure()
1e is an essential download if you are unable to make changes for yourselves. Previous versions are bug-laden drivel.
