//+------------------------------------------------------------------+
//|                                                     It Rocks.mq4 |
//|              Copyright © 2009 Mark Johnson. All rights reserved. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+

string Author = "Copyright © 2009 Mark Johnson. All rights reserved.";

extern bool UseTradeHours = true;
extern int StartHour = 8;
extern int CloseHour = 16;
extern double Lots = 0.01;
extern double TakeProfit = 100;
extern double StopLoss = 40;
extern string CurrencySuffix = "";
extern double DailyProfitTarget = 100;

int MaxOpenOrders = 1;

string Currency[6] = {"EURUSD","EURJPY","GBPUSD","GBPJPY","USDJPY","USDCHF"};

double CorPeriod = PERIOD_D1;

#property show_inputs

//+------------------------------------------------------------------+
//| Start function                                                   |
//+------------------------------------------------------------------+
int start()
  {

    double Lotsize, Price, Tp, Sl, DailyProfit;
    string symbol;
    int cnt, retry, ticket, CurrentHour = TimeHour(TimeLocal());

    if(Period() != PERIOD_D1)
      {
        Comment("Switch to daily chart...");
        return(0);
      }

    if(UseTradeHours && (CurrentHour < StartHour || CurrentHour >= CloseHour))
      {
        return(0);
      }
      
    for(cnt = 0; cnt <= OrdersHistoryTotal(); cnt++)
      {
        if(OrderSelect(cnt, SELECT_BY_POS, MODE_HISTORY))
          {
            if(TimeDayOfYear(OrderCloseTime()) == DayOfYear() &&
               TimeYear(OrderCloseTime()) == Year())
              {   
                DailyProfit += OrderProfit();
              }
          }
      }
 
    if(DailyProfit >= DailyProfitTarget)
      {
        return(0);
      }

    Comment("\n",Author,
            "\n\n UseTradeHours=",UseTradeHours,
            "\n StartHour=",StartHour,
            "\n CloseHour=",CloseHour,
            "\n DailyProfitTarget=",DailyProfitTarget,
            "\n Lotsize=",Lots,
            "\n TakeProfit=",TakeProfit,
            "\n StopLoss=",StopLoss,
            "\n DayProfit=",DailyProfit);
 
    for(cnt = 0; cnt < ArraySize(Currency); cnt++)
      { 
      
        if(OrdersTotal() >= MaxOpenOrders)
          {
            break;
          }
          
        symbol=Currency[cnt]+CurrencySuffix;
        
        double CCI12 = iCCI(symbol,CorPeriod,12,PRICE_TYPICAL,0);
        double CCI20 = iCCI(symbol,CorPeriod,20,PRICE_TYPICAL,0);
        double EMA5  = iMA(symbol,CorPeriod,5,0,MODE_EMA,PRICE_CLOSE,0);
        double EMA12 = iMA(symbol,CorPeriod,12,0,MODE_EMA,PRICE_CLOSE,0);
        
        if(!TradeExists(symbol) && CCI12 > CCI20 && EMA5 > EMA12)
          {

            Price = MarketInfo(symbol,MODE_ASK);
            Tp    = Price + TakeProfit * Point;
            Sl    = Price - StopLoss * Point; 
                
            ticket=0;
            retry=10;
                
            while(ticket<1 && retry>0)
              {
                RefreshRates();
                ticket = OrderSend(symbol,OP_BUY,Lotsize,Price,3,Sl,Tp,"",0,0,CLR_NONE);
                Print("Ticket=",ticket);
                Sleep(10);
                retry--;
              }

           }

         if(!TradeExists(symbol) && CCI12 < CCI20 && EMA5 < EMA12)
           {

             Price = MarketInfo(symbol,MODE_BID);
             Tp    = Price - TakeProfit * Point;
             Sl    = Price + StopLoss * Point; 

             ticket=0;
             retry=10;

             while(ticket<1 && retry>0)
               {
                 RefreshRates();
                 ticket = OrderSend(symbol,OP_SELL,Lotsize,Price,3,Sl,Tp,"",0,0,CLR_NONE);
                 Print("Ticket=",ticket);
                 Sleep(10);
                 retry--;
               }

           }
              
      }
      
    return(0);

  }

//+------------------------------------------------------------------+
//| TradeExists function                                             |
//+------------------------------------------------------------------+
bool TradeExists(string symbol)
  {
    bool found=false;

    for(int cnt=0 ; cnt <= OrdersTotal() ; cnt++)
      {
        OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
        if(OrderSymbol() == symbol)
          {
            found=true;
          }
      }
    return(found);
  }

