extern double Lots = 0.1; extern string Сomment = "Pattern_1"; extern int TakeProfit = 0; extern int StopLoss = 0; extern int Step = 0; extern int BULevel = 200; extern int NotBULevel = 20; // Уровень безубытка в пунктах extern int Slippage = 2; // проскальзывание extern int Magic = 111; int ticket, otype; double TP, price; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { if (Digits ==3 || Digits ==3) // для пятизначного брокера { TakeProfit *= 10; StopLoss *= 10; Slippage *= 10; Step *= 10; } return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { if (CountTrades()==0 && Open[1]>Close[1] && Open[2]High[2] && Low[1]Close[2] && High[1]>High[2] && Low[1]0) { otype = FindLastOrderType(); if (otype == OP_BUY) { // ценапоследнего ордера на покупку price = FindLastBayPrice(); if ((Bid - price) / Point >= Step) { ticket=OrderSend(Symbol(),OP_SELLSTOP,Lots,Bid,Slippage,0,0,"Pattern_1",111,0,Red); } } else if (otype == OP_SELL) { // цена последнего ордера на продажу price = FindLastSellPrice(); if ((price - Ask) / Point >= Step) { ticket=OrderSend(Symbol(),OP_BUYSTOP,Lots,Ask,Slippage,0,0,"Pattern_1",111,0,Blue); } } } return(0); } //+------------------------------------------------------------------+ int CountTrades() // количество открытых ордеров { int count=0; for(int i=OrdersTotal()-1; i>=0; i--) { if (OrderSelect(i, SELECT_BY_POS,MODE_TRADES)) { if (OrderSymbol()==Symbol() && OrderMagicNumber()==111) { if (OrderType()==OP_BUY || OrderType()==OP_SELL) count++; } } } return(count); } //+------------------------------------------------------------------+ int FindLastOrderType() // вычисляем тип последнего ордера { int oticket, ticketnumber=0, OType=0; for(int i=OrdersTotal()-1; i>=0; i--) { if (OrderSelect(i, SELECT_BY_POS,MODE_TRADES)) { if (OrderSymbol()==Symbol() && OrderMagicNumber()==111) { oticket=OrderTicket(); if (oticket > ticketnumber) { ticketnumber = oticket; OType = OrderType(); // самый последний тикет } } } } return(OType); } //+------------------------------------------------------------------+ double FindLastBayPrice() // находим цену последнего ордера на покупку { 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() && OrderMagicNumber()==111 && OrderType() == OP_BUY) { oticket=OrderTicket(); if (oticket > ticketnumber) { ticketnumber = oticket; oprice = OrderType(); // самый последний тикет } } } } 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() && OrderMagicNumber()==111 && OrderType() == OP_SELL) { oticket=OrderTicket(); if (oticket > ticketnumber) { ticketnumber = oticket; oprice = OrderType(); // самый последний тикет } } } } return(oprice); } //+------------------------------------------------------------------+ void BU() { for(int a=0; aOrderStopLoss())// последнеее условие БУ + 20 пипсов { OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+NotBULevel*Point,OrderTakeProfit(),0,Green); } } if(OrderType() == OP_SELL) { if(OrderOpenPrice()>=(Ask+BULevel*Point+NotBULevel*Point)&& (OrderOpenPrice()