//+------------------------------------------------------------------+ //| expert1.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=14; extern int StopLoss=0; extern int StartTime=0; int Today=0; int Type=0; double newLot=0; //+------------------------------------------------------------------+ int init() {return(0);} //+------------------------------------------------------------------+ int deinit() {return(0);} //+------------------------------------------------------------------+ int start() {if(DayOfWeek()==0 || DayOfWeek()==6) return(0); // в выходные не работаем if(!IsTradeAllowed()) return(0); // пропустим тик если терминал занят int Count=0; //…подсчитаем количество ордеров и закроем их через 48 часов for(int i=OrdersTotal()-1;i>=0;i--) if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) {if(TimeCurrent()-OrderOpenTime()>=48*60*60) {newLot=OrderLots();Type=OrderType();CloseOrder();} Count++;} //…откроем ордера в StartTime если нет открытых и сегодня не торговали double Lot=GetLot(MaxRisk); if(Lot==0) {Alert("Недостаточно средств!");return(0);} if(TimeHour(TimeCurrent())==StartTime && Today!=TimeDay(TimeCurrent()) && Count==0) {if(newLot>0) {if(Type==OP_BUY) {NewOrder(OP_BUY,newLot*2); NewOrder(OP_SELL,newLot);} if(Type==OP_SELL){NewOrder(OP_SELL,newLot*2);NewOrder(OP_BUY,newLot);}} if(newLot==0) {NewOrder(OP_BUY,Lot); NewOrder(OP_SELL,Lot);} Today=TimeDay(TimeCurrent()); newLot=0;} return(0);} //+------------------------------------------------------------------+ double GetLot(int Risk) {double Free =AccountFreeMargin(); double One_Lot =MarketInfo(Symbol(),MODE_MARGINREQUIRED); double Min_Lot =MarketInfo(Symbol(),MODE_MINLOT); double Max_Lot =MarketInfo(Symbol(),MODE_MAXLOT); double Step =MarketInfo(Symbol(),MODE_LOTSTEP); double Lot =MathFloor(Free*Risk/100/One_Lot/Step)*Step; if(LotMax_Lot) Lot=Max_Lot; if(Lot*One_Lot>Free) return(0.0); return(Lot);} //+------------------------------------------------------------------+ int NewOrder(int Cmd,double Lot) {double TP=0; //тейкпрофит double SL=0; //стоплосс double PR=0; //Цена while(!IsTradeAllowed()) Sleep(100); if(Cmd==OP_BUY) {PR=Ask; if(TakeProfit>0) TP=Ask+TakeProfit*Point; if(StopLoss>0) SL=Ask-StopLoss*Point;} if(Cmd==OP_SELL) {PR=Bid; if(TakeProfit>0) TP=Bid-TakeProfit*Point; if(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 CloseOrder() {double PR=0; while(!IsTradeAllowed()) Sleep(100); if(OrderType()==OP_BUY) PR=Bid; if(OrderType()==OP_SELL) PR=Ask; if(!OrderClose(OrderTicket(),OrderLots(),PR,3,CLR_NONE)) Print("Ошибка закрытия ордера: ",GetLastError()); return;} //+------------------------------------------------------------------+