Money-Meter

Author: Money-Meter (by Transcendreamer)
Price Data Components
Series array that contains close prices for each bar
0 Views
0 Downloads
0 Favorites
Money-Meter
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright   "Money-Meter (by Transcendreamer)"
#property description "Chart evaluation in deposit currency"
#property strict
#property indicator_chart_window
#property indicator_plots 0
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
input double            grid_step_value=100;
input double            lot_size=0.1;
input double            lot_divider=1;
input double            total_levels=50;
input double            zero_price=0;
enum  PROGRESSION       {none,equal,linear,fibo,martin};
input PROGRESSION       progression=none;
input double            multiplicator=2;
input color             lines_color=clrMagenta;
input int               lines_width=1;
input ENUM_LINE_STYLE   lines_style=STYLE_SOLID;
input bool              lines_prices=false;
input int               text_shift_bars=0;
input ENUM_BASE_CORNER  info_corner=CORNER_LEFT_UPPER;
input int               info_shift_pixels=0;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {
   clean_all();
   make_grid();
   put_info();
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   clean_all();
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   return(rates_total);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void clean_all()
  {
   ObjectDelete(0,"INFOTEXT");
   for(int k=ObjectsTotal(0,0,OBJ_HLINE)-1; k>=0; k--)
     {
      string name=ObjectName(0,k,0,OBJ_HLINE);
      if(StringFind(name,"GRID_LEVEL_")!=-1)
         ObjectDelete(0,name);
     }
   for(int k=ObjectsTotal(0,0,OBJ_TEXT)-1; k>=0; k--)
     {
      string name=ObjectName(0,k,0,OBJ_TEXT);
      if(StringFind(name,"GRID_TEXT_")!=-1)
         ObjectDelete(0,name);
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void make_grid()
  {
   double ts=SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE);
   double tv=SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE);
   double step=grid_step_value/tv*ts/lot_size/lot_divider;
   double zero=zero_price?zero_price:iClose(NULL,0,0);
//---
   datetime time;
   if(text_shift_bars>=0)
      time=iTime(NULL,0,text_shift_bars);
   else
      time=iTime(NULL,0,0)-PeriodSeconds(PERIOD_CURRENT)*text_shift_bars;
//---
   put_level("GRID_LEVEL_ZERO",zero,"(ZERO)");
   put_text("GRID_TEXT_ZERO",zero,time,"(ZERO)");
   for(int n=1; n<=total_levels; n++)
     {
      double value=grid_step_value*get_progression(n);
      string text=DoubleToString(value,2);
      put_level("GRID_LEVEL_UP"+string(n),zero+step*n,"+"+text);
      put_level("GRID_LEVEL_DN"+string(n),zero-step*n,"-"+text);
      put_text("GRID_TEXT_UP"+string(n),zero+step*n,time,"+"+text);
      put_text("GRID_TEXT_DN"+string(n),zero-step*n,time,"-"+text);
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double get_progression(int n)
  {
   if(progression==none) return(n);
   double sum=0;
   for(int k=1; k<=n; k++)
      sum+=(n-k+1)*get_member(k);
   return(sum);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double get_member(int k)
  {
   if(progression==equal)
     {
      return(1);
     }
   else if(progression==fibo)
     {
      if(k<3) return(1);
      int f=1,s=1;
      while(k>2) { f=f+s*2; s=f-s; f=f-s; k--; }
      return(s);
     }
   else if(progression==martin)
     {
      return(MathPow(multiplicator,k-1));
     }
   else if(progression==linear)
     {
      return(k);
     }
   return(1);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void put_info()
  {
   ObjectCreate(0,"INFOTEXT",OBJ_LABEL,0,0,0);
   ObjectSetInteger(0,"INFOTEXT",OBJPROP_XDISTANCE,5);
   ObjectSetInteger(0,"INFOTEXT",OBJPROP_YDISTANCE,17+info_shift_pixels);
   ObjectSetInteger(0,"INFOTEXT",OBJPROP_SELECTABLE,false);
   ObjectSetInteger(0,"INFOTEXT",OBJPROP_SELECTED,false);
//---
   ENUM_ANCHOR_POINT anchor=0;
   if(info_corner==CORNER_LEFT_LOWER) anchor=ANCHOR_LEFT_LOWER;
   if(info_corner==CORNER_LEFT_UPPER) anchor=ANCHOR_LEFT_UPPER;
   if(info_corner==CORNER_RIGHT_LOWER) anchor=ANCHOR_RIGHT_LOWER;
   if(info_corner==CORNER_RIGHT_UPPER) anchor=ANCHOR_RIGHT_UPPER;
   ObjectSetInteger(0,"INFOTEXT",OBJPROP_CORNER,info_corner);
   ObjectSetInteger(0,"INFOTEXT",OBJPROP_ANCHOR,anchor);
//---
   string text="LOT:"+DoubleToString(lot_size/lot_divider,2);
   if(progression==none)   text+=("  MODE:NONE");
   if(progression==equal)  text+=("  MODE:EQUAL");
   if(progression==linear) text+=("  MODE:LINEAR");
   if(progression==fibo)   text+=("  MODE:FIBO");
   if(progression==martin) text+=("  MODE:MARTIN *"+DoubleToString(multiplicator,2));
   ObjectSetString(0,"INFOTEXT",OBJPROP_TEXT,text);
   ObjectSetString(0,"INFOTEXT",OBJPROP_FONT,"Verdana");
   ObjectSetInteger(0,"INFOTEXT",OBJPROP_COLOR,lines_color);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void put_level(string name,double price,string text)
  {
   ObjectCreate(0,name,OBJ_HLINE,0,0,0);
   ObjectSetDouble(0,name,OBJPROP_PRICE,price);
   ObjectSetInteger(0,name,OBJPROP_COLOR,lines_color);
   ObjectSetInteger(0,name,OBJPROP_WIDTH,lines_width);
   ObjectSetInteger(0,name,OBJPROP_STYLE,lines_style);
   ObjectSetInteger(0,name,OBJPROP_SELECTABLE,false);
   ObjectSetInteger(0,name,OBJPROP_SELECTED,false);
   ObjectSetInteger(0,name,OBJPROP_BACK,!lines_prices);
   ObjectSetString(0,name,OBJPROP_TEXT,text);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void put_text(string name,double price,datetime time,string text)
  {
   ObjectCreate(0,name,OBJ_TEXT,0,0,0);
   ObjectSetDouble(0,name,OBJPROP_PRICE,price);
   ObjectSetInteger(0,name,OBJPROP_TIME,0,time);
   ObjectSetString(0,name,OBJPROP_TEXT,text);
   ObjectSetString(0,name,OBJPROP_FONT,"Verdana");
   ObjectSetInteger(0,name,OBJPROP_COLOR,lines_color);
   ObjectSetInteger(0,name,OBJPROP_FONTSIZE,8);
   ObjectSetInteger(0,name,OBJPROP_ANCHOR,ANCHOR_RIGHT_UPPER);
   ObjectSetInteger(0,name,OBJPROP_SELECTABLE,false);
   ObjectSetInteger(0,name,OBJPROP_SELECTED,false);
  }
//+------------------------------------------------------------------+

Comments