//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int FindOrderType()
{
int oticket,ticketNumber=0,type=0;
for(int i=OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{
oticket=OrderTicket();
if(oticket>ticketNumber)
{
ticketNumber=oticket;
type=OrderType();
}
}
}
}
return(type);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
double FindLastBuyPrice()
{
int oticket,ticketNumber=0;
double oprice=0;
for(int i=OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() && OrderType()==OP_BUY && OrderMagicNumber()==Magic)
{
oticket=OrderTicket();
if(oticket>ticketNumber)
{
ticketNumber=oticket;
oprice=OrderOpenPrice();
}
}
}
}
return(oprice);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
double FindLastSellPrice()
{
int oticket,ticketNumber=0;
double oprice=0;
for(int i=OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() && OrderType()==OP_SELL && OrderMagicNumber()==Magic)
{
oticket=OrderTicket();
if(oticket>ticketNumber)
{
ticketNumber=oticket;
oprice=OrderOpenPrice();
}
}
}
}
return(oprice);
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
if(BULevel>0)
BU();
if(TrailingStop>0)
Trailing();
if((AllProfit()>Profit && Profit>0) || (AllProfit()<-Loss && Loss>0))
CloseAll();
static datetime last_open_time = 0;
if(Time[0] < last_open_time + 2*PeriodSeconds()) return;
double up = iCustom(NULL,0,IndName2,"",HalfLength,MAPeriod,Price,ATRMultiplier,ATRPeriod,1,Shift);
double dn = iCustom(NULL,0,IndName2,"",HalfLength,MAPeriod,Price,ATRMultiplier,ATRPeriod,2,Shift);
double blu = iCustom(NULL,0,IndName,TrendPeriod,ForcePeriod,LineValue,VerticalShift,2,Shift);
double red = iCustom(NULL,0,IndName,TrendPeriod,ForcePeriod,LineValue,VerticalShift,1,Shift);
bool buy = (blu>LineValue && Bid<dn) || (red>LineValue && Bid>dn && Bid<up);
bool sell = (red>LineValue && Bid>up) || (blu>LineValue && Bid>dn && Bid<up);
if(CountTrades()<1)
{
if(last_open_time!= Time[0] && buy) {PutOrder(0,Ask); last_open_time = Time[0];}
if(last_open_time!= Time[0] && sell) {PutOrder(1,Bid); last_open_time = Time[0];}
}
if(CloseSig>0)
{
if(sell) CloseAll(0);
if(buy) CloseAll(1);
}
if(CountTrades()<Count)
{
if(FindOrderType()==0 && (FindLastBuyPrice()-Ask)/Point>=20 && buy)
{
PutOrder(0,Ask);
}
if(FindOrderType()==1 && (Bid-FindLastSellPrice())/Point>=20 && sell)
{
PutOrder(1,Bid);
}
}
Comment("\n Lot: ",Lot(),
"\n Profit: ",AllProfit(),
"\n Vert Red: ",red,
"\n Vert Blue: ",blu);
}
//+------------------------------------------------------------------+
bool buy = (blu>LineValue && Bid<dn) || (red>LineValue && Bid>dn && Bid<up);
bool sell = (red>LineValue && Bid>up) || (blu>LineValue && Bid>dn && Bid<up);
Slava78