//+------------------------------------------------------------------+ //| 123.mq4 | //| Copyright 2020, | //| http://www.forexsystems.biz | //+------------------------------------------------------------------+ #property copyright "Copyright 2020, " #property link "http://www.forexsystems.biz" #property version "1.00" #property strict //--- Inputs extern double Lots = 0.1; // лот extern double KLot = 1; // умножение лота extern double MaxLot = 5; // максимальный лот extern int StopLoss = 0; // стоп лосс extern int TakeProfit = 0; // тейк профит extern double Profit = 100; // общая прибыль extern double Loss = 100; // общий убыток extern int BULevel = 0; // уровень БУ extern int BUPoint = 0; // пункты БУ extern int TrailingStop = 0; // трал extern int Count = 5; // число ордеров extern int StartHour = 0; // час начала торговли extern int StartMin = 30; // минута начала торговли extern int EndHour = 23; // час окончания торговли extern int EndMin = 30; // минута окончания торговли extern int CloseSig = 1; // 1-закрытие по сигналу 0-нет extern int Expiration = 10; // тайм аут ордера extern int Slip = 30; // реквот extern int Shift = 2; // на каком баре сигнал индикатора extern int Magic = 123; // магик extern string IndName = "0TMA+CG mladen"; extern string TimeFram = "D1"; extern int HalfLength = 56; extern int Price = PRICE_WEIGHTED; extern double BandsDeviations = 1.618; extern string IndName2 = "0TMA+CG mladen"; extern string TimeFram2 = "current time frame"; extern int HalfLength2 = 56; extern int Price2 = PRICE_WEIGHTED; extern double BandsDeviations2 = 1.618; extern int TimeOut = 600; //TimeOut Period in Min double CurrentBalance; datetime TradeStartTime; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { CurrentBalance = AccountBalance(); //--- Comment(""); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { Comment(""); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ bool TimeSession(int aStartHour,int aStartMinute,int aStopHour,int aStopMinute,datetime aTimeCur) { //--- время начала сессии int StartTime=3600*aStartHour+60*aStartMinute; //--- время окончания сессии int StopTime=3600*aStopHour+60*aStopMinute; //--- текущее время в секундах от начала дня aTimeCur=aTimeCur%86400; if(StopTime=StartTime || aTimeCur=StartTime && aTimeCur0) sl=NormalizeDouble(price+StopLoss*_Point,_Digits); if(TakeProfit>0) tp=NormalizeDouble(price-TakeProfit*_Point,_Digits); } if(type==0 || type==2 || type==4) { clr=Blue; if(StopLoss>0) sl=NormalizeDouble(price-StopLoss*_Point,_Digits); if(TakeProfit>0) tp=NormalizeDouble(price+TakeProfit*_Point,_Digits); } r=OrderSend(NULL,type,Lot(),NormalizeDouble(price,_Digits),Slip,sl,tp,"",Magic,TimeCurrent()+Expiration*3600,clr); return; } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ 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()==Magic) { if(OrderType()<2) count++; } } } return(count); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ double Lot() { double lot=Lots; for(int i=OrdersHistoryTotal()-1; i>=0; i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) { if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic) { if(OrderProfit()>0) break; if(OrderProfit()<0) { lot=OrderLots()*KLot; break; } } } } if(lot>MaxLot) lot=Lots; return(lot); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void Trailing() { bool mod; 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) { if(Bid-OrderOpenPrice()>TrailingStop*_Point) { if(OrderStopLoss()TrailingStop*_Point) { if((OrderStopLoss()>(Ask+TrailingStop*_Point)) || (OrderStopLoss()==0)) { mod=OrderModify(OrderTicket(),OrderOpenPrice(),Ask+TrailingStop*_Point,OrderTakeProfit(),0,Yellow); return; } } } } } } } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void BU() { bool m; 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) { if(OrderOpenPrice()<=(Bid-(BULevel+BUPoint)*_Point) && OrderOpenPrice()>OrderStopLoss()) { m=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+BUPoint*_Point,OrderTakeProfit(),0,Yellow); return; } } if(OrderType()==OP_SELL) { if(OrderOpenPrice()>=(Ask+(BULevel+BUPoint)*_Point) && (OrderOpenPrice()=0; i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic) { if(OrderType()==0 && (ot==0 || ot==-1)) { RefreshRates(); cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,_Digits),Slip,White); } if(OrderType()==1 && (ot==1 || ot==-1)) { RefreshRates(); cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,_Digits),Slip,White); } } } } } //+------------------------------------------------------------------+ //| Профит всех ордеров по типу ордера | //+------------------------------------------------------------------+ double AllProfit() { double pr=0; for(int i=OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic) { if(OrderType()==0) { pr+=OrderProfit()+OrderCommission()+OrderSwap(); } if(OrderType()==1) { pr+=OrderProfit()+OrderCommission()+OrderSwap(); } } } } return(pr); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int FindOrderType() { int oticket,ticketNumber=0,type=0; for(int i=OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic) { oticket=OrderTicket(); if(oticket>ticketNumber) { ticketNumber=oticket; type=OrderType(); } } } } return(type); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ double FindLastBuyPrice() { 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() && OrderType()==OP_BUY && OrderMagicNumber()==Magic) { oticket=OrderTicket(); if(oticket>ticketNumber) { ticketNumber=oticket; oprice=OrderOpenPrice(); } } } } 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() && OrderType()==OP_SELL && OrderMagicNumber()==Magic) { oticket=OrderTicket(); if(oticket>ticketNumber) { ticketNumber=oticket; oprice=OrderOpenPrice(); } } } } return(oprice); } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { if (TimeCurrent() < TradeStartTime) return; double blu = iCustom(NULL,0,IndName,TimeFram,HalfLength,Price,BandsDeviations,1,Shift); double red = iCustom(NULL,0,IndName,TimeFram,HalfLength,Price,BandsDeviations,2,Shift); double up = iCustom(NULL,0,IndName2,TimeFram2,HalfLength2,Price2,BandsDeviations2,1,Shift); double dn = iCustom(NULL,0,IndName2,TimeFram2,HalfLength2,Price2,BandsDeviations2,2,Shift); double up1 = iCustom(NULL,0,IndName2,TimeFram2,HalfLength2,Price2,BandsDeviations2,3,Shift); double dn1 = iCustom(NULL,0,IndName2,TimeFram2,HalfLength2,Price2,BandsDeviations2,4,Shift); if(BULevel>0) BU(); if(TrailingStop>0) Trailing(); if(AllProfit()>Profit && Profit>0) CloseAll(); if(AllProfit()<-Loss && Loss>0) CloseAll(); if(CountTrades()<1 && TimeSession(StartHour,StartMin,EndHour,EndMin,TimeCurrent())) { if(dn1 && Bidblu) PutOrder(1,Bid); } if(CountTrades()>0 && CountTrades()=(dn1 && Bid=(up1 && Bid>blu)) PutOrder(1,Bid); } if(CloseSig>0) { if(Bid>up) CloseAll(0); if(Bid