Price Data Components
Miscellaneous
0
Views
0
Downloads
0
Favorites
Zoom_v1
//+------------------------------------------------------------------+
//| |
//| 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(0);
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(-1);
ArrayResize(BarsEn,ArraySize(TimeFrsArray));
ArrayResize(BarsSt,ArraySize(TimeFrsArray));
ArrayResize(BarsTx,ArraySize(TimeFrsArray));
TimeFrames=ObjectDescription("Main"+RectName);
}
if(ArraySize(TimeFrsArray)<1) return(-1);
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) ;
}*/
return(0);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int MainDraw()
{
//---
if(ArraySize(TimeFrsArray)<1) return(-1);
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;
if(B<ArraySize(Line1)) return(0);
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=StringReplace1(str," "," ");
while(StringFind(str,"\t")>-1 && StringLen(str)>0)
str=StringReplace1(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 StringReplace1(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
}
return("");
}
///=======================
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);
return(0);
}
///================================
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);
return(0);
}
///================================
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);
return(0);
}
//-------------------
///================================
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);
}
//+------------------------------------------------------------------+
JPROP_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 Formatting Guide
# H1
## H2
### H3
**bold text**
*italicized text*
[title](https://www.example.com)

`code`
```
code block
```
> blockquote
- Item 1
- Item 2
1. First item
2. Second item
---