Pivot_Mid_Support_Historical2

Author: Copyright � 2005, MetaQuotes Software Corp.
Pivot_Mid_Support_Historical2
Price Data Components
Series array that contains open time of each bar
Miscellaneous
Implements a curve of type %1It issuies visual alerts to the screen
0 Views
0 Downloads
0 Favorites
Pivot_Mid_Support_Historical2
//+------------------------------------------------------------------+
//|                              Pivot Mid Support Historical_V1.mq4 |
//|                      Copyright © 2005, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//| Modified to chart historical camarilla pivots by MrPip           |
//| 3/28/06 Fixed problem of Sunday/Monday pivots                    |
//|         and added some ideas from goodtiding5 (Kenneth Z.)       |
//| Modified from Cam historical to plot Mid pivots by Tradex4x      |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1 Blue
#property indicator_color2 Blue
#property indicator_color3 Blue
#property indicator_color4 Blue

//---- input parameters

extern int  GMTshift=0;
extern color LColor = Blue;
extern int fontsize=8;
extern int LabelShift=13;
extern int DaysDrawBack=15;
extern bool DisplayCurrentLines = true;


double MS1Buffer[];
double MS2Buffer[];
double MS3Buffer[];
double MS4Buffer[];

double MS1, MS2, MS3, MS4, P, S1, S2, S3, S4;

double prev_high=0;
double prev_low=0;
double prev_close=0;
double cur_day=0;
double prev_day=0;
double day_high=0;
double day_low=0;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   IndicatorBuffers(4);
//---- indicators
   SetIndexStyle(0,DRAW_LINE, STYLE_DOT);
   SetIndexBuffer(0,MS1Buffer);
   SetIndexStyle(1,DRAW_LINE, STYLE_DOT);
   SetIndexBuffer(1,MS2Buffer);
   SetIndexStyle(2,DRAW_LINE, STYLE_DOT);
   SetIndexBuffer(2,MS3Buffer);
   SetIndexStyle(3,DRAW_LINE, STYLE_DOT);
   SetIndexBuffer(3,MS4Buffer);
   
   SetIndexLabel(0,"MS1");
   SetIndexLabel(1,"MS2");
   SetIndexLabel(2,"MS3");
   SetIndexLabel(3,"MS4");

   
//----
//   IndicatorShortName("Mid Pivots");
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//---- TODO: add your code here
   ObjectDelete("SupMS1");
   ObjectDelete("SupMS2");
   ObjectDelete("SupMS3");
   ObjectDelete("SupMS4");
   ObjectDelete("SupMS1Line");
   ObjectDelete("SupMS2Line");
   ObjectDelete("SupMS3Line");
   ObjectDelete("SupMS4Line");

//----
   return(0);
  }

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    counted_bars=DaysDrawBack*1440/Period();
   int cnt, limit;

//---- exit if period is greater than 4 hr charts
   if(Period() > 240)
   {
      Alert("Error - Chart period is greater than 4 Hr.");
      return(-1); // then exit
   }
   if(counted_bars<0) return(-1);

//---- last counted bar will be recounted
//   if(counted_bars>0) counted_bars--;

//   limit=(Bars-counted_bars)-1;
   limit=counted_bars;

//---- Get new daily prices & calculate pivots

   for (cnt=limit;cnt >=0;cnt--)
   {
   	if (TimeDayOfWeek(Time[cnt]) == 0)
	   {
        cur_day = prev_day;
	   }
	   else
	   {
        cur_day = TimeDay(Time[cnt]- (GMTshift*3600));
	   }
	   
   	if (prev_day != cur_day)
   	{
	   	prev_close = Close[cnt+1];
		   prev_high = day_high;
		   prev_low = day_low;

	      day_high = High[cnt];
 	      day_low  = Low[cnt];


P  = (prev_high+prev_low+prev_close)/3;
S1 = (2*P)-prev_high;
S2 = P-(prev_high-prev_low);
S3 = P-2*(prev_high-prev_low);
S4 = P-3*(prev_high-prev_low);
MS1 = (P+S1)/2;
MS2 = (S1+S2)/2;
MS3 = (S2+S3)/2;
MS4 = (S3+S4)/2;

		   prev_day = cur_day;
	   }
      if (High[cnt]>day_high)
      {
         day_high = High[cnt];
      }
      if (Low[cnt]<day_low)
      {
         day_low = Low[cnt];
      }
      
      
      
//         day_low=Open[cnt]; day_high=Open[cnt];
      
      

//---  Draw  Pivot lines on chart

      MS1Buffer[cnt]=MS1;
      MS2Buffer[cnt]=MS2;
      MS3Buffer[cnt]=MS3;
      MS4Buffer[cnt]=MS4;
      
   }

   if (cur_day == TimeDay(CurTime()))   DisplayLabels();
//----
   return(0);
  }

void DisplayLabels()
{
      
      SetLabel("SupMS1", "MS0.5", MS1, LColor, LabelShift);
      SetLabel("SupMS2", "MS1.5", MS2, LColor, LabelShift);
      SetLabel("SupMS3", "MS2.5", MS3, LColor, LabelShift);
      SetLabel("SupMS4", "MS3.5", MS4, LColor, LabelShift);

// Display Current Lines

     if (DisplayCurrentLines)
     {
      SetLine("SupMS1Line", MS1, LColor);
      SetLine("SupMS2Line", MS2, LColor);
      SetLine("SupMS3Line", MS3, LColor);
      SetLine("SupMS4Line", MS4, LColor);
     }
}  

// put a label on the line   
void SetLabel(string textname, string text, double level, color col1, int LabelShift)
{
   double myLevel;
   int digits = MarketInfo(Symbol(), MODE_DIGITS);
   
   myLevel = NormalizeDouble(level, digits);
   
   

      if(ObjectFind(textname) != 0)
      {
      ObjectCreate(textname, OBJ_TEXT, 0, Time[LabelShift], myLevel);
      ObjectSetText(textname, "                                                 " + text + "   " + DoubleToStr(myLevel, digits), fontsize,"Arial",col1);
      }
      else
      {
         ObjectSetText(textname, "                                                 " + text + "   " + DoubleToStr(myLevel, digits), fontsize,"Arial",col1);
         ObjectMove(textname, 0, Time[LabelShift],myLevel);
      }
}
      
// create or move the horizontal line   
void SetLine(string linename, double level, color col1)
{

      if(ObjectFind(linename) != 0)
      {
      ObjectCreate(linename, OBJ_TREND, 0, Time[1], level, Time[0], level);
//      ObjectSet(linename, OBJPROP_STYLE, STYLE_DASHDOTDOT);
      ObjectSet(linename, OBJPROP_STYLE, STYLE_DASHDOTDOT);
      ObjectSet(linename, OBJPROP_COLOR, col1);
      ObjectSet(linename, OBJPROP_WIDTH, 1);
      }
      else
      {
      ObjectMove(linename, 1, Time[0], level);
      ObjectMove(linename, 0, Time[1], level);
      }
      

/*      if(ObjectFind("SupMS1") != 0)
      {
      ObjectCreate("SupMS1", OBJ_TEXT, 0, 0, MS1);
      ObjectSetText("SupMS1", "      MS0.5",fontsize,"Arial",LColor);
      }
      else
      {
         ObjectMove("SupMS1", 0, Time[LabelShift],MS1);
      }
      
      if(ObjectFind("SupMS2") != 0)
      {
      ObjectCreate("SupMS2", OBJ_TEXT, 0, 0, 0);
      ObjectSetText("SupMS2", "      MS1.5",fontsize,"Arial",LColor);
      }
      else
      {
         ObjectMove("SupMS2", 0, Time[LabelShift],MS2);
      }
      
      if(ObjectFind("SupMS3") != 0)
      {
      ObjectCreate("SupMS3", OBJ_TEXT, 0, 0, 0);
      ObjectSetText("SupMS3", "      MS2.5",fontsize,"Arial",LColor);
      }
      else
      {
         ObjectMove("SupMS3", 0, Time[LabelShift],MS3);
      }
      
      if(ObjectFind("SupMS4") != 0)
      {
      ObjectCreate("SupMS4", OBJ_TEXT, 0, 0, 0);
      ObjectSetText("SupMS4", "      MS3.5",fontsize,"Arial",LColor);
      }
      else
      {
         ObjectMove("SupMS4", 0, Time[LabelShift],MS4);
      }      
*/


}
//+------------------------------------------------------------------+

Comments

Markdown supported. Formatting help

Markdown Formatting Guide

Element Markdown Syntax
Heading # H1
## H2
### H3
Bold **bold text**
Italic *italicized text*
Link [title](https://www.example.com)
Image ![alt text](image.jpg)
Code `code`
Code Block ```
code block
```
Quote > blockquote
Unordered List - Item 1
- Item 2
Ordered List 1. First item
2. Second item
Horizontal Rule ---