Time: 2016-05-17 | Download file:1tradeday_2.mq4
//+------------------------------------------------------------------+ //| 1 Trade a Day.mq4 | //| Copyright © 2009. | //| http://strategy4you.ru | //+------------------------------------------------------------------+ #property copyright "Copyright © 2009." #property link "http://strategy4you.ru" #define Magic 20100225 #define h2s 3600 extern double Lot=0.0; // Размер лота для одного ордера(если 0 - расчитывается автоматически) extern int MaxRisk=2; // % от свободных средств(для расчета лота) extern int GMTShift=1; // Смещение времени брокера относительно GMT extern string StartTime="00:00"; // Время начала интервала(время GMT) extern string EndTime="08:59"; // Время окончания интервала(время GMT) extern int Delta=10; // Смещение для установки ордеров extern int NoTrade=120; // Размер коробки больше которого не торгуем(0-торгуем всегда) extern int TPSize=100; // Размер тейкпрофита(в % от коробки) extern int SLSize=100; // Размер стоплосса(в % от коробки) extern int ClosePos=0; // Закрывать сработавший ордер: // 0 - нет // 1 - в начале следующего дня // 2 - в начале следующего дня перенос в безубыток extern bool DelRorder=true; // Удалять отложенный ордер при срабатывании противоположного extern bool ShowWarn=true; // Выводить пользователю предупреждения string StrategyName="1 Trade a Day"; bool work=true; string error; int d=0; //+------------------------------------------------------------------+ int init() {if(Lot!=0 && LotMarketInfo(Symbol(),MODE_MAXLOT)) {Alert("Лот больше разрешенного брокером!"); work=false;} if(Lot==0 && MaxRisk<1) {Alert("Неправильно задан % от свободных средств для расчета лота!"); work=false;} if(Lot==0 && MaxRisk>100) {Alert("Неправильно задан % от свободных средств для расчета лота!"); work=false;} return(0);} //+------------------------------------------------------------------+ int deinit() {Comment("");return(0);} //+------------------------------------------------------------------+ int start() {if(!work) {Comment("Ошибка в параметрах! Советник остановлен."); return(0);} if(DayOfWeek()==0 || DayOfWeek()==6) return(0); // в выходные не работаем if(!IsTradeAllowed()) return(0); // пропустим тик если терминал занят double mLot=Lot; if(Lot==0.0) mLot=GetOptimalLot(MaxRisk); Comment("http://strategy4you.ru"); //...Подсчет ордеров и удаление противоположного ордера int oCount=0,sCount=0,Ticket=0; for(int i=OrdersTotal()-1;i>=0;i--) if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic) {if(OrderType()==OP_BUY || OrderType()==OP_SELL) oCount++; if(OrderType()==OP_BUYSTOP || OrderType()==OP_SELLSTOP) {sCount++;Ticket=OrderTicket();}} if(oCount>0 && DelRorder) if(OrderSelect(Ticket,SELECT_BY_TICKET)) DelOrder(); //...проверка что сегодня уже торговали if(d==TimeDay(TimeCurrent())) return(0); //...закрытие ордеров if(oCount+sCount>0 && ClosePos>0) {if(ClosePos==1) CloseAll(); if(ClosePos==2 && oCount>0) {for(i=OrdersTotal()-1;i>=0;i--) if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic) {if(OrderType()==OP_BUY && OrderStopLoss() OrderOpenPrice()) EditOrder(OrderOpenPrice()+Point); if(OrderType()==OP_SELL && OrderStopLoss()>OrderOpenPrice() && Bid 0) {d=TimeDay(TimeCurrent());return(0);} //...проверка размера коробки if(NoTrade>0 && Box>NoTrade*Point) {int r=Box/Point; error="Размер коробки: "+r+" больше разрешенного: "+NoTrade+"! Не торгуем."; if(ShowWarn) Alert(error); Print(error); d=TimeDay(TimeCurrent()); return(0);} //...установка ордеров double a=NormalizeDouble(Ask,Digits); double b=NormalizeDouble(Bid,Digits); double level=MarketInfo(Symbol(),MODE_STOPLEVEL)*Point; if((u-a) 0) break; Print("#",OrderTicket()," Error: ",GetLastError()," Function: NewOrder(",Cmd,",",lot,",",pr,",",tp,",",sl,") №",er); Sleep(1000);} return(tick);} //+------------------------------------------------------------------+ void EditOrder(double sl) {for(int er=0;er<3;er++) {while(!IsTradeAllowed()) Sleep(100); if(OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),0,CLR_NONE)) break; Print("#",OrderTicket()," Error: ",GetLastError()," Function: EditOrder(",sl,") №",er); Sleep(1000);}} //+------------------------------------------------------------------+ void DelOrder() {for(int er=0;er<3;er++) {while(!IsTradeAllowed()) Sleep(100); if(OrderDelete(OrderTicket(),CLR_NONE)) break; Print("#",OrderTicket()," Error: ",GetLastError()," Function: DelOrder() №",er); Sleep(1000);}} //+------------------------------------------------------------------+ void CloseOrder(double lot=0) {double pr=0,a=0,b=0,l=0; for(int er=0;er<3;er++) {while(!IsTradeAllowed()) Sleep(100); if(OrderType()==OP_BUY) pr=NormalizeDouble(Bid,Digits); if(OrderType()==OP_SELL) pr=NormalizeDouble(Ask,Digits); if(lot==0) l=OrderLots(); if(OrderClose(OrderTicket(),l,pr,3,CLR_NONE)) break; Print("#",OrderTicket()," Error: ",GetLastError()," Function: CloseOrder(",lot,") №",er); Sleep(1000);}} //+------------------------------------------------------------------+ void CloseAll() {for(int i=OrdersTotal()-1;i>=0;i--) if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic) {if(OrderType()==OP_BUY || OrderType()==OP_SELL) CloseOrder(); if(OrderType()==OP_BUYSTOP || OrderType()==OP_SELLSTOP) DelOrder();}} //+------------------------------------------------------------------+ double NormLot(double lot) {double Min_Lot=MarketInfo(Symbol(),MODE_MINLOT); double Max_Lot=MarketInfo(Symbol(),MODE_MAXLOT); double Step =MarketInfo(Symbol(),MODE_LOTSTEP); int DigLot =0; if(Step<0.1) DigLot=2; if(Step>=0.1) DigLot=1; if(Step>=1) DigLot=0; if(lot Max_Lot) lot=Max_Lot; return(NormalizeDouble(lot,DigLot));} //+------------------------------------------------------------------+ double GetOptimalLot(int Percent) {double Free =AccountFreeMargin(); double One_Lot =MarketInfo(Symbol(),MODE_MARGINREQUIRED); double Step =MarketInfo(Symbol(),MODE_LOTSTEP); double Lots_New=MathFloor(Free*Percent/100/One_Lot/Step)*Step; return(NormLot(Lots_New));} //+------------------------------------------------------------------+