Price Data Components
Series array that contains close prices for each barSeries array that contains the highest prices of each barSeries array that contains the lowest prices of each barSeries array that contains open prices of each bar
Miscellaneous
Implements a curve of type %1
0 Views
0 Downloads
0 Favorites
Zoom
//+------------------------------------------------------------------+
//|                                                                  |
//|                                                      Denis Orlov |
//|                                    http://denis-or-love.narod.ru |
/*
Èíñòðóìåíò ïîçâîëÿåò "óâåëè÷èòü" ïðîèçâîëüíóþ ÷àñòü ãðàôèêà è ðàññìîòðåòü åå â âûáðàííûõ òàéìôðåìàõ.
http://codebase.mql4.com/ru/7161

The tool allows to "increase" any part of the schedule for considering it in chosen timeframes.
http://codebase.mql4.com/7162
*/
//+------------------------------------------------------------------+
#property copyright "Denis Orlov,http://denis-or-love.narod.ru"
#property link      "http://denis-or-love.narod.ru"

//#define Pref "Denis Orlov: "

#property indicator_chart_window

#property indicator_buffers 4

#property indicator_color1 DarkTurquoise
#property indicator_color2 DarkBlue
#property indicator_color3 DarkTurquoise
#property indicator_color4 DarkBlue


double LineBma[], Line1[], Line2[], Line3[], Line4[];
//#property indicator_maximum 100



string TimeFrsArray[];
int BarsEn[];//array of end bar
int BarsSt[];//array of start bar
int BarsTx[];//array of bar for price label

                         
extern string TimeFrames=
"15 30";
//"240";


//"USDJPY EURJPY GBPJPY";

//extern 
int Bars_ =0;
datetime RectT1,RectT2;
double RectP1,RectP2;

extern string RectName="Zoom_Rectangle";
extern color RectColor=Blue;  
extern int ChartsGap =1;
extern bool GoldColor=False;
//extern string note1="Vertical lines:";                  
//extern color VertLineColor=Blue;
//extern int VertLineWidth=1;
//extern int VertLineStyle=2;
extern string note2="Text:"; 
//extern int TextY=80;
//extern int TextYStep=20;
extern int FontSize=10;
extern color TextColor=Blue;
//extern color UpColor=Green;
//extern color DnColor=Red;


double CountLevel;
//extern int History=0; 

/*extern int FastEMA=12;
extern int SlowEMA=26;
extern int SignalSMA=9;

#define MacdArrSize 5
double MACD[MacdArrSize];
double MACD_S[MacdArrSize];*/

int perB;

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----   
     
    //Comment("*MultiChart* "+ArraySize(TimeFrsArray)+" symbols *http://denis-or-love.narod.ru*");
    
   SetIndexStyle(0,DRAW_HISTOGRAM,0,3);
   SetIndexBuffer(0,Line1);
   
   SetIndexStyle(1,DRAW_HISTOGRAM,0,3);
   SetIndexBuffer(1,Line2);

   SetIndexStyle(2,DRAW_HISTOGRAM,0,1);
   SetIndexBuffer(2,Line3);
   
   SetIndexStyle(3,DRAW_HISTOGRAM,0,1);
   SetIndexBuffer(3,Line4);
   
      if(GoldColor)
      {
         SetIndexStyle(0,DRAW_HISTOGRAM,0,3,Yellow);
         SetIndexStyle(1,DRAW_HISTOGRAM,0,3,Orange);
         SetIndexStyle(2,DRAW_HISTOGRAM,0,1,Yellow);
         SetIndexStyle(3,DRAW_HISTOGRAM,0,1,Orange);
      }
      
 // DrawLabels(Pref+"Warning!", 0, 250, 1, 
 // "Remember NOT to trade here! Ïîìíèòå, ÍÅ òîðãîâàòü çäåñü!", 0, DnColor, 0,  FontSize);

 int lastBar=WindowFirstVisibleBar()-WindowBarsPerChart()-1;
 while(lastBar<0)lastBar++;
  
 double Highval=High[iHighest(NULL,0,MODE_HIGH,9,lastBar+1)];
 double Lowval=Low[iLowest(NULL,0,MODE_LOW,9,lastBar+1)]; 
 
  DrawRect("Main"+RectName, Time[lastBar+10], Highval, Time[lastBar], Lowval, RectColor,0,TimeFrames); 
  
  CountLevel=Lowval;
  DrawText("Main"+RectName+"CountLevel", Time[lastBar], Lowval-10*Point, "", 69, TextColor, FontSize+2,0) ;  
  
  FillTimeFrsArray();
    if(ArraySize(TimeFrsArray)<1) return;
     ArrayResize( BarsEn,ArraySize(TimeFrsArray));
     ArrayResize( BarsSt,ArraySize(TimeFrsArray));
     ArrayResize( BarsTx,ArraySize(TimeFrsArray));  
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+

//------------------
int deinit()
  {
//----
   //Delete_My_Obj( Pref);
   Delete_My_Obj( RectName);
   Delete_My_Obj("Main"+RectName);
   //Comment("");
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
{
   if(ObjectDescription("Main"+RectName)!=TimeFrames)
   { 
     Delete_My_Obj(RectName);
     FillTimeFrsArray();
    if(ArraySize(TimeFrsArray)<1) return;
     ArrayResize( BarsEn,ArraySize(TimeFrsArray));
     ArrayResize( BarsSt,ArraySize(TimeFrsArray));
     ArrayResize( BarsTx,ArraySize(TimeFrsArray)); 
     TimeFrames=ObjectDescription("Main"+RectName);
   }
   
   if(ArraySize(TimeFrsArray)<1) return;
   
   if (perB!= Time[0])  // îäèí ðàç â áàð
         {
           perB = Time[0];
           
         }
         
     
    ObjectSet("Main"+RectName+"CountLevel",OBJPROP_TIME1,ObjectGet("Main"+RectName,OBJPROP_TIME2)) ; 
    MainDraw();  
  //  if(CountLevel!=ObjectGet("Main"+RectName+"CountLevel",OBJPROP_PRICE1)+10*Point) MainDraw();  //ïðàâèì ïîëîæåíèå   
   
   //íà êàæäîì òèêå òîëüêî íóëåâûå áàðû îáíîâëÿåì, Bars0
    /* for( int i=0; i<ArraySize(TimeFrsArray);i++)//ïî êàæäîìó ñèìâîëó
         {
             if(StringLen(TimeFrsArray[i])>6) 
         int per=StrToPeriod(StringSubstr(TimeFrsArray[i],6, 0));
            else per=Period();
             
            int B=Bars0[i];
            
            string perStr=PeriodToStr(per);     // our Period, íàø òàéìôðåéì
         string Symb=StringSubstr(TimeFrsArray[i],0, 6);// our symbol, íàø èíñòðóìåíò
         double po=MarketInfo(TimeFrsArray[i], MODE_POINT);
         
         double razn=CountLevel-iClose(Symb,per ,Bars_-1);//ðàçíèöà öåí 
             
             double 
                  H=iHigh(Symb, per, 0),
                  L=iLow(Symb, per, 0),
                  O=iOpen(Symb, per, 0),
                  C=iClose(Symb, per, 0); 
                  
                  if(StringSubstr(Symb,3, 0)=="JPY")//àäàïòèðóåì éåíó ÏÎÄ ÃÐÀÔÈÊ
                    {
                      H=H/100; L=L/100; O=O/100; C=C/100;
                      razn=CountLevel-iClose(Symb,per ,Bars_-1)/100;
                    }
                     
                  
                 // Comment("*"+iClose(Symb, per, j)+"*");
                  
            if(C>O)
            {
               Line1[B]=C+razn; Line2[B]=O+razn;
               Line3[B]=H+razn; Line4[B]=L+razn; 
            }
            else
            if(C<O)
            {
               Line1[B]=C+razn; Line2[B]=O+razn;
               Line3[B]=L+razn; Line4[B]=H+razn; 
            }
            else
            if(C==O)
            {
               Line1[B]=O+razn; Line2[B]=C+0.01*po+razn;
               Line3[B]=L+razn; Line4[B]=H+razn; 
            }
            
         string LName=Pref+"Tx "+Symb+" "+perStr;
        double c=iClose(Symb, per, 0), o=iOpen(Symb, per, 0);
        if(c>o) color pColor=UpColor; else pColor=DnColor;//öâåò öåíîâûõ ìåòîê
           
     /// LABEL
     string Text=DoubleToStr(c, Digits);
     DrawText( LName+"_3", Time[BarsTx[i]], WindowPriceMin()+(TextY-2*TextYStep)*Point, Text, 0, pColor, FontSize,0) ; 
         }*/
   
   
   
}
int MainDraw()
  {
//---
   
    if(ArraySize(TimeFrsArray)<1) return;

      Bars_=CountBars()+ArraySize(TimeFrsArray)*ChartsGap+1; //Alert(Bars_);
      
      int B=iBarShift(NULL,0, ObjectGet("Main"+RectName,OBJPROP_TIME2))+Bars_;//ArraySize(TimeFrsArray)*(Bars_+1+ChartsGap)-1;
       
      CountLevel=ObjectGet("Main"+RectName+"CountLevel",OBJPROP_PRICE1)+10*Point;
      
   ArrayInitialize( Line1, EMPTY_VALUE);// ñòèðàåì ãðàôèê
   ArrayInitialize( Line2, EMPTY_VALUE);
   ArrayInitialize( Line3, EMPTY_VALUE);
   ArrayInitialize( Line4, EMPTY_VALUE);

      for( int i=0; i<ArraySize(TimeFrsArray);i++)//ïî êàæäîìó tf
         {
         // ñïåðâà èçâëåêàåì èíñòðóìåíò è ïåðèîä èç ñòðî÷êè
         //if(StringLen(TimeFrsArray[i])>6) 
         int per=StrToPeriod(TimeFrsArray[i]);
           // else per=Period(); 
            
            string perStr=PeriodToStr(per);     // our Period, íàø òàéìôðåéì
         string Symb=Symbol();//StringSubstr(TimeFrsArray[i],0, 6);// our symbol, íàø èíñòðóìåíò
         double po=MarketInfo(TimeFrsArray[i], MODE_POINT);
           
                 //if(Symb!=Symbol())
                 
                 int BarRect1=iBarShift(NULL,0, ObjectGet("Main"+RectName,OBJPROP_TIME1));
                 int BarRect2=iBarShift(NULL,0, ObjectGet("Main"+RectName,OBJPROP_TIME2));
                 int ourBars=BarRect1-BarRect2-1;
                 
                 int startBar=iBarShift(NULL,per, Time[BarRect1-1]); 
                 double p=Period();double p_=per;    
                  double d=p/p_;
                 int endBar=startBar-MathRound(d*ourBars)+1; 
                 if(endBar<0)endBar=0;
                 double Highval=High[iHighest(NULL,0,MODE_HIGH,ourBars,BarRect2+1)];
                 double Lowval=Low[iLowest(NULL,0,MODE_LOW,ourBars,BarRect2+1)]; 
                 
                 double razn=CountLevel-Lowval;
                 
                  
                 /* string LName=RectName+"VL "+Symb+" "+perStr; //ñîçäàåì ëèáî ïåðåäâèãàåì ïîëîñêè
                  if(ObjectFind(LName)<0) ObjectCreate( LName,OBJ_VLINE,0,Time[B],0);
                  ObjectSet( LName, OBJPROP_TIME1 , Time[B]);            
                  ObjectSet( LName, OBJPROP_COLOR , VertLineColor);
                  ObjectSet( LName, OBJPROP_WIDTH , VertLineWidth);
                  ObjectSet( LName, OBJPROP_BACK, True);
                  if(VertLineWidth<2)
                  ObjectSet( LName, OBJPROP_STYLE , VertLineStyle);*/
                 // ObjectSetText( LName, DoubleToStr(TM,0));
                 
           //ñîçäàåì, ïåðåäâèãàåì òåêñò
          string LName=RectName+i+"Tx "+Symb+" "+perStr;
       // double c=iClose(Symb, per, 0), o=iOpen(Symb, per, 0);
        //if(c>o) color pColor=UpColor; else pColor=DnColor;//öâåò öåíîâûõ ìåòîê
           
     /// LABELS
     //string Text=DoubleToStr(c, Digits);
    // DrawText( LName+"_1", Time[B-6], WindowPriceMin()+TextY*Point, Symb, 0, TextColor, FontSize,0) ; 
     DrawText( LName+"_2", Time[B-4], Lowval+razn, perStr, 0, TextColor, FontSize,0) ;
    // DrawText( LName+"_3", Time[B-5], WindowPriceMin()+(TextY-2*TextYStep)*Point, Text, 0, pColor, FontSize,0) ;            
    // DrawText( LName+"_4", Time[B-5], WindowPriceMin()+(TextY-3*TextYStep)*Point, "Ñïðåä= "+DoubleToStr(MarketInfo(Symb, MODE_SPREAD),0), 0, TextColor, FontSize,0) ;
     
     //DrawText( LName+"_5", Time[B-5], WindowPriceMin()+(TextY-4*TextYStep)*Point, NewText, 0, pColor, FontSize,0) ;
             BarsTx[i]=B-5; 
                            
                             B--; // ñëåäóþùèé ïîñëå ëèíèè áàð...
                 
                 //ðàçíèöà öåí äëÿ âûðàâíèâàíèÿ â îêíå
                 // else razn=0;
                 
                // Alert(per+":"+startBar+";"+endBar+";"+ourBars+";");      
         
         for(int j=startBar; j>=endBar;j--)//ïî êàæäîìó áàðó
             {                
                  if(j==startBar)//BarsSt[i]=B;//çàïîìíèëè "ïåðâûé áàð" äëÿ ýòîãî òô      
                     DrawRect(RectName+i+perStr, Time[B]-Period()*60, Highval+razn, Time[B], Lowval+razn, RectColor);   
                  if(j==endBar)//BarsEn[i]=B;//çàïîìíèëè "ïîñëåäíèé áàð" äëÿ ýòîãî òô
                     ObjectSet(RectName+i+perStr,OBJPROP_TIME2, Time[B]+Period()*60);
                  
                  double // çíà÷åíèÿ ñâå÷êè
                  H=iHigh(Symb, per, j),
                  L=iLow(Symb, per, j),
                  O=iOpen(Symb, per, j),
                  C=iClose(Symb, per, j); 
                  
                 /* if(StringSubstr(Symb,3, 0)=="JPY")//åñëè èåíà, àäàïòèðóåì éåíó ÏÎÄ ÃÐÀÔÈÊ
                    {
                      H=H/100; L=L/100; O=O/100; C=C/100;
                      razn=CountLevel-iClose(Symb,per ,Bars_-1)/100;
                    }*/
                     
                  
               /// ÀËÈËÓß!ðèñóåì ãðàôèê...
                  
            if(C>O)
            {
               Line1[B]=C+razn; Line2[B]=O+razn;
               Line3[B]=H+razn; Line4[B]=L+razn; 
            }
            else
            if(C<O)
            {
               Line1[B]=C+razn; Line2[B]=O+razn;
               Line3[B]=L+razn; Line4[B]=H+razn; 
            }
            else
            if(C==O)
            {
               Line1[B]=O+razn; Line2[B]=C+0.01*po+razn;
               Line3[B]=L+razn; Line4[B]=H+razn; 
            }
            
                        
                        
             B--;  ///   ñëåäóþùèé áàð...     
           }//ïî êàæäîìó áàðó
           
           B=B-ChartsGap; //îòñòóï ìåæäó ÷àðòàìè

      }//ïî êàæäîìó ñèìâîëó

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

//çàïîëíÿåì ìàññèâ èíñòðóìåíòîâ
int FillTimeFrsArray()
{
   string str=ObjectDescription("Main"+RectName), delim=" ";
   
   str=StringTrimRight( str) ;
       str=StringTrimLeft( str) ;
       
   while( StringFind( str, "  ")>-1 && StringLen(str)>0)
        str=StringReplace(str, "  ", " ");
       while( StringFind( str, "\t")>-1 && StringLen(str)>0)
        str=StringReplace(str, "\t", " ");
       
       str=str+" ";
       ArrayResize( TimeFrsArray, 0) ;
        
     while( StringLen(str)>0)
      {
         int pos=StringFind(str, delim);
         string sy=StringSubstr(str, 0, pos);
         str=StringSubstr(str, pos+1);/// îòñåêëè 
         
            if(StringSubstr(sy, 0,1)=="-") continue;
            
         int Size=ArraySize(TimeFrsArray);
         ArrayResize( TimeFrsArray, Size+1) ;
         TimeFrsArray[Size]=sy;
      } 
      
      return(ArraySize(TimeFrsArray));  
}
//-------
string StringReplace(string text, string oldstr, string newstr)
{
  int pos=StringFind(text, oldstr);
  if(pos>-1)
   { 
      string str=StringSubstr(text, 0, pos)+newstr+StringSubstr(text, pos+StringLen(oldstr));
      return(str);
   }
   return(text);
}
//----------------
int StrToPeriod(string str)
{
     if(str=="M1" || str=="1" )return(1);
     if(str=="M5" || str=="5")return(5);
     if(str=="M15" || str=="15")return(15);
     if(str=="M30" || str=="30")return(30);
     if(str=="H1" || str=="60")return(60);
     if(str=="H4" || str=="240")return(240);
     if(str=="D1" || str=="1440")return(1440);
     if(str=="W1" || str=="10080")return(10080);
     if(str=="ÌN" || str=="43200")return(43200);
     
        return(Period());
}
string PeriodToStr(int Per)
   {
      switch(Per)                 // Ðàñ÷¸ò êîýôôèöèåíòîâ äëÿ..     
      {                              // .. ðàçëè÷íûõ ÒÔ      
      case     1: return("M1");  // Òàéìôðåéì Ì1      
      case     5: return("M5");  // Òàéìôðåéì Ì5      
      case    15: return("M15");  // Òàéìôðåéì Ì15      
      case    30: return("M30");  // Òàéìôðåéì Ì30      
      case    60: return("H1");  // Òàéìôðåéì H1      
      case   240: return("H4");  // Òàéìôðåéì H4      
      case  1440: return("D1");  // Òàéìôðåéì D1      
      case 10080: return("W1");  // Òàéìôðåéì W1      
      case 43200: return("ÌN");  // Òàéìôðåéì ÌN     
      }
   }
///=======================
void Delete_My_Obj(string Prefix)
   {
   for(int k=ObjectsTotal()-1; k>=0; k--)  // Ïî êîëè÷åñòâó âñåõ îáúåêòîâ 
     {
      string Obj_Name=ObjectName(k);   // Çàïðàøèâàåì èìÿ îáúåêòà
      string Head=StringSubstr(Obj_Name,0,StringLen(Prefix));// Èçâëåêàåì ïåðâûå ñèì

      if (Head==Prefix)// Íàéäåí îáúåêò, ..
         {
         ObjectDelete(Obj_Name);
         }                
        
     }
   }
//----------------------------------
int DrawText( string name, datetime T, double P, string Text, int code=0, color Clr=Green,  int Fsize=10, int Win=0)
   { 
      if (name=="") name="Text_"+T;
      
      int Error=ObjectFind(name);// Çàïðîñ 
   if (Error!=Win)// Åñëè îáúåêòà â óê. îêíå íåò :(
    { 
      ObjectCreate(name, OBJ_TEXT, Win, T, P);
      }
      
      ObjectSet(name, OBJPROP_TIME1, T);
      ObjectSet(name, OBJPROP_PRICE1, P);
      if(code==0)
      ObjectSetText(name, Text ,Fsize,"Arial",Clr);
      else
      ObjectSetText(name, CharToStr(code), Fsize,"Wingdings",Clr);
   }
///================================
int DrawLabels(string name, int corn, int X, int Y, string Text, int code=0, color Clr=Green, int Win=0, int FSize=10)
   {
     int Error=ObjectFind(name);// Çàïðîñ 
   if (Error!=Win)// Åñëè îáúåêòà â óê. îêíå íåò :(
    {  
      ObjectCreate(name,OBJ_LABEL,Win, 0,0); // Ñîçäàíèå îáúåêòà
    }
     
     ObjectSet(name, OBJPROP_CORNER, corn);     // Ïðèâÿçêà ê óãëó   
     ObjectSet(name, OBJPROP_XDISTANCE, X);  // Êîîðäèíàòà Õ   
     ObjectSet(name,OBJPROP_YDISTANCE,Y);// Êîîðäèíàòà Y   
     ObjectSetText(name,Text,FSize,"Arial",Clr);
          if(code==0)
      ObjectSetText(name, Text ,FSize,"Arial",Clr);
      else
      ObjectSetText(name, CharToStr(code), FSize,"Wingdings",Clr);
   }
///================================
int DrawRect(string name, datetime T1, double P1, datetime T2, double P2, color Clr, int W=1, string Text="", bool BACK=false, int Win=0)
   {
     int Error=ObjectFind(name);// Çàïðîñ 
   if (Error!=Win)// Åñëè îáúåêòà â óê. îêíå íåò :(
    {  
      ObjectCreate(name, OBJ_RECTANGLE, Win,T1,P1,T2,P2);//ñîçäàíèå òðåíäîâîé ëèíèè
    }
     
    ObjectSet(name, OBJPROP_TIME1 ,T1);
    ObjectSet(name, OBJPROP_PRICE1,P1);
    ObjectSet(name, OBJPROP_TIME2 ,T2);
    ObjectSet(name, OBJPROP_PRICE2,P2);
    ObjectSet(name,OBJPROP_BACK, BACK);
    ObjectSet(name,OBJPROP_STYLE,0);
    ObjectSet(name, OBJPROP_COLOR , Clr);
    ObjectSet(name, OBJPROP_WIDTH , W);
    ObjectSetText(name,Text);
   }  
//-------------------
///================================
int CountBars()
{
    double res=0;
    for( int i=0; i<ArraySize(TimeFrsArray);i++)//ïî êàæäîìó tf
    {
      
      int BarRect1=iBarShift(NULL,0, ObjectGet("Main"+RectName,OBJPROP_TIME1));
      int BarRect2=iBarShift(NULL,0, ObjectGet("Main"+RectName,OBJPROP_TIME2));
      int ourBars=BarRect1-BarRect2-1;
      int zoomPer=StrToPeriod(TimeFrsArray[i]);
     
      double p=Period();double p_=zoomPer;    
      double d=p/p_;
      res=res+MathRound(d*ourBars); //Alert(Period()+"/"+d+"="+res);
      
    }
  return(res);  
}

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 ---