trendinator saved me some work this week. He found reasons why the wavy lines did not always result in trade closure and fixed the logic errors.
V 2u in post 1, or copy this over the top of bool LookForTradeClosure(int ticket) (line 3853):
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;
bool result = 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 || OrderType() == OP_BUYSTOP)
{
//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 || (OrderComment() ==TrendMultiTradeComment))
{
//Opposite arrow of any kind
if (TrendCloseOnOppositeArrow)
if (TrendArrowStatus == Trenddownarrow || RangeArrowStatus == Rangedownarrow || RadArrowStatus == Raddownarrow)
CloseThisTrade = true;
//TMA Range signal
if (TrendCloseOnOppositeTMA)
// if (TmaStatus == Tmarangesignal)
if (WaveStatus == Wavesell)
CloseThisTrade = true;
}//if (OrderComment() == TrendTradeComment)
//Range opposite signal
if (OrderComment() == RangeTradeComment)
{
//Opposite arrow of any kind
if (RangeCloseOnOppositeArrow)
if (TrendArrowStatus == Trenddownarrow || RangeArrowStatus == Rangedownarrow || RadArrowStatus == Raddownarrow)
CloseThisTrade = true;
//TMA Range signal
if (RangeCloseOnOppositeTMA)
if (WaveIsSellTrend)
CloseThisTrade = true;
}//if (OrderComment() == RangeTradeComment)
//Rad opposite signal
if (OrderComment() == RadTradeComment || (OrderComment() == RadMultiTradeComment))
{
//Opposite arrow of any kind
if (RadCloseOnOppositeArrow)
if (TrendArrowStatus == Trenddownarrow || RangeArrowStatus == Rangedownarrow || RadArrowStatus == Raddownarrow)
CloseThisTrade = true;
//TMA Range signal
if (RadCloseOnOppositeTMA)
//if (TmaStatus == Tmarangesignal)
if (WaveStatus == Wavesell)
CloseThisTrade = true;
}//if (OrderComment() == RadTradeComment)
//Wave opposite signal
if (OrderComment() == WaveTradeComment || (OrderComment() == WaveMultiTradeComment))
{
//Opposite arrow of any kind
if (WaveCloseOnOppositeArrow)
if (TrendArrowStatus == Trenddownarrow || RadArrowStatus == Raddownarrow)
CloseThisTrade = true;
//TMA Range end or wave flip signal
if (WaveCloseOnOppositeTMA)
if (WaveStatus == Wavesell)
CloseThisTrade = true;
}//if (OrderComment() == WaveTradeComment)
//TrendWave opposite signal
if (OrderComment() == TrendWaveTradeComment || (OrderComment() ==TrendWaveMultiTradeComment))
{
//Opposite arrow of any kind
if (TrendWaveCloseOnOppositeArrow)
if (TrendArrowStatus == Trenddownarrow || RadArrowStatus == Raddownarrow)
CloseThisTrade = true;
//TMA Range end or wave flip signal
if (TrendWaveCloseOnOppositeTMA)
if (WaveStatus == Wavesell)
CloseThisTrade = true;
}//if (OrderComment() == TrendWaveTradeComment)
}//if (OrderType() == OP_BUY)
///////////////////////////////////////////////////////////////////////////////////////////////////////////
if(OrderType()==OP_SELL || OrderType() == OP_SELLSTOP)
{
//TP
if(Bid<=take && !CloseEnough(take,0) && !CloseEnough(take,OrderTakeProfit())) CloseThisTrade=true;
//SL
if(Bid>=stop && !CloseEnough(stop,0) && !CloseEnough(stop,OrderStopLoss())) CloseThisTrade=true;
//Opposite arrow of any kind
if (OrderComment() == TrendTradeComment || (OrderComment() == TrendMultiTradeComment))
{
//Opposite trend arrow
if (TrendCloseOnOppositeArrow)
if (TrendArrowStatus == Trenduparrow || RangeArrowStatus == Rangeuparrow || RadArrowStatus == Raduparrow)
CloseThisTrade = true;
//TMA Range signal
if (TrendCloseOnOppositeTMA)
//if (TmaStatus == Tmarangesignal)
if (WaveStatus == Wavebuy)
CloseThisTrade = true;
}//if (OrderComment() == TrendTradeComment)
//Range opposite signal
if (OrderComment() == RangeTradeComment)
{
//Opposite arrow of any kind
if (RangeCloseOnOppositeArrow)
if (TrendArrowStatus == Trenduparrow || RangeArrowStatus == Rangeuparrow || RadArrowStatus == Raduparrow)
CloseThisTrade = true;
//TMA low
if (RangeCloseOnOppositeTMA)
// if (WaveIsBuyTrend)
if (WaveStatus == Wavebuy)
CloseThisTrade = true;
}//if (OrderComment() == RangeTradeComment)
//Rad opposite signal
if (OrderComment() == RadTradeComment || (OrderComment() ==RadMultiTradeComment))
{
//Opposite arrow of any kind
if (RadCloseOnOppositeArrow)
if (TrendArrowStatus == Trenduparrow || RangeArrowStatus == Rangeuparrow || RadArrowStatus == Raduparrow)
CloseThisTrade = true;
//TMA range signal
if (RadCloseOnOppositeTMA)
// if (TmaStatus == Tmarangesignal)
if (WaveStatus == Wavebuy)
CloseThisTrade = true;
}//if (OrderComment() == RangeTradeComment)
//Wave opposite signal
if (OrderComment() == WaveTradeComment || (OrderComment() == WaveMultiTradeComment))
{
//Opposite arrow of any kind
if (WaveCloseOnOppositeArrow)
if (TrendArrowStatus == Trenduparrow || RadArrowStatus == Raduparrow)
CloseThisTrade = true;
//TMA Range end or wave flip signal
if (WaveCloseOnOppositeTMA)
if (WaveStatus == Wavebuy)
CloseThisTrade = true;
}//if (OrderComment() == WaveTradeComment)
//TrendWave opposite signal
if (OrderComment() == TrendWaveTradeComment || (OrderComment() == TrendWaveMultiTradeComment))
{
//Opposite arrow of any kind
if (TrendWaveCloseOnOppositeArrow)
if (TrendArrowStatus == Trenduparrow || RadArrowStatus == Raduparrow)
CloseThisTrade = true;
//TMA Range end or wave flip signal
if (TrendWaveCloseOnOppositeTMA)
//if (TmaStatus == Tmarangesignal)
if (WaveStatus == Wavebuy)
CloseThisTrade = true;
}//if (OrderComment() == TrendWaveTradeComment)
}//if (OrderType() == OP_SELL)
///////////////////////////////////////////////////////////////////////////////////////////////////////////
if (CloseThisTrade)
{
if (OrderType() < 2)//Market trades
result = CloseOrder(ticket);
else
result = OrderDelete(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()
 |