/*********************************************************************************************
 *                                                                     dailyPercent v1.4.mq4 *
 *                                                           Copyright © 2010, Mike Kaufmann *
 *                                                             http://www.out-of-control.net *
 *                                                  mod. by DiveBubble and TraderDoc 09.2013 *
 *                            weekly/monthly stuff/modes, OrderType-fix added by fxdaytrader *
 *              visit: http://www.forexfabrik.de/mt-indikatoren/daily-percent-indi/msg78153/ *
 *********************************************************************************************/
#property copyright "Copyright © 2010, Mike Kaufmann ( out-of-control.net/calculator.php), mod. by TraderDoc, DiveBubble, fxdaytrader"
#property link      "http://forexBaron.net"

#property indicator_chart_window

extern string mh="0:Daily Results | 1:Weekly Results | 2:Monthly Results | 3:Daily+Weekly+Monthly Results";
extern int Mode = 3;

extern string sh="1:right top 2:left bottom 3:right bottom 4:left top";
extern int Corner = 1;
extern color TextColor = Red; //DimGray;
extern string TextFont = "Courier New";

datetime WeekStart,MonthStart;
double dailyEarning,dailyPercent;

/*********************************************************************************************
 * init()                                                                                    *
 *********************************************************************************************/
void init()
{
   
}

/*********************************************************************************************
 * deinit()                                                                                  *
 *********************************************************************************************/
void deinit()
{
   ObjectDelete("xdailyxPercentLabelx");
}

/*********************************************************************************************
 * start()                                                                                   *
 *********************************************************************************************/
void start()
{
   string percentString="";
   dailyEarning = 0.00;
   dailyPercent = 0.00;
   //
   string LabelText = "Daily Percent:";
     
   if (Mode==1) LabelText = "Weekly Percent:";
   WeekStart = StrToTime(StringConcatenate(Year(), ".", Month(), ".", Day())) - (DayOfWeek() * 86400); //by ThirTeen, http://forum.mql4.com/57074
   MonthStart = StrToTime(StringConcatenate(Year(), ".", Month(), ".", Day())) - (Day() * 86400);
   //

   if (Mode==2) { //monthly
    LabelText = "Monthly Percent:";
    Earnings();
    dailyPercent = dailyEarning/((AccountEquity()-dailyEarning)/100);
    LabelText = LabelText+" "+DoubleToStr(dailyPercent,2)+"%";
   }//end if (Mode==2) {
   
   
   if (Mode < 2) { //daily or weekly
    Earnings();
    dailyPercent = dailyEarning/((AccountEquity()-dailyEarning)/100);
    LabelText = LabelText+" "+DoubleToStr(dailyPercent,2)+"%";
   }//end if (Mode < 2) {
   
   if (Mode==3) {
   Mode=2; //monthly percent
   dailyEarning = 0.00;
   LabelText = "Monthly:";
   Earnings();
   dailyPercent = dailyEarning/((AccountEquity()-dailyEarning)/100);
   LabelText = LabelText+" "+DoubleToStr(dailyPercent,2)+"% | Weekly: ";
   //
   Mode=1; //weekly percent
   dailyEarning = 0.00;
   Earnings();
   dailyPercent = dailyEarning/((AccountEquity()-dailyEarning)/100);
   LabelText = LabelText+DoubleToStr(dailyPercent,2)+"% | Daily: ";
   //
   Mode=0; //daily percent
   dailyEarning = 0.00;
   Earnings();
   dailyPercent = dailyEarning/((AccountEquity()-dailyEarning)/100);
   LabelText = LabelText+DoubleToStr(dailyPercent,2)+"%";
   //
   Mode=3;
   }//end if (Mode==3)
      
   if(ObjectFind("xdailyxPercentLabelx") == -1) {
      ObjectCreate("xdailyxPercentLabelx", OBJ_LABEL, 0, 0, 0);
      ObjectSet("xdailyxPercentLabelx", OBJPROP_CORNER, Corner);
      ObjectSet("xdailyxPercentLabelx", OBJPROP_XDISTANCE, 5); //, 70
      ObjectSet("xdailyxPercentLabelx", OBJPROP_YDISTANCE, 30);
   }
   ObjectSetText("xdailyxPercentLabelx", LabelText, 10, TextFont, TextColor);
}

datetime JustDate(datetime dValue) {
   return(StrToTime(TimeToStr(dValue, TIME_DATE)));
}
/*********************************************************************************************/

double Earnings() {
int i;
for(i=0;i<OrdersHistoryTotal();i++) {
      //old: if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true) {
      if (!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) continue;
      if (OrderType()!=OP_BUY && OrderType()!=OP_SELL) continue;
         //old: if(JustDate(OrderCloseTime()) == JustDate(TimeLocal())) {
         if (
             (Mode==1 && JustDate(OrderCloseTime()) <= JustDate(TimeLocal()) && JustDate(OrderCloseTime()) >= JustDate(WeekStart)) //weekly
             || (Mode==0 && JustDate(OrderCloseTime()) == JustDate(TimeLocal())) //daily
             || (Mode==2 && JustDate(OrderCloseTime()) <= JustDate(TimeLocal()) && JustDate(OrderCloseTime()) >= JustDate(MonthStart)) //monthly
             ) {
            dailyEarning = dailyEarning + OrderProfit() + OrderCommission() + OrderSwap();
         }
      //old: }
   }//end for(i=0;i<OrdersHistoryTotal();i++) {
   
   for(i=0;i<OrdersTotal();i++) {
      //old: if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true) {
      if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;
      if (OrderType()!=OP_BUY && OrderType()!=OP_SELL) continue;
         //old: if(JustDate(OrderOpenTime()) == JustDate(TimeLocal())) {
         if (
             (Mode==1 && JustDate(OrderOpenTime()) >= JustDate(WeekStart)) //weekly
             || (Mode==0 && JustDate(OrderOpenTime()) == JustDate(TimeLocal())) //daily
             || (Mode==2 && JustDate(OrderOpenTime()) >= JustDate(MonthStart)) //monthly
             ) {
            dailyEarning = dailyEarning + OrderProfit() + OrderCommission() + OrderSwap();
         }
      //old: }
   }//end for(i=0;i<OrdersTotal();i++) {
   
return(dailyEarning);
}