//+------------------------------------------------------------------+
//|                                                      Testing.mq4 |
//|                                                 Nemanja Bojkovic |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Nemanja Bojkovic"
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

#include <CustomFunctions01.mqh>

int magicNMB = 77777;
double riskPerTrade = 0.002;
int obj_total=ObjectsTotal(OBJ_HLINE);   

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---

   double redMA1D = iMA(NULL,PERIOD_D1,21,0,MODE_SMA,PRICE_CLOSE,0);
   double blueMA1D = iMA(NULL,PERIOD_D1,50,0,MODE_EMA,PRICE_CLOSE,0);
   double whiteMA1D = iMA(NULL,PERIOD_D1,55,0,MODE_SMA,PRICE_CLOSE,0);
   bool BuyingTrend1D = ((redMA1D > blueMA1D) && (blueMA1D > whiteMA1D) && (redMA1D > whiteMA1D));
   bool ShortingTrend1D = ((whiteMA1D > blueMA1D) && (blueMA1D > redMA1D) && (whiteMA1D > redMA1D));
   
   double redMA1HR = iMA(NULL,PERIOD_H1,21,0,MODE_SMA,PRICE_CLOSE,0);
   double blueMA1HR = iMA(NULL,PERIOD_H1,50,0,MODE_EMA,PRICE_CLOSE,0);
   double whiteMA1HR = iMA(NULL,PERIOD_H1,55,0,MODE_SMA,PRICE_CLOSE,0);
   bool BuyingTrend1HR = ((redMA1HR > blueMA1HR) && (blueMA1HR > whiteMA1HR) && (redMA1HR > whiteMA1HR));
   bool ShortingTrend1HR = ((whiteMA1HR > blueMA1HR) && (blueMA1HR > redMA1HR) && (whiteMA1HR > redMA1HR));

   double redMA4HR = iMA(NULL,PERIOD_H4,21,0,MODE_SMA,PRICE_CLOSE,0);
   double blueMA4HR = iMA(NULL,PERIOD_H4,50,0,MODE_EMA,PRICE_CLOSE,0);
   double whiteMA4HR = iMA(NULL,PERIOD_H4,55,0,MODE_SMA,PRICE_CLOSE,0);
   bool BuyingTrend4HR = ((redMA4HR > blueMA4HR) && (blueMA4HR > whiteMA4HR) && (redMA4HR > whiteMA4HR));
   bool ShortingTrend4HR = ((whiteMA4HR > blueMA4HR) && (blueMA4HR > redMA4HR) && (whiteMA4HR > redMA4HR));

   bool ShortingTime = ((High[1]  > redMA1HR) && (Close [1] < redMA1HR));
   bool BuyingTime = ((Low [1] < redMA1HR) && (Close [1]  > redMA1HR));
   
   double ATRsize4HR = iATR(NULL,PERIOD_H4,30,0);
   double ATRsize1HR = iATR(NULL,PERIOD_H1,30,0);
   

   double stochasticBlueLine4H = (NormalizeDouble(iStochastic(NULL,PERIOD_H4,5,3,3,MODE_SMA,0,0,0), 2));
   double stochasticRedLine4H = (NormalizeDouble(iStochastic(NULL,PERIOD_H4,5,3,3,MODE_SMA,0,1,0), 2));
   bool stochasticShorting4H = (stochasticBlueLine4H < stochasticRedLine4H && stochasticRedLine4H < 50);
   bool stochasticBuying4H = (stochasticBlueLine4H > stochasticRedLine4H && stochasticRedLine4H > 50);

   double stochasticBlueLine1H = (NormalizeDouble(iStochastic(NULL,PERIOD_H1,5,3,3,MODE_SMA,0,0,0), 2));
   double stochasticRedLine1H = (NormalizeDouble(iStochastic(NULL,PERIOD_H1,5,3,3,MODE_SMA,0,1,0), 2));
   bool stochasticShorting1H = (stochasticBlueLine1H < stochasticRedLine1H && stochasticRedLine1H < 70);
   bool stochasticBuying1H = (stochasticBlueLine1H > stochasticRedLine1H && stochasticRedLine1H > 30);

   double stochasticBlueLine1D = (NormalizeDouble(iStochastic(NULL,PERIOD_D1,5,3,3,MODE_SMA,0,0,0), 2));
   double stochasticRedLine1D = (NormalizeDouble(iStochastic(NULL,PERIOD_D1,5,3,3,MODE_SMA,0,1,0), 2));
   bool stochasticShorting1D = (stochasticBlueLine1D < stochasticRedLine1D && stochasticRedLine1D < 50);
   bool stochasticBuying1D = (stochasticBlueLine1D > stochasticRedLine1D && stochasticRedLine1D > 50);


   
for (int i = 0; i <  ; i++)
{
   string obj_name = ObjectName(i);
   double priceHLine = NormalizeDouble(ObjectGetDouble(0,obj_name,OBJPROP_PRICE), Digits); 
   bool priceHLineTouch = (priceHLine  > Low [2] && priceHLine < High [2]);
      
      if(!CheckIfOpenOrdersByMagicNB(magicNMB) && priceHLineTouch == true) // if no open orders, try to enter new position.
      {
      if(IsTradingAllowed())
         {
          bool candelstickAfterTouchAbove = (Low [1] > priceHLine && Close [1] > priceHLine && High [1] > priceHLine && Open [1] > priceHLine);
          bool candelstickAfterTouchBellow = (Close [1] < priceHLine && High [1] < priceHLine && Open [1] < priceHLine && Low [1] < priceHLine);

         if(priceHLineTouch == true && BuyingTrend4HR == true && candelstickAfterTouchAbove == true)//buying
           {
            double entryPrice = Open [0];
            double stopLossPrice = Low [2] ;
            double takeProfitPrice = entryPrice + (entryPrice - stopLossPrice)* 1.5;
            
            double sizeOfTheTrade = OptimalLotSize(riskPerTrade, entryPrice, stopLossPrice);
            int orderID = (OrderSend (NULL,OP_BUY, sizeOfTheTrade,entryPrice,10,stopLossPrice,takeProfitPrice,NULL,magicNMB )); //Send buy order
            Print ("Order ID is: " + orderID); 
            if (orderID <0) Print ("Order error is: " + GetLastError());
     
           }
          if(priceHLineTouch == true && ShortingTrend4HR == true && candelstickAfterTouchBellow == true) //shorting
              {
               double entryPrice = Open [0];
               double stopLossPrice = High [2] ;
               double takeProfitPrice = entryPrice - (stopLossPrice - entryPrice)* 1.5;
               
               double sizeOfTheTrade = OptimalLotSize(riskPerTrade,entryPrice,stopLossPrice);
               int orderID = (OrderSend (NULL,OP_SELL,sizeOfTheTrade,entryPrice,10,stopLossPrice,takeProfitPrice,NULL,magicNMB)); //Send short order
               Print ("Order ID is: " + orderID); 
               if (orderID <0) Print ("Order error is: " + GetLastError());  
                 }
     else
     {    
     Print("No signal was found, will compute code again on next price update");
     }
     }
     }
     }
     }
     
 
//+------------------------------------------------------------------+
