//+------------------------------------------------------------------+ //| Doliv.mq5 | //| Copyright 2021, AM2 | //| https://www.forexsystems.biz | //+------------------------------------------------------------------+ #property copyright "Copyright 2021, AM2" #property link "https://www.forexsystems.biz" #property version "1.00" #include // Подключаем торговый класс CTrade input double Lots = 0.1; // лот input double Profit = 10; // профит input int StopLoss = 0; // стоплосс input int TakeProfit = 0; // тейкпрофит input int Step = 100; // шаг input int Slip = 100; // проскальзывание input string Symbol1 = "EURUSD"; input string Symbol2 = "GBPUSD"; input string Symbol3 = "USDCHF"; CTrade trade; // Используем торговый класс CTrade //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void CloseAll(string symb, int type=-1) { for(int i=PositionsTotal()-1; i>=0; i--) { if(PositionSelectByTicket(PositionGetTicket(i)) && PositionGetString(POSITION_SYMBOL)==symb) { if(PositionGetInteger(POSITION_TYPE)==type || type==-1) { trade.PositionClose(PositionGetTicket(i)); } } } } //+------------------------------------------------------------------+ //| Position Profit | //+------------------------------------------------------------------+ double AllProfit(string symb) { double p=0; for(int i=PositionsTotal()-1; i>=0; i--) { if(PositionSelectByTicket(PositionGetTicket(i)) && PositionGetString(POSITION_SYMBOL)==symb) p+=PositionGetDouble(POSITION_PROFIT)+PositionGetDouble(POSITION_SWAP); } return(p); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ double LastBuyPrice(string symb) { double pr=0; for(int i=PositionsTotal()-1; i>=0; i--) { if(PositionSelectByTicket(PositionGetTicket(i)) && PositionGetInteger(POSITION_TYPE)==0 && PositionGetString(POSITION_SYMBOL)==symb) { pr=PositionGetDouble(POSITION_PRICE_OPEN); break; } } return(pr); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ double LastSellPrice(string symb) { double pr=0; for(int i=PositionsTotal()-1; i>=0; i--) { if(PositionSelectByTicket(PositionGetTicket(i)) && PositionGetInteger(POSITION_TYPE)==1 && PositionGetString(POSITION_SYMBOL)==symb) { pr=PositionGetDouble(POSITION_PRICE_OPEN); break; } } return(pr); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int CountTrades(string symb) { int count=0; for(int i=PositionsTotal()-1; i>=0; i--) { if(PositionSelectByTicket(PositionGetTicket(i))) { if(PositionGetString(POSITION_SYMBOL)==symb) { if(OrderGetInteger(ORDER_TYPE)<2) count++; } } } return(count); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void Trade(string symb) { double Ask=SymbolInfoDouble(symb,SYMBOL_ASK); double Bid=SymbolInfoDouble(symb,SYMBOL_BID); double pp=SymbolInfoDouble(symb,SYMBOL_POINT); if(AllProfit(symb)>Profit && Profit>0) { CloseAll(symb,-1); } if(CountTrades(symb)<1) { trade.PositionOpen(symb,0,Lots,Ask,0,0); trade.PositionOpen(symb,1,Lots,Bid,0,0); } if(CountTrades(symb)>0) { if(Bid-LastBuyPrice(symb)>Step*pp) trade.PositionOpen(symb,0,Lots,Ask,0,0); if(LastSellPrice(symb)-Bid>Step*pp) trade.PositionOpen(symb,1,Lots,Bid,0,0); } } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { if(Symbol1!="") Trade(Symbol1); if(Symbol2!="") Trade(Symbol2); if(Symbol3!="") Trade(Symbol3); Comment("\n Profit: ",AllProfit(Symbol1), "\n Trades: ",CountTrades(Symbol1)); } //+------------------------------------------------------------------+