//+------------------------------------------------------------------+ //| expert2.mq4 | //| Copyright © 2009, MetaQuotes Software Corp. | //| http://www.metaquotes.net | //+------------------------------------------------------------------+ #property copyright "Copyright © 2009, MetaQuotes Software Corp." #property link "http://www.metaquotes.net" extern int MaxRisk=2; extern int TakeProfit=0; extern int StopLoss=0; extern int MAPeriod=25; extern int Delta=30; datetime Today=0; //+------------------------------------------------------------------+ int init() {return(0);} //+------------------------------------------------------------------+ int deinit() {return(0);} //+------------------------------------------------------------------+ int start() {if(DayOfWeek()==0 || DayOfWeek()==6) return(0); // в выходные не работаем if(!IsTradeAllowed()) return(0); // пропустим тик если терминал занят //…проверим открытие новой свечи if(Time[0]==Today) return(0); Today=Time[0]; //…подсчитаем количество ордеров и перенесем стоплосс int oBuy=0,oSell=0; for(int i=OrdersTotal()-1;i>=0;i--) if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) {if(OrderType()==OP_BUY && Bid>OrderOpenPrice()) EditOrder(Low[1]); if(OrderType()==OP_SELL && AskDelta*Point) return(0); if(oBuy==0 && Open[1]ma) {DelOrders(OP_SELLSTOP); double s1=Low[1]-1*Point; if(Bid-s1<30*Point) s1=Bid-30*Point; NewOrder(OP_BUYSTOP,Lot,High[1]+1*Point,0,s1);} if(oSell==0 && Open[1]>ma && Close[1]Max_Lot) Lot=Max_Lot; if(Lot*One_Lot>Free) return(0.0); return(Lot);} //+------------------------------------------------------------------+ int NewOrder(int Cmd,double Lot,double PR=0,double TP=0,double SL=0) {while(!IsTradeAllowed()) Sleep(100); if(Cmd==OP_BUY) {PR=Ask; if(TP==0 && TakeProfit>0) TP=Ask+TakeProfit*Point; if(SL==0 && StopLoss>0) SL=Ask-StopLoss*Point;} if(Cmd==OP_SELL) {PR=Bid; if(TP==0 && TakeProfit>0) TP=Bid-TakeProfit*Point; if(SL==0 && StopLoss>0) SL=Bid+StopLoss*Point;} int tic=OrderSend(Symbol(),Cmd,Lot,PR,3,SL,TP,"",0,0,CLR_NONE); if(tic<0) Print("Ошибка открытия ордера: ",GetLastError()); return(tic);} //+------------------------------------------------------------------+ void DelOrders(int Cmd) {for(int i=OrdersTotal()-1;i>=0;i--) if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) if(OrderType()==Cmd) DelOrder(); return;} //+------------------------------------------------------------------+ void DelOrder() {while(!IsTradeAllowed()) Sleep(100); if(!OrderDelete(OrderTicket(),CLR_NONE)) Print("Ошибка удаления ордера: ",GetLastError()); return;} //+------------------------------------------------------------------+ void EditOrder(double sl) {while(!IsTradeAllowed()) Sleep(100); if(!OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),0,CLR_NONE)) Print("Ошибка редактирования ордера: ",GetLastError()); return;} //+------------------------------------------------------------------+