20090717_SupportEX_v.3

Download script
Author: �.���������.�
20090717_SupportEX_v.3

This script is designed to automatically visualize key price levels from different timeframes directly on your trading chart. Instead of forcing you to manually calculate or track historical data, it identifies and draws horizontal visual markers for Daily, Weekly, and Monthly periods.

Core Functionality

The logic works by scanning historical data and identifying four specific price points for each timeframe: Open, Close, High, and Low. It then renders these as distinct horizontal lines on your chart so you can see how current price action relates to significant past milestones.

Key Features and Visual Logic

  • Multi-Timeframe Coverage:

    • Daily (D): Tracks the opening and closing prices of each day, along with the high and low boundaries.
    • Weekly (W): Identifies the same milestones for every week.
    • Monthly (MN): Marks the significant levels for every month.
  • Visual Differentiation: To keep the chart readable, the script uses different styles for different types of data:

    • Open vs. Close: The "Close" price is highlighted with a thicker line to give it more visual prominence compared to the "Open" price.
    • High and Low Points: These are rendered as dotted lines rather than solid ones, allowing you to see the "range" of previous periods without cluttering the main view.
    • Color Coding: The script assigns unique colors to each timeframe (e.g., Red for Monthly, Gold for Weekly, and Green for Daily) to help you distinguish between them at a glance.
  • Automatic Labeling: Each line drawn on the chart is automatically labeled with its specific price value. This eliminates the guesswork of identifying a line's exact price point, as the numbers are printed directly next to the markers.

User Experience Summary

Essentially, this tool acts as an automated "historical map." By looking at your chart, you can instantly see where yesterday's high was, where last week's price closed, or what the significant levels were for the previous month. It transforms raw historical data into a clean, organized visual layout, helping you identify potential support and resistance zones based on previous market activity.

Price Data Components
Series array that contains open time of each barSeries array that contains open prices of each barSeries array that contains open prices of each barSeries array that contains close prices for each barSeries array that contains close prices for each barSeries array that contains the highest prices of each barSeries array that contains the highest prices of each barSeries array that contains the lowest prices of each barSeries array that contains the lowest prices of each bar
15 Views
0 Downloads
0 Favorites
20090717_SupportEX_v.3
//+------------------------------------------------------------------+
//|                                                    SupportEX.mq4 |
//|                                                    Ø.Àëåêñàíäð. |
//|                                              shestovav@gmail.com |
//+------------------------------------------------------------------+
#property copyright "Ø.Àëåêñàíäð.Â"
#property link      "shestovav@gmail.com"

#property indicator_chart_window
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
extern int äðîáü = 5;
//---
extern bool Äåíü = true;
extern bool Íåäåëÿ = true;
extern bool Ìåñÿö = true;
//---
extern bool OC = true;
extern bool HL = true;
//---

extern color cMN = Red;
extern color cW1 = Gold;
extern color cD1 = Green;

datetime TimeBegin, TimeEnd;

int d,w,mn;
int tD=0,tW=0,tMN=0;
int D=1,W=1,MN=1;


string   D0 = " DO ";
string   DC = " DC ";
string   DH = " DH ";
string   DL = " DL ";

string   W0 = " W0 ";
string   WC = " WC ";
string   WH = " WH ";
string   WL = " WL ";

string   MN0 = " MN0 ";
string   MNC = " MNC ";
string   MNH = " MNH ";
string   MNL = " MNL ";

int deinit()
  {
//----
ObjectsDeleteAll(0, OBJ_TREND);  
//----
   return(0);
  }

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
{

   int limit;
   int counted_bars=IndicatorCounted();
   
   if(counted_bars<0) return(-1);

   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;

   for(int i=limit; i>=0; i--)
   {
     if(Äåíü)
         {
               d++;
               TimeBegin = iTime(NULL,PERIOD_D1,tD);
               TimeEnd = (TimeBegin + 86400);
         
               double D1_Open  =iOpen(NULL,PERIOD_D1,D);
               double D1_Close =iClose(NULL,PERIOD_D1,D);
               double D1_High  =iHigh(NULL,PERIOD_D1,D);
               double D1_Low   =iLow(NULL,PERIOD_D1,D);

               if(OC){
               ObjectCreate (D0+d,OBJ_TREND, 0, 0,0, 0,0,0,0);
               ObjectSet (D0+d,OBJPROP_RAY,false);
               ObjectSet (D0+d,OBJPROP_TIME1, TimeBegin);
               ObjectSet (D0+d,OBJPROP_PRICE1, D1_Open);
               ObjectSet (D0+d,OBJPROP_TIME2, TimeEnd);
               ObjectSet (D0+d,OBJPROP_PRICE2, D1_Open);
               ObjectSet (D0+d,OBJPROP_COLOR,cD1); // èçìåíÿåì öâåò ëèíèè
               ObjectSet (D0+d,OBJPROP_WIDTH,1); // òåïåðü ëèíèÿ áóäåò òîëùèíîé â 3 ïèêñåëÿ
               ObjectSet (D0+d,OBJPROP_STYLE,STYLE_SOLID); // òåïåðü íèæíÿÿ ëèíèÿ áóäåò ïóíêòèðíîé
               ObjectSetText(D0+d,D0+DoubleToStr(D1_Open,äðîáü),10);  
         
               ObjectCreate (DC+d, OBJ_TREND, 0, 0,0, 0,0,0,0);
               ObjectSet (DC+d,OBJPROP_RAY,false);
               ObjectSet (DC+d, OBJPROP_TIME1,TimeBegin);
               ObjectSet (DC+d, OBJPROP_PRICE1, D1_Close);
               ObjectSet (DC+d, OBJPROP_TIME2, TimeEnd);
               ObjectSet (DC+d, OBJPROP_PRICE2, D1_Close);
               ObjectSet (DC+d,OBJPROP_COLOR,cD1); // èçìåíÿåì öâåò ëèíèè
               ObjectSet (DC+d,OBJPROP_WIDTH,3); // òåïåðü ëèíèÿ áóäåò òîëùèíîé â 3 ïèêñåëÿ
               ObjectSet (DC+d,OBJPROP_STYLE,STYLE_SOLID); // òåïåðü íèæíÿÿ ëèíèÿ áóäåò ïóíêòèðíîé
               ObjectSetText(DC+d,DC+DoubleToStr(D1_Close,äðîáü),10);} 
               if(HL){
               ObjectCreate (DH+d, OBJ_TREND, 0, 0,0, 0,0,0,0);
               ObjectSet (DH+d,OBJPROP_RAY,false);
               ObjectSet (DH+d, OBJPROP_TIME1, TimeBegin);
               ObjectSet (DH+d, OBJPROP_PRICE1, D1_High);
               ObjectSet (DH+d, OBJPROP_TIME2, TimeEnd);
               ObjectSet (DH+d, OBJPROP_PRICE2, D1_High);
               ObjectSet (DH+d,OBJPROP_COLOR,cD1); // èçìåíÿåì öâåò ëèíèè
               ObjectSet (DH+d,OBJPROP_WIDTH,1); // òåïåðü ëèíèÿ áóäåò òîëùèíîé â 3 ïèêñåëÿ
               ObjectSet (DH+d,OBJPROP_STYLE,STYLE_DOT); // òåïåðü íèæíÿÿ ëèíèÿ áóäåò ïóíêòèðíîé  
               ObjectSetText(DH+d,DH+DoubleToStr(D1_High,äðîáü),10);  
         
               ObjectCreate (DL+d, OBJ_TREND, 0, 0,0, 0,0,0,0);
               ObjectSet (DL+d,OBJPROP_RAY,false);
               ObjectSet (DL+d, OBJPROP_TIME1,TimeBegin);
               ObjectSet (DL+d, OBJPROP_PRICE1, D1_Low);
               ObjectSet (DL+d, OBJPROP_TIME2, TimeEnd);
               ObjectSet (DL+d, OBJPROP_PRICE2, D1_Low);
               ObjectSet (DL+d,OBJPROP_COLOR,cD1); // èçìåíÿåì öâåò ëèíèè
               ObjectSet (DL+d,OBJPROP_WIDTH,1); // òåïåðü ëèíèÿ áóäåò òîëùèíîé â 3 ïèêñåëÿ
               ObjectSet (DL+d,OBJPROP_STYLE,STYLE_DOT); // òåïåðü íèæíÿÿ ëèíèÿ áóäåò ïóíêòèðíîé
               ObjectSetText(DL+d,DL+DoubleToStr(D1_Low,äðîáü),10);}
         
               tD++;
               D++;
         }
     
     if(Íåäåëÿ)
         {
               w++;
               TimeBegin = iTime(NULL,PERIOD_W1,tW);
               TimeEnd = (TimeBegin + 518400);
         
               double W1_Open  =iOpen(NULL,PERIOD_W1,W);
               double W1_Close =iClose(NULL,PERIOD_W1,W);
               double W1_High  =iHigh(NULL,PERIOD_W1,W);
               double W1_Low   =iLow(NULL,PERIOD_W1,W);
               
               if(OC){
               ObjectCreate (W0+w, OBJ_TREND, 0, 0,0, 0,0,0,0);
               ObjectSet (W0+w,OBJPROP_RAY,false);
               ObjectSet (W0+w, OBJPROP_TIME1, TimeBegin);
               ObjectSet (W0+w, OBJPROP_PRICE1, W1_Open);
               ObjectSet (W0+w, OBJPROP_TIME2, TimeEnd);
               ObjectSet (W0+w, OBJPROP_PRICE2, W1_Open);
               ObjectSet (W0+w,OBJPROP_COLOR,cW1); // èçìåíÿåì öâåò ëèíèè
               ObjectSet (W0+w,OBJPROP_WIDTH,1); // òåïåðü ëèíèÿ áóäåò òîëùèíîé â 3 ïèêñåëÿ
               ObjectSet (W0+w,OBJPROP_STYLE,STYLE_SOLID); // òåïåðü íèæíÿÿ ëèíèÿ áóäåò ïóíêòèðíîé
               ObjectSetText(W0+w,"                   "+W0+DoubleToStr(W1_Open,äðîáü),10);   
         
               ObjectCreate (WC+w, OBJ_TREND, 0, 0,0, 0,0,0,0);
               ObjectSet (WC+w,OBJPROP_RAY,false);
               ObjectSet (WC+w, OBJPROP_TIME1, TimeBegin);
               ObjectSet (WC+w, OBJPROP_PRICE1, W1_Close);
               ObjectSet (WC+w, OBJPROP_TIME2, TimeEnd);
               ObjectSet (WC+w, OBJPROP_PRICE2, W1_Close);
               ObjectSet (WC+w,OBJPROP_COLOR,cW1); // èçìåíÿåì öâåò ëèíèè
               ObjectSet (WC+w,OBJPROP_WIDTH,3); // òåïåðü ëèíèÿ áóäåò òîëùèíîé â 3 ïèêñåëÿ
               ObjectSet (WC+w,OBJPROP_STYLE,STYLE_SOLID); // òåïåðü íèæíÿÿ ëèíèÿ áóäåò ïóíêòèðíîé
               ObjectSetText(WC+w,"                   "+WC+DoubleToStr(W1_Close,äðîáü),20);}  
               if(HL){
               ObjectCreate (WH+w, OBJ_TREND, 0, 0,0, 0,0,0,0);
               ObjectSet (WH+w,OBJPROP_RAY,false);
               ObjectSet (WH+w, OBJPROP_TIME1, TimeBegin);
               ObjectSet (WH+w, OBJPROP_PRICE1, W1_High);
               ObjectSet (WH+w, OBJPROP_TIME2, TimeEnd);
               ObjectSet (WH+w, OBJPROP_PRICE2, W1_High);
               ObjectSet (WH+w,OBJPROP_COLOR,cW1); // èçìåíÿåì öâåò ëèíèè
               ObjectSet (WH+w,OBJPROP_WIDTH,1); // òåïåðü ëèíèÿ áóäåò òîëùèíîé â 3 ïèêñåëÿ
               ObjectSet (WH+w,OBJPROP_STYLE,STYLE_DOT); // òåïåðü íèæíÿÿ ëèíèÿ áóäåò ïóíêòèðíîé  
               ObjectSetText(WH+w,"                   "+WH+DoubleToStr(W1_High,äðîáü),10); 
         
               ObjectCreate (WL+w, OBJ_TREND, 0, 0,0, 0,0,0,0);
               ObjectSet (WL+w,OBJPROP_RAY,false);
               ObjectSet (WL+w, OBJPROP_TIME1,TimeBegin);
               ObjectSet (WL+w, OBJPROP_PRICE1, W1_Low);
               ObjectSet (WL+w, OBJPROP_TIME2, TimeEnd);
               ObjectSet (WL+w, OBJPROP_PRICE2, W1_Low);
               ObjectSet (WL+w,OBJPROP_COLOR,cW1); // èçìåíÿåì öâåò ëèíèè
               ObjectSet (WL+w,OBJPROP_WIDTH,1); // òåïåðü ëèíèÿ áóäåò òîëùèíîé â 3 ïèêñåëÿ
               ObjectSet (WL+w,OBJPROP_STYLE,STYLE_DOT); // òåïåðü íèæíÿÿ ëèíèÿ áóäåò ïóíêòèðíîé
               ObjectSetText(WL+w,"                   "+WL+DoubleToStr(W1_Low,äðîáü),10);} 
         
               tW++;
               W++; 
            }

     if(Ìåñÿö)
         {
         mn++;  
         TimeBegin = iTime(NULL,PERIOD_MN1,tMN);
         TimeEnd = (TimeBegin + 86400*30);
         
         double MN_Open  =iOpen(NULL,PERIOD_MN1,MN);
         double MN_Close =iClose(NULL,PERIOD_MN1,MN);
         double MN_High  =iHigh(NULL,PERIOD_MN1,MN);
         double MN_Low   =iLow(NULL,PERIOD_MN1,MN);
         
         if(OC){
         ObjectCreate (MN0+mn, OBJ_TREND, 0, 0,0, 0,0,0,0);
         ObjectSet (MN0+mn,OBJPROP_RAY,false);
         ObjectSet (MN0+mn, OBJPROP_TIME1, TimeBegin);
         ObjectSet (MN0+mn, OBJPROP_PRICE1, MN_Open);
         ObjectSet (MN0+mn, OBJPROP_TIME2, TimeEnd);
         ObjectSet (MN0+mn, OBJPROP_PRICE2, MN_Open);
         ObjectSet (MN0+mn,OBJPROP_COLOR,cMN); // èçìåíÿåì öâåò ëèíèè
         ObjectSet (MN0+mn,OBJPROP_WIDTH,1); // òåïåðü ëèíèÿ áóäåò òîëùèíîé â 3 ïèêñåëÿ
         ObjectSet (MN0+mn,OBJPROP_STYLE,STYLE_SOLID); // òåïåðü íèæíÿÿ ëèíèÿ áóäåò ïóíêòèðíîé
         ObjectSetText(MN0+mn,"                                   "+MN0+DoubleToStr(MN_Open,äðîáü),10);   
         
         ObjectCreate (MNC+mn, OBJ_TREND, 0, 0,0, 0,0,0,0);
         ObjectSet (MNC+mn,OBJPROP_RAY,false);
         ObjectSet (MNC+mn, OBJPROP_TIME1, TimeBegin);
         ObjectSet (MNC+mn, OBJPROP_PRICE1, MN_Close);
         ObjectSet (MNC+mn, OBJPROP_TIME2, TimeEnd);
         ObjectSet (MNC+mn, OBJPROP_PRICE2, MN_Close);
         ObjectSet (MNC+mn,OBJPROP_COLOR,cMN); // èçìåíÿåì öâåò ëèíèè
         ObjectSet (MNC+mn,OBJPROP_WIDTH,3); // òåïåðü ëèíèÿ áóäåò òîëùèíîé â 3 ïèêñåëÿ
         ObjectSet (MNC+mn,OBJPROP_STYLE,STYLE_SOLID); // òåïåðü íèæíÿÿ ëèíèÿ áóäåò ïóíêòèðíîé 
         ObjectSetText(MNC+mn,"                                   "+MNC+DoubleToStr(MN_Close,äðîáü),10);}
         if(HL){
         ObjectCreate (MNH+mn, OBJ_TREND, 0, 0,0, 0,0,0,0);
         ObjectSet (MNH+mn,OBJPROP_RAY,false);
         ObjectSet (MNH+mn, OBJPROP_TIME1, TimeBegin);
         ObjectSet (MNH+mn, OBJPROP_PRICE1, MN_High);
         ObjectSet (MNH+mn, OBJPROP_TIME2, TimeEnd);
         ObjectSet (MNH+mn, OBJPROP_PRICE2, MN_High);
         ObjectSet (MNH+mn,OBJPROP_COLOR,cMN); // èçìåíÿåì öâåò ëèíèè
         ObjectSet (MNH+mn,OBJPROP_WIDTH,1); // òåïåðü ëèíèÿ áóäåò òîëùèíîé â 3 ïèêñåëÿ
         ObjectSet (MNH+mn,OBJPROP_STYLE,STYLE_DOT); // òåïåðü íèæíÿÿ ëèíèÿ áóäåò ïóíêòèðíîé  
         ObjectSetText(MNH+mn,"                                   "+MNH+DoubleToStr(MN_High,äðîáü),10); 
         
         ObjectCreate (MNL+mn, OBJ_TREND, 0, 0,0, 0,0,0,0);
         ObjectSet (MNL+mn,OBJPROP_RAY,false);
         ObjectSet (MNL+mn, OBJPROP_TIME1, TimeBegin);
         ObjectSet (MNL+mn, OBJPROP_PRICE1, MN_Low);
         ObjectSet (MNL+mn, OBJPROP_TIME2, TimeEnd);
         ObjectSet (MNL+mn, OBJPROP_PRICE2, MN_Low);
         ObjectSet (MNL+mn,OBJPROP_COLOR,cMN); // èçìåíÿåì öâåò ëèíèè
         ObjectSet (MNL+mn,OBJPROP_WIDTH,1); // òåïåðü ëèíèÿ áóäåò òîëùèíîé â 3 ïèêñåëÿ
         ObjectSet (MNL+mn,OBJPROP_STYLE,STYLE_DOT); // òåïåðü íèæíÿÿ ëèíèÿ áóäåò ïóíêòèðíîé
         ObjectSetText(MNL+mn,"                                   "+MNL+DoubleToStr(MN_Low,äðîáü),10);} 
      
         tMN++;
         MN++; 
       }
   }

   
   return;
}
//+------------------------------------------------------------------+

Comments