<code>//+------------------------------------------------------------------+ //| 3.mq4 | //| Copyright 2017, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2017, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property strict input double Lots=0.01; input int Tp =1000; input int Magik=1001012; extern int MA_Fast_Period = 50; extern int MA_Fast_Method = 1; extern int MA_Fast_Price = 5; extern int MA_Slow_Period = 150; extern int MA_Slow_Method = 1; extern int MA_Slow_Price = 5; extern int Sl = 500; extern int Slippage = 3; extern int Step = 600; double price; double pr1=0; double pr2=0; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { if ( Digits == 5) { Slippage *= 10; } return (INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { double MA_f_1 = iMA( Symbol(),1440, MA_Fast_Period, 0, MA_Fast_Method, MA_Fast_Price, 1); double MA_s_2 = iMA( Symbol(),1440, MA_Slow_Period, 0, MA_Slow_Method, MA_Slow_Price, 1); static double Upf,Lowf; double Tupf=0,Tlowf=0; int i,k; for(i=1; i<5000; i++) { Tupf=iFractals(Symbol(),0,MODE_UPPER,i); if(Tupf>0) break; } for(k=1; k<5000; k++) { Tlowf=iFractals(Symbol(),0,MODE_LOWER,k); if(Tlowf>0) break; } if(countBuy()== 0 && Ask<Tlowf && Tupf!=Upf && MA_f_1 > MA_s_2) { if (OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,Ask-Sl*10*Point,Bid+Tp*10*Point,"",Magik,0,clrDarkBlue) < 1) Print ("Не удалось открыть покупку"); } if(countSell()== 0 && Bid>Tupf && Tlowf!=Lowf && MA_f_1 < MA_s_2) { if (OrderSend(Symbol(),OP_SELL,Lots,Ask,Slippage,Bid+Sl*10*Point,Ask-Tp*10*Point,"",Magik,0,clrRed)< 1) Print("Can not open sell"); } if(countBuy()>=1) { price = FindLastBuyPrice(); if ((price-Ask)>= Step*Point&& Ask>iHigh(NULL,1440,1)) { if (OrderSend(Symbol(),OP_BUY,findorderBuy2lot(),Ask,Slippage,Ask-Sl*10*Point,0,"",Magik,0,clrDarkBlue) < 1) Print ("Не удалось открыть дополнительный ордер на покупку"); ModifiOrders1(); } } if(countSell()>=1 ) { price = FindLastSellPrice(); if((Bid-price)>= Step*Point&& Bid<iLow(NULL,1440,1)) { if (OrderSend(Symbol(),OP_SELL,findorderSell2ot(),Ask,Slippage,Bid+Sl*10*Point,0,"",Magik,0,clrRed) < 1) Print ("Не удалось открыть дополнительный ордер на Продажу"); ModifiOrders2(); } } } //+-----------------------------------------------------------------+ double FindLastBuyPrice() { int oldticket, ticket = 0; double oldopenprice = 0; for (int cnt = OrdersTotal()-1;cnt>=0; cnt --) { if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) { if(OrderSymbol()==Symbol() && OrderMagicNumber() == Magik && OrderType() ==OP_BUY) { oldticket = OrderTicket(); if (oldticket > ticket) { ticket = oldticket; oldopenprice = OrderOpenPrice(); } } } } return(oldopenprice); } //+------------------------------------------------------------- double FindLastSellPrice() { int oldticket, ticket = 0; double oldopenprice = 0; for (int cnt = OrdersTotal()-1;cnt>=0; cnt --) { if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) { if(OrderSymbol()==Symbol() && OrderMagicNumber() == Magik && OrderType() ==OP_SELL) { oldticket = OrderTicket(); if (oldticket > ticket) { ticket = oldticket; oldopenprice = OrderOpenPrice(); } } } } return(oldopenprice); } //+-Подсчет ордеров-----------------------------------------------------------------+ int countBuy() { int count = 0; for (int trade = OrdersTotal()-1; trade >=0; trade--) { if (OrderSelect(trade,SELECT_BY_POS,MODE_TRADES) == true) { if (OrderSymbol() == Symbol() && OrderMagicNumber()== Magik && OrderType() == OP_BUY) count++; } } return(count); } //+------------------------------------------------------------------+ int countSell() { int count = 0; for (int trade = OrdersTotal()-1; trade >=0; trade--) { if (OrderSelect(trade,SELECT_BY_POS,MODE_TRADES) == true) { if (OrderSymbol() == Symbol() && OrderMagicNumber()== Magik && OrderType() == OP_SELL) count++; } } return(count); } //+----------------убыток по ордеру-------------------------------------------------+ double OP() { double pr=0; for (int cnt = OrdersTotal()-1;cnt>=0; cnt --) { if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) { if(OrderSymbol()==Symbol() && OrderMagicNumber() == Magik) { if(OrderType() ==OP_BUY) { pr+=OrderProfit(); } }}} return(pr); } double OP1() { double pr=0; for (int cnt = OrdersTotal()-1;cnt>=0; cnt --) { if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) { if(OrderSymbol()==Symbol() && OrderMagicNumber() == Magik ) { if(OrderType() ==OP_SELL) { pr+=OrderProfit(); } }}} return(pr); } //+----------------лот для 2 ордера покупки-------------------------------------------------+ double findorderBuy2lot() { double LoT1=0; for (int cnt = OrdersTotal()-1;cnt>=0; cnt --) { if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) { if(OrderSymbol()==Symbol() && OrderMagicNumber() == Magik && OrderType() ==OP_BUY) { LoT1=OP()/-100/2; }}} return (LoT1); } //+----------------лот для 2 ордера покупки-------------------------------------------------+ double findorderSell2ot() { double LoT2=0; for (int cnt = OrdersTotal()-1;cnt>=0; cnt --) { if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) { if(OrderSymbol()==Symbol() && OrderMagicNumber() == Magik && OrderType() ==OP_SELL) { LoT2=OP1()/-100/2; }}} return (LoT2); } //+---------------Модификацияbuy-------------------------------------------------+ void ModifiOrders1() {double ModPrice; for (int cnt = OrdersTotal()-1;cnt>=0; cnt --) { if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) { if(OrderSymbol()==Symbol() && OrderMagicNumber() == Magik && OrderType() ==OP_BUY) { ModPrice=FindLastBuyPrice()+20*10*Point; for(int i=OrdersTotal()-1; i>=0;i--) { if(OrderSelect(i, SELECT_BY_POS,MODE_TRADES)) { if(OrderSymbol()==Symbol()&& OrderMagicNumber() == Magik&&OrderType() == OP_BUY) { if(OrderModify(OrderTicket(),OrderOpenPrice(),0,ModPrice,NULL,clrDarkBlue)) Print("Ордера модифицированны"); else Print(ModPrice); } }}}} }} //+---------------МодификацияSell-------------------------------------------------+ void ModifiOrders2() { double ModPrice; for (int cnt = OrdersTotal()-1;cnt>=0; cnt --) { if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) { if(OrderSymbol()==Symbol() && OrderMagicNumber() == Magik && OrderType() ==OP_SELL) { ModPrice=FindLastSellPrice()-20*10*Point; for(int i=OrdersTotal()-1; i>=0;i--) { if(OrderSelect(i, SELECT_BY_POS,MODE_TRADES)) { if(OrderSymbol()==Symbol()&& OrderMagicNumber() == Magik&&OrderType() == OP_SELL) { if(OrderModify(OrderTicket(),OrderOpenPrice(),0,ModPrice,NULL,clrDarkBlue)) Print("Ордера модифицированны"); else Print(ModPrice); }}}}}}}</code>
ilyask