//+------------------------------------------------------------------+
//|                                                ULTRON_v_beer.mq4 |
//|                                     Copyright 2018, Pawel.Gawron |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, Pawel.Gawron"
#property description   "mod by Beerbelly"
#property strict

#define MAGICMA  20131111
extern int stopLossPips   = 525;
extern int TakeProfitPips = 700;
extern int Slippage       = 20; 
extern int TralingStopLossRoom = 150; // zero to turn it off.

input double lots =1.0;
input int hour1 = 6;
input int hour2 = 23;

double newStopLoss;
int om;

void CheckForSell(double StopLoss, double TakeProfit)
  {
   int res = OrderSend(Symbol(),OP_SELL,lots,Bid,Slippage,StopLoss,TakeProfit,"",MAGICMA,0,Red);
  }
  
void CheckForBuy(double StopLoss, double TakeProfit)
  {
   int res = OrderSend(Symbol(),OP_BUY,lots,Ask,Slippage,StopLoss,TakeProfit,"",MAGICMA,0,Blue);
  }
 
void OnTick()
  {
   
    if(iVolume(NULL, PERIOD_H1, 0)<=25){
   
      double ma1 = iMA(NULL,PERIOD_H1,9,0,MODE_LWMA,PRICE_OPEN,0);
      double ma2 = iMA(NULL,PERIOD_H1,9,0,MODE_LWMA,PRICE_CLOSE,0);
      double ma3 = iMA(NULL,PERIOD_H1,50,0,MODE_SMA,PRICE_CLOSE,0);
      double ma4 = iMA(NULL,PERIOD_H1,1,0,MODE_SMA,PRICE_CLOSE,0);
      double ma1ma2 = ma1-ma2;
      double ma2ma1 = ma2-ma1;
      double ma3ma4 = ma3-ma4;
      double ma4ma3 = ma4-ma3;
      
      int CountSymbolPositions=0;
    
      for(int trade=OrdersTotal()-1;trade>=0;trade--)
       {
         if(OrderSelect(trade,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==Symbol()){
            if((OrderType()==OP_SELL || OrderType()==OP_BUY) && OrderMagicNumber()==MAGICMA)
               CountSymbolPositions++;
            }
       }
     
      double TakeProfit, StopLoss;
      double c1 = iClose(NULL, PERIOD_H1, 1);
      double c2 = iClose(NULL, PERIOD_H1, 2);
      double o2 = iOpen(NULL, PERIOD_H1, 2);
      int h = TimeHour(iTime(NULL, PERIOD_H1, 0));
      //double newStopLoss;
      
      if(ma3ma4<0.0048 && ma3>ma1 && ma3>ma2 && c1<c2 && c2<o2 && CountSymbolPositions<1 && h>hour1 && h<hour2 && ma1ma2<0.0013 && ma1ma2>0.0004){
         TakeProfit = Bid - TakeProfitPips*Point;
         StopLoss = Ask + stopLossPips*Point;
         CheckForSell(StopLoss, TakeProfit);
      };
      
      if(ma4ma3<0.0048 && ma3<ma1 && ma3<ma2 && c1>c2 && c2>o2 && CountSymbolPositions<1 && h>hour1 && h<hour2  && ma2ma1<0.0013&& ma2ma1>0.0004){
         TakeProfit = Ask + TakeProfitPips*Point;
         StopLoss = Bid - stopLossPips*Point;
         CheckForBuy(StopLoss, TakeProfit);
      };
   
   }
   
   if(TralingStopLossRoom > 0){
      for(int i=0; i < OrdersTotal();i++){
         if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) && OrderSymbol() == Symbol() && OrderMagicNumber() == MAGICMA){
            if(OrderType() == OP_BUY){
               newStopLoss = Bid-TralingStopLossRoom*Point;
               if(Close[0] > OrderOpenPrice()+(TakeProfitPips-10)*Point && newStopLoss>OrderStopLoss() ){
                 om = OrderModify(OrderTicket(), OrderOpenPrice(), newStopLoss , 0, 0, clrNONE);
               }
            }
            if(OrderType() == OP_SELL){
               newStopLoss = Ask+TralingStopLossRoom*Point;
               if(Close[0] < OrderOpenPrice()-(TakeProfitPips-10)*Point && newStopLoss<OrderStopLoss() ){
                  om = OrderModify(OrderTicket(), OrderOpenPrice(), newStopLoss , 0, 0, clrNONE);
               }
            }
         }
      }
   }
 }