OverLayChart-MA

Author: Copyright� 2006 S.B.T.
OverLayChart-MA
Price Data Components
Series array that contains the lowest prices of each barSeries array that contains the highest prices of each barSeries array that contains open prices of each barSeries array that contains close prices for each bar
Miscellaneous
Implements a curve of type %1
0 Views
0 Downloads
0 Favorites
OverLayChart-MA
//+------------------------------------------------------------------+
//|                                       OverLay Chart.mq4 Ver.1.10 |
//|                                      Copyright© 2006-2007 S.B.T. |
//|                                     http://sufx.core.t3-ism.net/ |
//+------------------- DO NOT REMOVE THIS HEADER --------------------+
//|  This script is free to use/distribute/modify and re-distribute. |
//|                                  (Limited to noncommercial use.) |
//+------------------------------------------------------------------+

//Indicator Properties
#property copyright "Copyright© 2006 S.B.T."
#property link      "http://sufx.core.t3-ism.net/"
#property indicator_chart_window
#property indicator_buffers 5


//Indicator Parameters
extern string SubSymbol = "USDCHFm";
extern color BullBarColor = MediumSeaGreen;
extern color BearBarColor = Orange;
extern color GridColor = Black;
extern bool Mirroring = false;

extern bool ShowCandles = true;
extern bool ShowMA = true;

extern color MA_color = CornflowerBlue;
extern int MA_line_height = 2;
extern string MA_price = "Close";

//Global Variables
string Prefix; //Indicator Prefix
int Grid = 10; //Grid Lines
int SnapPips = 10;  //Snap Pips For Grid Lines


//Indicator Buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
double ExtMapBuffer3[];
double ExtMapBuffer4[];
double MA[];


//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init() {

   //Initialize Indexes
   Prefix = "OverLayChart" + SubSymbol;

   IndicatorShortName( "OverLay Chart( " + SubSymbol + " )" );

   SetIndexBuffer( 0, ExtMapBuffer1 );
   SetIndexBuffer( 1, ExtMapBuffer2 );
   SetIndexBuffer( 2, ExtMapBuffer3 );
   SetIndexBuffer( 3, ExtMapBuffer4 );
   SetIndexBuffer(4,MA);
   
   if (ShowCandles == true) {
      SetIndexStyle( 0, DRAW_HISTOGRAM, DRAW_LINE, 1, BullBarColor );
      SetIndexStyle( 1, DRAW_HISTOGRAM, DRAW_LINE, 1, BearBarColor );
      SetIndexStyle ( 2, DRAW_HISTOGRAM, DRAW_LINE, 3, BullBarColor );
      SetIndexStyle( 3, DRAW_HISTOGRAM, DRAW_LINE, 3, BearBarColor );
   } else {
      SetIndexStyle( 0, DRAW_NONE, DRAW_NONE, 1, BullBarColor );
      SetIndexStyle( 1, DRAW_NONE, DRAW_NONE, 1, BearBarColor );
      SetIndexStyle ( 2, DRAW_NONE, DRAW_NONE, 3, BullBarColor );
      SetIndexStyle( 3, DRAW_NONE, DRAW_NONE, 3, BearBarColor );
   }
   if (ShowMA == true) {
      SetIndexStyle( 4, DRAW_LINE, DRAW_LINE, MA_line_height, MA_color );
   } else {
      SetIndexStyle( 4, DRAW_NONE, DRAW_NONE, MA_line_height, MA_color );
   }

   SetIndexEmptyValue( 0, 0.0 );
   SetIndexEmptyValue( 1, 0.0 );
   SetIndexEmptyValue( 2, 0.0 );
   SetIndexEmptyValue( 3, 0.0 );
   SetIndexEmptyValue(4,0.0);


   return( 0 );
}



//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit() {
   int _i;
   
   

   //Delete Objects
	ObjectDelete( Prefix + "Status" );
	ObjectDelete( Prefix + "Copyright" );

	for ( _i = 1; _i <= Grid ; _i ++ ) {
   	ObjectDelete( Prefix + "Grid" + _i );
   	ObjectDelete( Prefix + "Price" + _i );
   }


   return( 0 );
}



//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start() {
   int _BarsCount;
   double _CurRangeHigh, _CurRangeLow, _CurRangeCenter;
   double _SubRangeHigh, _SubRangeLow, _SubRangeCenter;
   double _SubPoint, _SubDigit;
   double _SubOpen, _SubHigh, _SubLow, _SubClose;
   double _PipsRatio;
   double _GridPips, _GridPrice;
   int _i;



   //Initialize Buffers
	RefreshRates();

   ArrayInitialize( ExtMapBuffer1, 0.0 );
   ArrayInitialize( ExtMapBuffer2, 0.0 );
   ArrayInitialize( ExtMapBuffer3, 0.0 );
   ArrayInitialize( ExtMapBuffer4, 0.0 );
   ArrayInitialize(MA,0.0);


   //Calculate Visible Bars
   _BarsCount = BarsPerWindow() + 1;
   int _FirstBar = FirstVisibleBar();
   int _LastBar = _FirstBar - _BarsCount + 1;
   if ( _LastBar < 0 ) {
      _LastBar = 0;
      _BarsCount = _FirstBar + 1;
   }


   //Calculate Chart Ratio
   _CurRangeHigh = High[Highest(NULL, 0, MODE_HIGH, _BarsCount, _LastBar)];
   _CurRangeLow = Low[Lowest(NULL, 0, MODE_LOW, _BarsCount, _LastBar)];
   _CurRangeCenter = ( _CurRangeHigh + _CurRangeLow ) / 2;

   if ( Mirroring ) {
      _SubRangeHigh = iLow( SubSymbol, 0, Lowest( SubSymbol, 0, MODE_LOW, _BarsCount, _LastBar ) );
      _SubRangeLow = iHigh( SubSymbol, 0, Highest( SubSymbol, 0, MODE_HIGH, _BarsCount, _LastBar ) );
   } else {
      _SubRangeHigh = iHigh( SubSymbol, 0, Highest( SubSymbol, 0, MODE_HIGH, _BarsCount, _LastBar ) );
      _SubRangeLow = iLow( SubSymbol, 0, Lowest( SubSymbol, 0, MODE_LOW, _BarsCount, _LastBar ) );
   }

   _SubRangeCenter = ( _SubRangeHigh + _SubRangeLow ) / 2;
   _SubPoint = MarketInfo( SubSymbol, MODE_POINT );
   _SubDigit = MarketInfo( SubSymbol, MODE_DIGITS );

   _PipsRatio = ( _CurRangeHigh - _CurRangeLow )  / ( _SubRangeHigh - _SubRangeLow );

   _GridPips = ( _SubRangeHigh - _SubRangeLow ) / Grid;
   _GridPips = MathRound( ( _SubRangeHigh - _SubRangeLow ) / Grid / ( _SubPoint * SnapPips ) ) * ( _SubPoint * SnapPips );


   //Draw Candlesticks
	for ( _i = _LastBar; _i < _LastBar + _BarsCount; _i ++ ) {
      _SubOpen = iOpen( SubSymbol, 0, _i ) - _SubRangeCenter;
      _SubHigh = iHigh( SubSymbol, 0, _i ) - _SubRangeCenter;
      _SubLow = iLow( SubSymbol, 0, _i ) - _SubRangeCenter;
      _SubClose = iClose( SubSymbol, 0, _i ) - _SubRangeCenter;

      if ( Mirroring ) {
         if ( _SubOpen < _SubClose ) {
            ExtMapBuffer2[_i] = _CurRangeCenter + _SubHigh * _PipsRatio;
            ExtMapBuffer1[_i] = _CurRangeCenter + _SubLow * _PipsRatio;
         } else {
            ExtMapBuffer2[_i] = _CurRangeCenter + _SubLow * _PipsRatio;
            ExtMapBuffer1[_i] = _CurRangeCenter + _SubHigh * _PipsRatio;
         }

         ExtMapBuffer4[_i] = _CurRangeCenter + _SubClose * _PipsRatio;
         ExtMapBuffer3[_i] = _CurRangeCenter + _SubOpen * _PipsRatio;
      } else {
         if ( _SubOpen < _SubClose ) {
            ExtMapBuffer1[_i] = _CurRangeCenter + _SubHigh * _PipsRatio;
            ExtMapBuffer2[_i] = _CurRangeCenter + _SubLow * _PipsRatio;
         } else {
            ExtMapBuffer1[_i] = _CurRangeCenter + _SubLow * _PipsRatio;
            ExtMapBuffer2[_i] = _CurRangeCenter + _SubHigh * _PipsRatio;
         }
         ExtMapBuffer3[_i] = _CurRangeCenter + _SubClose * _PipsRatio;
         ExtMapBuffer4[_i] = _CurRangeCenter + _SubOpen * _PipsRatio;
      }
      
      if (StringChangeToUpperCase(MA_price) == "CLOSE") {
         MA[_i] = _CurRangeCenter + _SubClose * _PipsRatio;
      } else if (StringChangeToUpperCase(MA_price) == "OPEN") {
         MA[_i] = _CurRangeCenter + _SubOpen * _PipsRatio;
      } else if (StringChangeToUpperCase(MA_price) == "HIGH") {
         MA[_i] = _CurRangeCenter + _SubHigh * _PipsRatio;
      } else {
         MA[_i] = _CurRangeCenter + _SubLow * _PipsRatio;
      }
   }


   //Draw Objects
   ObjectCreate( Prefix + "Copyright", OBJ_LABEL, 0, 0, 0 );
	ObjectSet( Prefix + "Copyright", OBJPROP_COLOR, GridColor );
   ObjectSet( Prefix + "Copyright", OBJPROP_CORNER, 3 );
   ObjectSet( Prefix + "Copyright", OBJPROP_XDISTANCE, 4 );
   ObjectSet( Prefix + "Copyright", OBJPROP_YDISTANCE, 4 );
   ObjectSetText( Prefix + "Copyright", "OverLay Chart by S.B.T./MA by LEGRUPO", 8 );

   ObjectCreate( Prefix + "Status", OBJ_LABEL, 0, 0, 0 );
	ObjectSet( Prefix + "Status", OBJPROP_COLOR, GridColor );
   ObjectSet( Prefix + "Status", OBJPROP_CORNER, 0 );
   ObjectSet( Prefix + "Status", OBJPROP_XDISTANCE, 4 );
   ObjectSet( Prefix + "Status", OBJPROP_YDISTANCE, 16 );
   ObjectSetText( Prefix + "Status",
                  SubSymbol + " O = " + DoubleToStr( iOpen( SubSymbol, 0, _LastBar ), _SubDigit ) +
                  ", H = " + DoubleToStr( iHigh( SubSymbol, 0, _LastBar ), _SubDigit ) +
                  ", L = " + DoubleToStr( iLow( SubSymbol, 0, _LastBar ), _SubDigit ) +
                  ", C = " + DoubleToStr( iClose( SubSymbol, 0, _LastBar ), _SubDigit ),
                  8 );

	for ( _i = 1; _i <= Grid ; _i ++ ) {
      _GridPrice = MathRound( _SubRangeCenter / ( _SubPoint * SnapPips ) ) * ( _SubPoint * SnapPips );
      _GridPrice = ( ( _GridPrice + _GridPips / 2 ) + _GridPips * ( Grid / 2 - 1 ) ) - ( _GridPips * ( _i - 1 ) );

		ObjectCreate( Prefix + "Grid" + _i, OBJ_TREND, 0, 0, 0 );
      ObjectSet( Prefix + "Grid" + _i, OBJPROP_TIME1, Time[_FirstBar] );
      ObjectSet( Prefix + "Grid" + _i, OBJPROP_PRICE1, _CurRangeCenter + ( _GridPrice - _SubRangeCenter ) * _PipsRatio );
      ObjectSet( Prefix + "Grid" + _i, OBJPROP_TIME2, Time[_LastBar] );
      ObjectSet( Prefix + "Grid" + _i, OBJPROP_PRICE2, _CurRangeCenter + ( _GridPrice - _SubRangeCenter ) * _PipsRatio );
		ObjectSet( Prefix + "Grid" + _i, OBJPROP_COLOR, GridColor );
		ObjectSet( Prefix + "Grid" + _i, OBJPROP_STYLE, STYLE_DOT );
		ObjectSet( Prefix + "Grid" + _i, OBJPROP_WIDTH, 1 );
		ObjectSet( Prefix + "Grid" + _i, OBJPROP_RAY, true );

		ObjectCreate( Prefix + "Price" + _i, OBJ_TEXT, 0, 0, 0 );
      ObjectSet( Prefix + "Price" + _i, OBJPROP_TIME1, Time[_FirstBar - _BarsCount / 10] );
      ObjectSet( Prefix + "Price" + _i, OBJPROP_PRICE1, _CurRangeCenter + ( _GridPrice - _SubRangeCenter ) * _PipsRatio );
		ObjectSet( Prefix + "Price" + _i, OBJPROP_COLOR, GridColor );
      ObjectSetText( Prefix + "Price" + _i, DoubleToStr( _GridPrice, _SubDigit ), 8 );
   }


   return( 0 );
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Function..: StringChangeToUpperCase                              |
//| Example...: StringChangeToUpperCase("oNe mAn"); // ONE MAN       |
//+------------------------------------------------------------------+
string StringChangeToUpperCase(string sText) {
  int iLen=StringLen(sText), i, iChar;

  for(i=0; i < iLen; i++) {
    iChar=StringGetChar(sText, i);
    if(iChar >= 97 && iChar <= 122) sText=StringSetChar(sText, i, iChar-32);
  }
  return(sText);
}
//+------------------------------------------------------------------+

Comments