Percentage





//+------------------------------------------------------------------+
//|                                                   Percentage.mq4 |
//|  Copyright © 2009, Arif Endro Nugroho <arif_endro@vectra.web.id> |
//|                                         http://www.vectra.web.id |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, Arif E. Nugroho <arif_endro@vectra.web.id>"
#property link      "http://www.vectra.web.id"

#property indicator_chart_window
//---- input parameters
extern int       corner=2;
extern int       xdis=5;
extern int       ydis=20;
extern string    Font="Lucida Console";
extern int       FontSize=8;
extern color     FontPlus=Blue;
extern color     FontMinus=Red;
extern int       timezone=7;
extern bool      back=0;

extern bool      ShowPriceLabel=false;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
  
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   ObjectDelete("DailyStat");
   ObjectDelete("WeeklyStat");
   ObjectDelete("MonthlyStat");

if(ShowPriceLabel){   
   ObjectDelete("PLUp50");
   ObjectDelete("PLDown50");
   ObjectDelete("PLUp100");
   ObjectDelete("PLDown100");
   ObjectDelete("PLUp150");
   ObjectDelete("PLDown150");
   ObjectDelete("PLUp200");
   ObjectDelete("PLDown200");
   ObjectDelete("+0.5");
   ObjectDelete("-0.5");
   ObjectDelete("+1.0");
   ObjectDelete("-1.0");
   ObjectDelete("+1.5");
   ObjectDelete("-1.5");
   ObjectDelete("+2.0");
   ObjectDelete("-2.0");
   
   ObjectDelete("PL0.0");
   ObjectDelete("0.0");
   }
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    counted_bars=IndicatorCounted();

   int    DayOpShift  = iBarShift(NULL, PERIOD_D1, iTime(NULL, PERIOD_D1, 0)) + 0;
   int    DayClShift  = iBarShift(NULL, PERIOD_D1, iTime(NULL, PERIOD_D1, 0)) + 0;
   double DayOpPrice  = iOpen(NULL, PERIOD_D1, DayOpShift); // this should be the close of the first hour (I doesn't like this idea) :(
   double DayClPrice  = iClose(NULL, PERIOD_D1, DayClShift);

//   int    WeekOpShift = iBarShift(NULL, PERIOD_H4, iTime(NULL, PERIOD_W1, 0)) - 1;
   int    WeekClShift = iBarShift(NULL, PERIOD_W1, iTime(NULL, PERIOD_W1, 0)) + 0;
   double WeekOpPrice = iOpen(NULL, PERIOD_W1, WeekClShift); // this should be the close of the first at 4H bar in the first day (this from thomson reuters)
   double WeekClPrice = iClose(NULL, PERIOD_W1, WeekClShift);

   int    MonthClShift= iBarShift(NULL, PERIOD_MN1, iTime(NULL, PERIOD_MN1, 0)) + 0;
   double MonthOpPrice= iOpen(NULL, PERIOD_MN1, MonthClShift);
   double MonthClPrice= iClose(NULL, PERIOD_MN1, MonthClShift);

   color  FontColorDayPercentGain = Silver;
   color  FontColorWeekPercentGain = Silver;
   color  FontColorMonthPercentGain = Silver;
   

   string DailyInfo  = "Daily....: " + DoubleToStr(DayOpPrice, Digits) + "/" + DoubleToStr(DayClPrice, Digits) + " [" + DoubleToStr(MathPow(10, Digits)*MathAbs(DayClPrice-DayOpPrice), 0) + "|" + DoubleToStr(100*(MathAbs(DayClPrice-DayOpPrice)/DayOpPrice),2) + "%]";
   string WeeklyInfo = "Weekly...: " + DoubleToStr(WeekOpPrice, Digits) + "/" + DoubleToStr(WeekClPrice, Digits) + " [" + DoubleToStr(MathPow(10, Digits)*MathAbs(WeekClPrice-WeekOpPrice), 0) + "|" + DoubleToStr(100*(MathAbs(WeekClPrice-WeekOpPrice)/WeekOpPrice),2) + "%]";
   string MonthlyInfo= "Monthly..: " + DoubleToStr(MonthOpPrice, Digits) + "/" + DoubleToStr(MonthClPrice, Digits) + " [" + DoubleToStr(MathPow(10, Digits)*MathAbs(MonthClPrice-MonthOpPrice), 0) + "|" + DoubleToStr(100*(MathAbs(MonthClPrice-MonthOpPrice)/MonthOpPrice),2) + "%]";
   
   if ((DayClPrice - DayOpPrice) < 0 )
     FontColorDayPercentGain = FontMinus;
    else
     FontColorDayPercentGain = FontPlus;
    
   if ((WeekClPrice - WeekOpPrice) < 0)
     FontColorWeekPercentGain = FontMinus;
    else
     FontColorWeekPercentGain = FontPlus;
    
   if ((MonthClPrice - MonthOpPrice) < 0)
     FontColorMonthPercentGain = FontMinus;
    else
     FontColorMonthPercentGain = FontPlus;

//----
   if(ObjectFind("DailyStat") == -1) {
     SetUpTextObject("DailyStat"  ,  0);
     ObjectSetText("DailyStat", DailyInfo, FontSize, Font, FontColorDayPercentGain);
     } else {
     ObjectSetText("DailyStat", DailyInfo, FontSize, Font, FontColorDayPercentGain);
     }
   if(ObjectFind("WeeklyStat") == -1) {
     SetUpTextObject("WeeklyStat" , 10);
     ObjectSetText("WeeklyStat", WeeklyInfo, FontSize, Font, FontColorWeekPercentGain);
     } else {
     ObjectSetText("WeeklyStat", WeeklyInfo, FontSize, Font, FontColorWeekPercentGain);
     }
   if(ObjectFind("MonthlyStat") == -1) {
     SetUpTextObject("MonthlyStat", 20);
     ObjectSetText("MonthlyStat", MonthlyInfo, FontSize, Font, FontColorMonthPercentGain);
     } else {
     ObjectSetText("MonthlyStat", MonthlyInfo, FontSize, Font, FontColorMonthPercentGain);
     }
//----

   if(ShowPriceLabel) {
   SetUpPriceLabel("PL0.0"    , Gold, 1.000*DayOpPrice);
   SetUpPLText    ("0.0"      , Gold, 1.000*DayOpPrice);
   SetUpPriceLabel("PLUp50"   , Blue, 1.005*DayOpPrice); /* up   0.50% means 100.50% from opening price right :) */
   SetUpPLText    ("+0.5"     , Blue, 1.005*DayOpPrice);
   SetUpPriceLabel("PLDown50" ,  Red, 0.995*DayOpPrice); /* down 0.50% means  99.50% from opening price right :) */
   SetUpPLText    ("-0.5"     ,  Red, 0.995*DayOpPrice);
   SetUpPriceLabel("PLUp100"  , Blue, 1.010*DayOpPrice);  /* up   1.00% means 101.00% from opening price right :) */
   SetUpPLText    ("+1.0"     , Blue, 1.010*DayOpPrice);
   SetUpPriceLabel("PLDown100",  Red, 0.990*DayOpPrice);  /* down 1.00% means  99.00% from opening price right :) */
   SetUpPLText    ("-1.0"     ,  Red, 0.990*DayOpPrice);
   SetUpPriceLabel("PLUp150"  , Blue, 1.015*DayOpPrice);  /* up   1.50% means 101.50% from opening price right :) */
   SetUpPLText    ("+1.5"     , Blue, 1.015*DayOpPrice);
   SetUpPriceLabel("PLDown150",  Red, 0.985*DayOpPrice);  /* down 1.50% means  98.50% from opening price right :) */
   SetUpPLText    ("-1.5"     ,  Red, 0.985*DayOpPrice);
   SetUpPriceLabel("PLUp200"  , Blue, 1.020*DayOpPrice);  /* up   2.00% means 102.00% from opening price right :) */
   SetUpPLText    ("+2.0"     , Blue, 1.020*DayOpPrice);
   SetUpPriceLabel("PLDown200",  Red, 0.980*DayOpPrice);  /* down 2.00% means  98.00% from opening price right :) */
   SetUpPLText    ("-2.0"     ,  Red, 0.980*DayOpPrice);
   }
   
   return(0);
  }
  
void SetUpTextObject(string name, int offset)
  {
   ObjectDelete(name);
   ObjectCreate(name, OBJ_LABEL, 0, 0, 0);
   ObjectSet(name, OBJPROP_BACK, back);
   ObjectSet(name, OBJPROP_CORNER, corner);
   ObjectSet(name, OBJPROP_XDISTANCE, xdis);
   ObjectSet(name, OBJPROP_YDISTANCE, ydis + offset);
   GetLastError();  
  }

void SetUpPLText(string Name, color Color, double price)
  {
   ObjectDelete(Name);
   ObjectCreate(Name, OBJ_TEXT, 0, 0, 0);
   ObjectSet(Name, OBJPROP_BACK, back);
   ObjectSet(Name, OBJPROP_TIME1, Time[0]);
   ObjectSet(Name, OBJPROP_PRICE1, price); /* double price */
   ObjectSetText(Name, Name, 7, Font, Color);
   GetLastError();  
  }

void SetUpPriceLabel(string Name, color Color, double price)
  { 
   ObjectDelete(Name);
   ObjectCreate(Name, OBJ_ARROW, 0, 0, 0 );
   ObjectSet(Name, OBJPROP_ARROWCODE, SYMBOL_RIGHTPRICE);
   ObjectSet(Name, OBJPROP_COLOR, Color);
   ObjectSet(Name, OBJPROP_TIME1, Time[0]);
   ObjectSet(Name, OBJPROP_PRICE1, price); /* double price */
   GetLastError();
  }
//+------------------------------------------------------------------+  



Sample





Analysis



Market Information Used:

Series array that contains open prices of each bar
Series array that contains close prices for each bar
Series array that contains open time of each bar


Indicator Curves created:


Indicators Used:



Custom Indicators Used:

Order Management characteristics:

Other Features: