Price Data Components
0
Views
0
Downloads
0
Favorites
iTime_III-V2
//+-------------------------------------------------------------------------------------+
//| iTime III (FutureSeparates).mq4 | // based on:
//| Copyright © 2011, komposter | // 1 - TIME II (VBO) by Vadim Baklanov (ispgip@mail.ru)
//| http://www.komposter.me | // 2 - FutureSeparators by Scriptong (scriptong@mail.ru)
//+-------------------------------------------------------------------------------------+
#property copyright ""
#property link "sever11"
//v2.0
#property indicator_chart_window
//+-------------------------------------------------------------------------------------+
//| *** Âíåøíèå ïàðàìåòðû èíäèêòîðà *** |
//+-------------------------------------------------------------------------------------+
extern string GeneralSessions="-------Íàñòðîéêè-ñåññèé-------";
extern bool ShowSessions=true; // true - ïîêàçûâàòü ñåññèè íà ãðàôèêå
extern color OnColor=Lime; // Öâåò êíîïêè ïåðåêëþ÷åíèÿ ñîñòîÿíèÿ îòðèñîâêè â ðåæèìå ÂÊË.
extern color OffColor=DarkGray; // Öâåò êíîïêè ïåðåêëþ÷åíèÿ ñîñòîÿíèÿ îòðèñîâêè â ðåæèìå ÎÒÊË.
extern bool PlaceUTCPoints=true; // Âûâîäèòü äîïîëíèòåëüíóþ èíôîðìàöèþ ïî ñåññèÿì íà ãðàôèê.
extern color UTCPointColor=Gray; // Öâåò äîïîëíèòåëüíîé èíôîðìàöèè.
extern string TimeSettings = "----Âðåìÿ----";
extern int Broker_TimeZone =+2; // ×àñîâîé ïîÿñ áðîêåðà.
extern datetime Broker_DST_start = D'01.01.2001 00:00:00'; // Ïåðåõîä íà ëåòíåå âðåìÿ (Daylight saving time).
extern datetime Broker_DST_end=D'01.01.2001 00:00:00'; // Ïåðåõîä íà ëåòíåå âðåìÿ (Daylight saving time).
//+-------------------------------------------------------------------------------------+
extern string CustomSettings="----Îáùèå----";
extern int DaysToDisplay = 10; // Êîëè÷åñòâî äíåé íà êîòîðûõ îòîáðàæàþòñÿ ñåññèè.
extern int RectLineStyle = STYLE_SOLID; // Ñòèëü ëèíèé îòðèñîâêè.
extern int RectLineWidth=1; // Òîëùèíà ëèíèé îòðèñîâêè.
//+-------------------------------------------------------------------------------------+
extern string GeneralDelimeters="-------Íàñòðîéêè-ðàçäåëèòåëåé-------";
extern bool ShowPrevious = true; //ïåðåêëþ÷àòåëü äëÿ îòîáðàæåíèÿ èñòîðèè : TRUE - ïîêàçàòü, FALSE - ñêðûòü.
extern datetime EndDate = D'2015.01.01 00:00'; // Äàòà, âïëîòü äî êîòîðîé èäåò ïîñòðîåíèå.
extern int AllOn=0; // 1 - âêëþ÷èòü âñå ðàçäåëèòåëè, -1 - âûêëþ÷èòü âñå ðàçäåëèòåëè
// 0 - îðèåíòèðîâàòüñÿ íà íàñòðîéêè êàæäîãî îòäåëüíî
//+-------------------------------------------------------------------------------------+
extern string MonthlyDelimeter = "----Ìåñÿö----";
extern bool UseMN1 = true; // true - èñïîëüçîâàòü ìåñÿ÷íûé ðàçäåëèòåëü.
extern color MonthColor = Black; // Öâåò îáû÷íîé ëèíèè.
extern int MonthWidth = 1; // Òîëùèíà îáû÷íîé ëèíèè.
extern int MonthStyle = STYLE_DASH; // Ñòèëü îáû÷íîé ëèíèè.
extern string Quarter = "--Êâàðòàëû--";
extern color QuarterColor = Black; // Öâåò êâàðòàëüíîé ëèíèè.
extern int QuarterWidth = 2; // Òîëùèíà êâàðòàëüíîé ëèíèè.
extern int QuarterStyle=STYLE_SOLID; // Ñòèëü êâàðòàëüíîé ëèíèè.
//+-------------------------------------------------------------------------------------+
extern string WeeklyDelimeter="----Íåäåëÿ----";
extern bool UseW1=true; // true - èñïîëüçîâàòü íåäåëüíûé ðàçäåëèòåëü.
extern color WeekColor=DodgerBlue; // Öâåò îáû÷íîé ëèíèè.
extern int WeekWidth=1; // Òîëùèíà îáû÷íîé ëèíèè.
extern int WeekStyle= STYLE_DOT; // Ñòèëü îáû÷íîé ëèíèè.
//+-------------------------------------------------------------------------------------+
extern string DailyDelimeter="----Äåíü----";
extern bool UseD1=true; // true - èñïîëüçîâàòü äíåâíîé ðàçäåëèòåëü.
extern color BusinessDayColor=Lime; // Öâåò ðàáî÷èõ äíåé.
extern color WeekEndColor=Orange; // Öâåò âûõîäíûõ äíåé.
extern int DayWidth=1; // Òîëùèíà îáû÷íîé ëèíèè.
extern int DayStyle= STYLE_DOT; // Ñòèëü îáû÷íîé ëèíèè.
//+-------------------------------------------------------------------------------------+
extern string H4Delimeter="----4-×àñà----";
extern bool UseH4=false; // true - èñïîëüçîâàòü 4-õ ÷àñîâîé ðàçäåëèòåëü.
extern color H4Color= LightCoral; // Öâåò îáû÷íîé ëèíèè.
extern int H4Width=1; // Òîëùèíà îáû÷íîé ëèíèè.
extern int H4Style= STYLE_DOT; // Ñòèëü îáû÷íîé ëèíèè.
//+-------------------------------------------------------------------------------------+
extern string H1Delimeter="----1-×àñ----";
extern bool UseH1=false; // true - èñïîëüçîâàòü ÷àñîâîé ðàçäåëèòåëü.
extern color H1Color = White; // Öâåò îáû÷íîé ëèíèè.
extern int H1Width = 1; // Òîëùèíà îáû÷íîé ëèíèè.
extern int H1Style=STYLE_DOT; // Ñòèëü îáû÷íîé ëèíèè.
//+-------------------------------------------------------------------------------------+
string prefix ="FutSep_";
string day[7]={ "ÂÑ","ÏÍ","ÂÒ","ÑÐ","×Ò","ÏÒ","ÑÁ" };
bool MondayWeekStart=true; // true - íà÷àëî íåäåëè áóäåò ïîêàçàíî â ïîíåäåëüíèê, èíà÷å - âîñêðåñåíüå.
//+-------------------------------------------------------------------------------------+
//--Time of sessions and DST (Daylight saving time) - all in UTC
//--Southern hemisphere.
//--Sydney. EDT (Eastern Daylight Time) UTC offset +10 DST +1 hour.
int SydneyTimeZone = +10;
datetime SydneyBegins = D'01.01.2001 23:00:00';
datetime SydneyEnds=D'01.01.2001 07:00:00';
datetime SydneyDSTStarts=D'04.10.2009 02:00:00';
datetime SydneyDSTEnds=D'05.04.2009 03:00:00';
//--Color settings.
color SydneyColor=DarkSeaGreen;
color SydneyBackColor=C'12,0,60';
//--ASX Open.
datetime ASXOpens=D'01.01.2001 00:00:00';
string ASXOpensText="+ASX";
string ASXOpensDescr="+Australian SE";
//--ASX Close.
datetime ASXCloses=D'01.01.2001 06:00:00';
string ASXClosesText="-ASX";
string ASXClosesDescr="-Australian SE";
//+-------------------------------------------------------------------------------------+
//+-------------------------------------------------------------------------------------+
//--Northern hemisphere.
//--Tokyo.
int TokyoTimeZone=+9;
datetime TokyoBegins=D'01.01.2001 00:00:00'; //+
datetime TokyoEnds=D'01.01.2001 08:00:00'; //+
//--Color settings.
color TokyoColor=DeepPink;
color TokyoBackColor=C'43,0,23';
//--TSE Open.
datetime TokyoSEOpens=D'01.01.2001 00:00:00';
string TokyoSEOpensText="+TSE";
string TokyoSEOpensDescr="+Tokyo SE";
//--TSE Close.
datetime TokyoSECloses=D'01.01.2001 06:00:00';
string TokyoSEClosesText="-TSE";
string TokyoSEClosesDescr="-Tokyo SE";
//+-------------------------------------------------------------------------------------+
//--Hong Kong, Shanghai Standard time zone: UTC +8 hours No DST in 2009
int HongKongTimeZone=+8;
datetime HongKongBegins= D'01.01.2001 01:00:00';
datetime HongKongEnds=D'01.01.2001 09:00:00';
//--Color Settings.
color HongKongColor=Red;
color HongKongBackColor=C'43,0,0';
//--HKEx Open.
datetime HKExOpens=D'01.01.2001 02:00:00'; // Pre-opening Session 9:30am to 10:00am, Morning Session begins in 10:00am
string HKExOpensText="+HKEx";
string HKExOpensDescr="+Hong Kong HKEx";
//--HKEx Close.
datetime HKExCloses=D'01.01.2001 08:00:00'; // 4:00pm
string HKExClosesText="-HKEx";
string HKExClosesDescr="-Hong Kong HKEx";
//--SSE Open.
datetime SSEOpens=D'01.01.2001 01:30:00'; // Pre-Market Session: 09:15 - 09:25 Normal Trading Session: 09:30 - 15:00
string SSEOpensText="+SSE";
string SSEOpensDescr="+Shanghai SE";
//--SSE Close.
datetime SSECloses=D'01.01.2001 07:00:00'; // The afternoon session is 13:00pm to 15:00pm
string SSEClosesText="-SSE";
string SSEClosesDescr="-Shanghai SE";
//+-------------------------------------------------------------------------------------+
//--Moscow, MSK (Moscow Standard Time) UTC +3 Daylight saving time: +1 hour
int MoscowTimeZone = +3;
datetime MoscowDSTStarts = D'29.03.2009 02:00:00';
datetime MoscowDSTEnds=D'25.10.2009 03:00:00';
//--RTS Open.
datetime RTSOpens=D'01.01.2001 07:30:00';
string RTSOpensText="+RTS";
string RTSOpensDescr="+RTS áèðæà";
//--RTS Close.
datetime RTSCloses=D'01.01.2001 15:45:00';
string RTSClosesText="-RTS";
string RTSClosesDescr="-RTS áèðæà";
//+-------------------------------------------------------------------------------------+
//--CEST, UTC +1 Daylight saving time: +1 hour
int FrankfurtTimeZone = +1;
datetime FrankfurtDSTStarts = D'29.03.2009 01:00:00';
datetime FrankfurtDSTEnds=D'25.10.2009 02:00:00';
datetime FrankfurtBegins=D'01.01.2001 07:00:00';
datetime FrankfurtEnds=D'01.01.2001 16:00:00';
//--Color settings.
color FrankfurtColor=Gold;
color FrankfurtBackColor=C'51,33,0';
//--FSE Open.
datetime FSEOpens=D'01.01.2001 08:00:00'; // Trading runs from 09:00 to 17:30 with closing auction from 17:30-17:35
string FSEOpensText="+FSE";
string FSEOpensDescr="+Frankfurt SE";
//--FSE Close.
datetime FSECloses=D'01.01.2001 16:30:00';
string FSEClosesText="-FSE";
string FSEClosesDescr="-Frankfurt SE";
//+-------------------------------------------------------------------------------------+
//--Madrid, CET UTC +1, No DST
int MadridTimeZone = +1;
datetime MadridDSTStarts = D'29.03.2009 02:00:00';
datetime MadridDSTEnds=D'25.10.2009 03:00:00';
//--Spanish Stock Market Interconnection System (SIBE), which handles more than 90% of transactions
//--SIBE Open.
datetime SIBEOpens=D'01.01.2001 08:00:00'; // Trading on SIBE is conducted from 9am to 5:30pm; open outcry from 10am to 11:30am
string SIBEOpensText="+SIBE";
string SIBEOpensDescr="+Madrid SIBE";
//--SIBE Close.
datetime SIBECloses=D'01.01.2001 16:30:00';
string SIBEClosesText="-SIBE";
string SIBEClosesDescr="-Madrid SIBE";
//+-------------------------------------------------------------------------------------+
//--GMT, UTC no offset Daylight saving time: +1 hour
int LondonTimeZone = 0;
datetime LondonDSTStarts = D'29.03.2009 01:00:00';
datetime LondonDSTEnds=D'25.10.2009 02:00:00';
datetime LondonBegins=D'01.01.2001 08:00:00';
datetime LondonEnds=D'01.01.2001 17:00:00'; //+
//--Color settings.
color LondonColor=Orange;
color LondonBackColor=C'12,0,60';
//--LSE Open.
datetime LSEOpens=D'01.01.2001 08:00:00';
string LSEOpensText="+LSE";
string LSEOpensDescr="+London SE";
//--LSE Close.
datetime LSECloses=D'01.01.2001 16:30:00';
string LSEClosesText="-LSE";
string LSEClosesDescr="-London SE";
//+-------------------------------------------------------------------------------------+
//--EST, UTC -5 Daylight saving time: +1 hour
int NewYorkTimeZone= -5;
datetime NewYorkBegins=D'01.01.2001 13:00:00'; //+
datetime NewYorkEnds=D'01.01.2001 21:00:00';
datetime NewYorkDSTStarts=D'08.03.2009 02:00:00';
datetime NewYorkDSTEnds=D'01.11.2009 02:00:00';
//--Color settings.
color NewYorkColor=CornflowerBlue;
color NewYorkBackColor=C'12,0,60';
//--NYSE Open.
datetime NYSEOpens=D'01.01.2001 14:30:00'; // The New York Stock Exchange opens Monday through Friday at 9:30 EST
string NYSEOpensText="+ NYSE, Toronto SE, NASDAQ, SP500";
string NYSEOpensDescr="+ NYSE, Toronto SE, NASDAQ, SP500";
//--NYSE Close.
datetime NYSECloses=D'01.01.2001 21:00:00'; // 16:00 EST
string NYSEClosesText="- NYSE, Toronto SE, NASDAQ, SP500(+15min)";
string NYSEClosesDescr="- NYSE, Toronto SE, NASDAQ, SP500(+15min)";
//+-------------------------------------------------------------------------------------+
//--CDT, UTC -6 Daylight saving time: +1 hour
int ChicagoTimeZone= -6;
datetime ChicagoBegins= D'01.01.2001 14:00:00';
datetime ChicagoEnds=D'01.01.2001 22:00:00';
datetime ChicagoDSTStarts=D'08.03.2009 03:00:00';
datetime ChicagoDSTEnds=D'01.11.2009 01:00:00';
//--Color settings.
color ChicagoColor=MediumSlateBlue;
color ChicagoBackColor=C'12,0,60';
//+-------------------------------------------------------------------------------------+
//--General variables.
datetime daily[];
datetime HistoryDownloadTime = 0;
double high = 0;
double low=0;
bool SessionRectangleOn=false;
//+-------------------------------------------------------------------------------------+
//--Îñíîâíûå ôóíêöèè.
//--init - ïðè ñòàðòå ïðîãðàììû.
int init()
{
//--Îòðèñîâêà ñåññèé:
HistoryDownloadTime=0; //--Ïîäãðóçêà èñòîðèè åùå íå ïðîèçâîäèëàñü...
SessionRectangleOn=ShowSessions; //--Èçíà÷àëüíîå ñîñòîÿíèå îòðèñîâêè ñåññèé.
//--Ðèñóåì ïåðåêëþ÷àòåëü ñåññèé íà ãðàôèêå.
SwitchStatus();
//--Îòðèñîâêè ðàçäåëèòåëåé:
string txt= "";
datetime i= 0;
int wdth=1;
int stl=STYLE_SOLID;
color clr=Black;
//--Ïðîâåðÿåì ñîñòîÿíèå óïðàâëÿþùåãî ôëàãà: çàïðåùàåì èëè ðàçðåøàåì âñå ñðàçó.
if( AllOn > 0 ) { UseMN1 = true; UseW1 = true; UseD1 = true; UseH4 = true; UseH1 = true; }
if( AllOn < 0 ) { UseMN1 = false; UseW1 = false; UseD1 = false; UseH4 = false; UseH1 = false; }
//--Ðèñóåì H1.
if(Period()<PERIOD_H1 && UseH1)
{
i=iTime(Symbol(),PERIOD_H1,0);
while(i<EndDate)
{
if(!ShowPrevious || i>iTime(Symbol(),PERIOD_H1,0)) { DrawLine(TimeToStr(i),i,H1Style,H1Width,H1Color); }
i+=PERIOD_H1*60;
}
}
//--Ðèñóåì H4.
if(Period()<PERIOD_H4 && UseH4)
{
i=iTime(Symbol(),PERIOD_H4,0);
while(i<EndDate)
{
if(!ShowPrevious || i>iTime(Symbol(),PERIOD_H4,0)) { DrawLine(TimeToStr(i),i,H4Style,H4Width,H4Color); }
i+=PERIOD_H4*60;
}
}
//--Ðèñóåì D1.
if(Period()<PERIOD_D1 && UseD1)
{
i=iTime(Symbol(),PERIOD_D1,0);
clr=Black;
while(i<EndDate)
{
//--Âûõîäíûå è ðàáî÷èå äíè ðàçíûìè öâåòàìè.
if(TimeDayOfWeek(i)==0 || TimeDayOfWeek(i)==6) { clr=WeekEndColor; }
else { clr=BusinessDayColor; }
if(!ShowPrevious || i>iTime(Symbol(),PERIOD_D1,0)) { DrawLine(TimeToStr(i)+": "+day[TimeDayOfWeek(i)],i,DayStyle,DayWidth,clr); }
i+=PERIOD_D1*60;
}
}
//--Ðèñóåì W1.
if(Period()<PERIOD_W1 && UseW1)
{
i=iTime(Symbol(),PERIOD_W1,0);
//--Åñëè âûáðàí ðîññèéñêèé ôîðìàò, íà÷èíàåì íåäåëþ â ïîíåäåëüíèê, èíà÷å - â âîñêðåñåíüå.
if(MondayWeekStart) { i+=PERIOD_D1*60; }
while(i<EndDate)
{
if(!ShowPrevious || i>iTime(Symbol(),PERIOD_W1,0)) { DrawLine(TimeToStr(i)+": "+day[TimeDayOfWeek(i)]+" (íà÷àëî íåäåëè).",i,WeekStyle,WeekWidth,WeekColor); }
i+=PERIOD_W1*60;
}
}
//--Ðèñóåì MN1.
if(UseMN1)
{
i=iTime(Symbol(),PERIOD_MN1,0);
int month=0;
int year=0;
string m_str="";
clr=Black;
while(i<EndDate)
{
month=TimeMonth(i);
year=TimeYear(i);
//--Ñ÷èòàåì ìåñÿö íå êëþ÷åâûì ïî óìîë÷àíèþ.
wdth=MonthWidth;
stl = MonthStyle;
txt = TimeToStr(i) + ": " + day[TimeDayOfWeek(i)] + " (íà÷àëî ìåñÿöà).";
clr = MonthColor;
//--Åñëè ýòî 3, 6, 9 èëè 12 ìåñÿö - âûäåëÿåì îñîáûì ñïîñîáîì è ïîäïèñûâàåì ðàçäåëèòåëü.
switch(month)
{
case 3:
wdth=QuarterWidth;
stl = QuarterStyle;
txt = txt + " - Îò÷åò çà I-é êâàðòàë.";
clr = QuarterColor;
break;
case 6:
wdth=QuarterWidth;
stl = QuarterStyle;
txt = txt + " - Îò÷åò çà II-é êâàðòàë.";
clr = QuarterColor;
break;
case 9:
wdth=QuarterWidth;
stl = QuarterStyle;
txt = txt + " - Îò÷åò çà III-é êâàðòàë.";
clr = QuarterColor;
break;
case 12:
wdth=QuarterWidth;
stl = QuarterStyle;
txt = txt + " - Êîíåö îò÷åòíîñòè.";
clr = QuarterColor;
break;
default: break;
}
if(!ShowPrevious || i>iTime(Symbol(),PERIOD_MN1,0)) { DrawLine(txt,i,stl,wdth,clr); }
//--Åñëè óæå îòðèñîâàëè âñå ìåñÿöû çà ãîä, ïåðåêëþ÷àåìñÿ íà ñëåäóþùèé.
month++;
if(month>12)
{
year++;
month=1;
}
if(month>9) { m_str="0"; }
else { m_str=""; }
i=StrToTime(year+"."+m_str+month+".01 00:00");
}
}
if(ShowPrevious)
{
datetime time_prev,
time_next,
time_line;
int bars=iBars(Symbol(),Period())-1;
for(i=bars; i>0; i --)
{
time_prev=iTime(Symbol(),Period(),i); //--âðåìÿ áàðà, êîòîðûé àíàëèçèðóåì
time_next= iTime(Symbol(),Period(),i-1); //--âðåìÿ áàðà íà îäèí äàëüøå â èñòîðèè
//--×àñ.
if(UseH1 && Period()<PERIOD_H1) { if(TimeHour(time_prev)!=TimeHour(time_next)) { DrawLine(TimeToStr(time_next),time_next,H1Style,H1Width,H1Color); } }
//--4 ×àñà.
if(UseH4 && Period()<PERIOD_H4) { if(TimeHour(time_prev)!=TimeHour(time_next) && MathMod(TimeHour(time_next),4)<Point) { DrawLine(TimeToStr(time_next),time_next,H4Style,H4Width,H4Color); } }
//--Äåíü.
if(UseD1 && Period()<PERIOD_D1)
{
if(TimeDay(time_prev)!=TimeDay(time_next))
{
//--Âûõîäíûå è ðàáî÷èå äíè ðàçíûìè öâåòàìè.
if(TimeDayOfWeek(time_next)==0 || TimeDayOfWeek(time_next)==6) { clr=WeekEndColor; }
else { clr=BusinessDayColor; }
DrawLine(TimeToStr(time_next)+": "+day[TimeDayOfWeek(time_next)],time_next,DayStyle,DayWidth,clr);
}
}
//--Íåäåëÿ.
if(UseW1 && Period()<PERIOD_W1)
{
if(TimeDayOfWeek(time_prev)>TimeDayOfWeek(time_next)) { DrawLine(TimeToStr(time_next)+": "+day[TimeDayOfWeek(time_next)]+" (íà÷àëî íåäåëè).",time_next,WeekStyle,WeekWidth,WeekColor); }
else { if(time_next-time_prev>=PERIOD_D1*420) { DrawLine(TimeToStr(time_next)+": "+day[TimeDayOfWeek(time_next)]+" (íà÷àëî íåäåëè).",time_next,WeekStyle,WeekWidth,WeekColor); } }
}
//--Ìåñÿö.
if(UseMN1)
{
if(TimeMonth(time_prev)!=TimeMonth(time_next))
{
//--Ñ÷èòàåì ìåñÿö íå êëþ÷åâûì ïî óìîë÷àíèþ.
wdth=MonthWidth;
stl = MonthStyle;
txt = TimeToStr(time_next) + ": " + day[TimeDayOfWeek(time_next)] + " (íà÷àëî ìåñÿöà).";
clr = MonthColor;
time_line=time_next;
if(TimeMonth(time_next)>11 && TimeMonth(time_prev)<12)
{
wdth=QuarterWidth;
stl = QuarterStyle;
txt = txt + " - Êîíåö îò÷åòíîñòè.";
clr = QuarterColor;
}
if(TimeMonth(time_next)>=3 && TimeMonth(time_prev)<3)
{
wdth=QuarterWidth;
stl = QuarterStyle;
txt = txt + " - Îò÷åò çà I-é êâàðòàë.";
clr = QuarterColor;
}
if(TimeMonth(time_next)>=6 && TimeMonth(time_prev)<6)
{
wdth=QuarterWidth;
stl = QuarterStyle;
txt = txt + " - Îò÷åò çà II-é êâàðòàë.";
clr = QuarterColor;
}
if(TimeMonth(time_next)>=9 && TimeMonth(time_prev)<9)
{
wdth=QuarterWidth;
stl = QuarterStyle;
txt = txt + " - Îò÷åò çà III-é êâàðòàë.";
clr = QuarterColor;
}
DrawLine(txt,time_line,stl,wdth,clr);
}
}
}
}
WindowRedraw();
return(0);
}
//--deinit - ïðè çàâåðøåíèè ðàáîòû.
int deinit()
{
string name="";
string fix="#@!_";
for(int i=ObjectsTotal()-1; i>=0; i --)
{
name=ObjectName(i);
//--Óäàëÿåì ëèíèè ðàçäåëèòåëåé è ðàìêè ñåññèé.
if(StringFind(name,fix ) >= 0 ) { ObjectDelete(name); continue; }
if( StringFind( name,prefix ) >= 0 ) { ObjectDelete(name); continue; }
//--Óäàëÿåì äîïîëíèòåëüíóþ èíôîðìàöèþ î ñåññèÿõ.
if(!PlaceUTCPoints) { continue; }
if(StringFind(name," UTC ")>=0) { ObjectDelete(name); }
}
//--Óäàëÿåì êíîïêó ïåðåêëþ÷åíèÿ.
if(ObjectFind("Ðàìêè ñåññèé: âêë/îòêë.")>=0) { ObjectDelete("Ðàìêè ñåññèé: âêë/îòêë."); }
return(0);
}
//--start - êàæäûé òèê.
int start()
{
//--Ïðîâåðÿåì ñîñòîÿíèå ïåðåêëþ÷àòåëÿ.
SwitchStatus();
//--Ðèñóåì ðàìêè ñåññèé.
SessionsDraw(DaysToDisplay-1,0);
return(0);
}
//--Âñïîìîãàòåëüíûå ôóíêöèè.
//--DrawLine - äëÿ îòðèñîâêè âåðòèêàëüíûõ ëèíèé íà ãðàôèêå.
void DrawLine(string text,datetime time,int style,int width,color clr)
{
string name=prefix+TimeToStr(time);
if(ObjectFind(name)<0) { ObjectCreate(name,OBJ_VLINE,0,time,0); }
ObjectSet(name,OBJPROP_COLOR,clr);
ObjectSet(name,OBJPROP_STYLE,style);
ObjectSet(name,OBJPROP_BACK,true);
ObjectSet(name,OBJPROP_WIDTH,width);
ObjectSetText(name,text);
}
//--SwitchStatus - âêëþ÷åíèå/îòêëþ÷åíèå ñåññèé íà ãðàôèêå.
bool SwitchStatus()
{
string name = "Ðàìêè ñåññèé: âêë/îòêë.";
string symb = "";
color clr=Black;
int currX = 0;
int currY = 0;
int X = 5;
int Y = 15;
if(ObjectFind(name)<0)
{
//--óñòàíàâëèâàåì öâåò è ñîñòîÿíèå ïåðåêëþ÷àòåëÿ.
if(SessionRectangleOn) { symb=CharToStr(164); clr=OnColor; }
else { symb=CharToStr(161); clr=OffColor; }
ObjectCreate(name,OBJ_LABEL,0,0,0);
ObjectSet(name,OBJPROP_CORNER,1);
ObjectSet(name,OBJPROP_XDISTANCE,X);
ObjectSet(name,OBJPROP_YDISTANCE,Y);
ObjectSet(name,OBJPROP_BACK,true);
ObjectSetText(name,symb,14,"Wingdings",clr);
}
currX = ObjectGet( name, OBJPROP_XDISTANCE );
currY = ObjectGet( name, OBJPROP_YDISTANCE );
//--åñëè äåðãàëè - ìåíÿåì ñîñòîÿíèå
if(currX-X!=0 || currY-Y!=0)
{
SessionRectangleOn=!SessionRectangleOn;
if(SessionRectangleOn) { symb=CharToStr(164); clr=OnColor; }
else { symb=CharToStr(161); clr=OffColor; }
ObjectSet(name,OBJPROP_XDISTANCE,X);
ObjectSet(name,OBJPROP_YDISTANCE,Y);
ObjectSetText(name,"",0,"Arial",CLR_NONE);
ObjectSetText(name,symb,14,"Wingdings",clr);
}
WindowRedraw();
}
// Îòîáðàæåíèå òîðãîâûõ ñåññèé â çàäàííîì èíòåðâàëå âðåìåíè
//
// barshiftD1from - ñìåùåíèå äíåâíîãî áàðà íà÷àëà ïåðèîäà îòîáðàæåíèÿ
// barshiftD1to - ñìåùåíèå äíåâíîãî áàðà îêîí÷àíèÿ ïåðèîäà îòîáðàæåíèÿ
//
void SessionsDraw(int barshiftD1from,int barshiftD1to)
{
// Äîçàãðóçêà èñòîðèè èíñòðóìåíòà
if(HistoryDownloadTime<TimeCurrent()-3600)
{
CopySeries(daily,MODE_TIME,Symbol(),PERIOD_D1);
HistoryDownloadTime=TimeCurrent();
}
if(!SessionRectangleOn || Period()>PERIOD_H1) { SessionsClose(); return; }
static datetime counted_bar=0;
if(iTime(Symbol(),PERIOD_D1,0)>counted_bar)
{
SessionsClose();
counted_bar=iTime(Symbol(),PERIOD_D1,0);
}
datetime SessionBeginUTC=0;
datetime SessionBegin=0;
datetime SessionEndUTC = 0;
datetime SessionEnd = 0;
barshiftD1from=MathMax(0,barshiftD1from);
barshiftD1to=MathMax(0,barshiftD1to);
for(int daybarshift=barshiftD1from; daybarshift>=barshiftD1to; daybarshift --)
{
// Äàòà îòðèñîâêè:
datetime day = iTime ( Symbol(), PERIOD_D1, daybarshift );
string idstring = TimeToStr ( day, TIME_DATE );
if(day<1) { continue; }
// Çäåñü è äàëåå ïðèâîäèì âðåìÿ ê âðåìåíè áðîêåðà, äëÿ êîðåêòíîãî ïîçèöèîíèðîâàíèÿ íà ãðàôèêå öåíû.
//+-------------------------------------------------------------------------------------+
//--Ñèäíåéñêàÿ ñåññèÿ
SessionBeginUTC = TimeTableToUTC ( day, SydneyBegins, SydneyDSTStarts, SydneyDSTEnds );
SessionBegin = UTCToLocalTime ( SessionBeginUTC, Broker_TimeZone, Broker_DST_start, Broker_DST_end ) - 24*3600;
SessionEndUTC = TimeTableToUTC ( day, SydneyEnds, SydneyDSTStarts, SydneyDSTEnds );
SessionEnd = UTCToLocalTime ( SessionEndUTC, Broker_TimeZone, Broker_DST_start, Broker_DST_end );
OHLC(SessionBegin,SessionEnd);
PlaceRectangle("Sydney "+idstring,"Sydney",SessionBeginUTC-SessionBegin,SessionBegin,low,SessionEnd,high,SydneyColor,SydneyBackColor,3);
// Íà÷àëî ñëåäóþùåé ñèäíåéñêîé ñåññèè, èñêëþ÷àÿ ïÿòíèöó:
if(TimeDayOfYear(day)==DayOfYear() && DayOfWeek()!=5)
{
SessionBeginUTC = TimeTableToUTC ( day, SydneyBegins, SydneyDSTStarts, SydneyDSTEnds );
SessionBegin = UTCToLocalTime ( SessionBeginUTC, Broker_TimeZone, Broker_DST_start, Broker_DST_end );
SessionEndUTC = TimeTableToUTC ( day, SydneyEnds, SydneyDSTStarts, SydneyDSTEnds ) + 24*3600;
SessionEnd = UTCToLocalTime ( SessionEndUTC, Broker_TimeZone, Broker_DST_start, Broker_DST_end );
OHLC(SessionBegin,SessionEnd);
PlaceRectangle("Sydney "+idstring+".","Sydney",SessionBeginUTC-SessionBegin,SessionBegin,low,SessionEnd,high,SydneyColor,SydneyBackColor,3);
}
//+-------------------------------------------------------------------------------------+
//--Òîêèéñêàÿ ñåññèÿ
SessionBeginUTC = TimeTableToUTC ( day, TokyoBegins, 0, 0 );
SessionBegin = UTCToLocalTime ( SessionBeginUTC, Broker_TimeZone, Broker_DST_start, Broker_DST_end );
SessionEnd=SessionBegin+(TokyoEnds-TokyoBegins);
OHLC(SessionBegin,SessionEnd);
PlaceRectangle("Tokyo "+idstring,"Tokyo",SessionBeginUTC-SessionBegin,SessionBegin,low,SessionEnd,high,TokyoColor,TokyoBackColor,0);
//+-------------------------------------------------------------------------------------+
//--Ãîíêîíãñêàÿ ñåññèÿ
SessionBeginUTC = TimeTableToUTC ( day, HongKongBegins, 0, 0 );
SessionBegin = UTCToLocalTime ( SessionBeginUTC, Broker_TimeZone, Broker_DST_start, Broker_DST_end );
SessionEnd=SessionBegin+(HongKongEnds-HongKongBegins);
OHLC(SessionBegin,SessionEnd);
PlaceRectangle("Hong Kong "+idstring,"Hong Kong",SessionBeginUTC-SessionBegin,SessionBegin,low,SessionEnd,high,HongKongColor,HongKongBackColor,1);
//+-------------------------------------------------------------------------------------+
//--Ôðàíêôóðò
SessionBeginUTC = TimeTableToUTC ( day, FrankfurtBegins, FrankfurtDSTStarts, FrankfurtDSTEnds );
SessionBegin = UTCToLocalTime ( SessionBeginUTC, Broker_TimeZone, Broker_DST_start, Broker_DST_end );
SessionEnd=SessionBegin+(FrankfurtEnds-FrankfurtBegins);
OHLC(SessionBegin,SessionEnd);
PlaceRectangle("Frankfurt "+idstring,"Frankfurt, Madrid",SessionBeginUTC-SessionBegin,SessionBegin,low,SessionEnd,high,FrankfurtColor,FrankfurtBackColor,2);
//+-------------------------------------------------------------------------------------+
//--Ëîíäîí
SessionBeginUTC = TimeTableToUTC ( day, LondonBegins, LondonDSTStarts, LondonDSTEnds );
SessionBegin = UTCToLocalTime ( SessionBeginUTC, Broker_TimeZone, Broker_DST_start, Broker_DST_end );
SessionEnd=SessionBegin+(LondonEnds-LondonBegins);
OHLC(SessionBegin,SessionEnd);
PlaceRectangle("London "+idstring,"London",SessionBeginUTC-SessionBegin,SessionBegin,low,SessionEnd,high,LondonColor,LondonBackColor,3);
//+-------------------------------------------------------------------------------------+
//--×èêàãî
SessionBeginUTC = TimeTableToUTC ( day, ChicagoBegins, ChicagoDSTStarts, ChicagoDSTEnds );
SessionBegin = UTCToLocalTime ( SessionBeginUTC, Broker_TimeZone, Broker_DST_start, Broker_DST_end );
SessionEnd=SessionBegin+(ChicagoEnds-ChicagoBegins);
OHLC(SessionBegin,SessionEnd);
PlaceRectangle("Chicago "+idstring,"Chicago",SessionBeginUTC-SessionBegin,SessionBegin,low,SessionEnd,high,ChicagoColor,ChicagoBackColor,1);
//+-------------------------------------------------------------------------------------+
//--Íüþ-Éîðê
SessionBeginUTC = TimeTableToUTC ( day, NewYorkBegins, NewYorkDSTStarts, NewYorkDSTEnds);
SessionBegin = UTCToLocalTime ( SessionBeginUTC, Broker_TimeZone, Broker_DST_start, Broker_DST_end);
SessionEnd=SessionBegin+(NewYorkEnds-NewYorkBegins);
OHLC(SessionBegin,SessionEnd);
PlaceRectangle("NewYork "+idstring,"New York",SessionBeginUTC-SessionBegin,SessionBegin,low,SessionEnd,high,NewYorkColor,NewYorkBackColor,0);
//+-------------------------------------------------------------------------------------+
if(PlaceUTCPoints)
{
//--Australian Securities Exchange (ASX)
PlaceImportantPointsUTC(TimeTableToUTC(day,ASXOpens,0,0),ASXOpensText,ASXOpensDescr);
PlaceImportantPointsUTC(TimeTableToUTC(day,ASXCloses,0,0),ASXClosesText,ASXClosesDescr);
//+-------------------------------------------------------------------------------------+
// Tokyo TSE
PlaceImportantPointsUTC(TimeTableToUTC(day,TokyoSEOpens,0,0),TokyoSEOpensText,TokyoSEOpensDescr);
PlaceImportantPointsUTC(TimeTableToUTC(day,TokyoSECloses,0,0),TokyoSEClosesText,TokyoSEClosesDescr);
//+-------------------------------------------------------------------------------------+
// Hong Kong HKEx
PlaceImportantPointsUTC(TimeTableToUTC(day,HKExOpens,0,0),HKExOpensText,HKExOpensDescr);
PlaceImportantPointsUTC(TimeTableToUTC(day,HKExCloses,0,0),HKExClosesText,HKExClosesDescr);
//+-------------------------------------------------------------------------------------+
// Shanghai SSE
PlaceImportantPointsUTC(TimeTableToUTC(day,SSEOpens,0,0),SSEOpensText,SSEOpensDescr);
PlaceImportantPointsUTC(TimeTableToUTC(day,SSECloses,0,0),SSEClosesText,SSEClosesDescr);
//+-------------------------------------------------------------------------------------+
// Moscow ÐÒÑ
PlaceImportantPointsUTC(TimeTableToUTC(day,RTSOpens,MoscowDSTStarts,MoscowDSTEnds),RTSOpensText,RTSOpensDescr);
PlaceImportantPointsUTC(TimeTableToUTC(day,RTSCloses,MoscowDSTStarts,MoscowDSTEnds),RTSClosesText,RTSClosesDescr);
//+-------------------------------------------------------------------------------------+
// Frankfurt FSE
PlaceImportantPointsUTC(TimeTableToUTC(day,FSEOpens,FrankfurtDSTStarts,FrankfurtDSTEnds),FSEOpensText,FSEOpensDescr);
PlaceImportantPointsUTC(TimeTableToUTC(day,FSECloses,FrankfurtDSTStarts,FrankfurtDSTEnds),FSEClosesText,FSEClosesDescr);
//+-------------------------------------------------------------------------------------+
// Madrid SIBE
PlaceImportantPointsUTC(TimeTableToUTC(day,SIBEOpens,MadridDSTStarts,MadridDSTEnds),SIBEOpensText,SIBEOpensDescr);
PlaceImportantPointsUTC(TimeTableToUTC(day,SIBECloses,MadridDSTStarts,MadridDSTEnds),SIBEClosesText,SIBEClosesDescr);
//+-------------------------------------------------------------------------------------+
// London LSE
PlaceImportantPointsUTC(TimeTableToUTC(day,LSEOpens,LondonDSTStarts,LondonDSTEnds),LSEOpensText,LSEOpensDescr);
PlaceImportantPointsUTC(TimeTableToUTC(day,LSECloses,LondonDSTStarts,LondonDSTEnds),LSEClosesText,LSEClosesDescr);
//+-------------------------------------------------------------------------------------+
// New York NYSE
PlaceImportantPointsUTC(SessionBeginUTC+(NYSEOpens-NewYorkBegins),NYSEOpensText,NYSEOpensDescr);
PlaceImportantPointsUTC(SessionBeginUTC+(NYSECloses-NewYorkBegins),NYSEClosesText,NYSEClosesDescr);
}
}
WindowRedraw();
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void OHLC(datetime fromtime,datetime totime)
{
int barshiftfrom=iBarShift(Symbol(),PERIOD_H1,fromtime);
int barshiftto=iBarShift(Symbol(),PERIOD_H1,totime-1);
if(iTime(Symbol(),PERIOD_H1,barshiftto) > totime - 1) { barshiftto ++; }
if(iTime(Symbol(),PERIOD_H1,barshiftfrom) > fromtime) { barshiftfrom ++; }
int highestbarshift=iHighest(Symbol(),PERIOD_H1,MODE_HIGH,barshiftfrom-barshiftto+1,barshiftto);
int lowestbarshift=iLowest(Symbol(),PERIOD_H1,MODE_LOW,barshiftfrom-barshiftto+1,barshiftto);
high=iHigh(Symbol(),PERIOD_H1,highestbarshift);
low=iLow(Symbol(),PERIOD_H1,lowestbarshift);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
datetime TimeTableToUTC(datetime date,datetime time,datetime DSTStarts,datetime DSTEnds)
{
datetime UTC=StrToTime(TimeToStr(date,TIME_DATE)+" "+TimeHour(time)+":"+TimeMinute(time)+":"+TimeSeconds(time));
if(DSTStarts<=DSTEnds) { if(UTC>=DSTStarts && UTC<=DSTEnds) { UTC-=3600; } }
else { if(!(UTC>DSTEnds && UTC<DSTStarts)) { UTC-=3600; } }
return(UTC);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
datetime UTCToLocalTime(datetime UTC,int TimeZone,datetime DSTStarts,datetime DSTEnds)
{
datetime timeyear=StrToTime("01.01."+TimeYear(UTC));
datetime dstyear=StrToTime("01.01."+TimeYear(DSTStarts));
datetime dststart=timeyear+DSTStarts-dstyear;
datetime dstend=timeyear+DSTEnds-dstyear;
if(DSTStarts<=DSTEnds && DSTStarts!=0) { if(UTC>=dststart && UTC<=dstend) { UTC+=3600; } }
else if(DSTStarts>=DSTEnds && DSTEnds!=0)
{
datetime endofyear=StrToTime("31.12."+TimeYear(dststart));
if(( UTC>=timeyear && UTC<=dstend) || (UTC>=dststart && UTC<=endofyear)) { UTC+=3600; }
}
return(UTC+TimeZone*3600);
}
// Óäàëèòü âñå ãðàôè÷åñêèå îáúåêòû èíäèêàòîðà òîðãîâûõ ñåññèé
//
void SessionsClose()
{
int obj_total=ObjectsTotal()-1;
string objname="";
string fix="#@!_";
for(int obj=obj_total; obj>=0; obj --)
{
objname=ObjectName(obj);
if(StringFind(objname,fix)>=0) { ObjectDelete(objname); continue; }
if(!PlaceUTCPoints) { continue; }
if(StringFind(objname," UTC ")>=0) { ObjectDelete(objname); }
}
}
// Îòðèñîâàòü îäíó ñåññèþ
//
void PlaceRectangle(string session,string description,int toUTC,datetime time1,double price1,datetime time2,double price2,color session_color,color rect_color,int level)
{
if(time2<time1 || time2>time1+12*3600) { return; }
string fix="#@!_";
string objname="";
// Ðàìêè ñåññèé íà ãðàôèêå öåíû
objname=fix+session+" Session High";
if(ObjectFind(objname)<0) { ObjectCreate(objname,OBJ_TREND,0,time1,price2,time2,price2); }
ObjectSet(objname,OBJPROP_COLOR,session_color);
ObjectSet(objname,OBJPROP_BACK,true);
ObjectSet(objname,OBJPROP_STYLE,RectLineStyle);
ObjectSet(objname,OBJPROP_WIDTH,RectLineWidth);
ObjectSet(objname,OBJPROP_RAY,0);
objname=fix+session+" Session Low";
if(ObjectFind(objname)<0) { ObjectCreate(objname,OBJ_TREND,0,time1,price1,time2,price1); }
ObjectSet(objname,OBJPROP_COLOR,session_color);
ObjectSet(objname,OBJPROP_BACK,true);
ObjectSet(objname,OBJPROP_STYLE,RectLineStyle);
ObjectSet(objname,OBJPROP_WIDTH,RectLineWidth);
ObjectSet(objname,OBJPROP_RAY,0);
objname=fix+session+" Session Begin";
if(ObjectFind(objname)<0) { ObjectCreate(objname,OBJ_TREND,0,time1,price2,time1,price1); }
ObjectSet(objname,OBJPROP_COLOR,session_color);
ObjectSet(objname,OBJPROP_BACK,true);
ObjectSet(objname,OBJPROP_STYLE,RectLineStyle);
ObjectSet(objname,OBJPROP_WIDTH,RectLineWidth);
ObjectSet(objname,OBJPROP_RAY,0);
objname=fix+session+" Session End";
if(ObjectFind(objname)<0) { ObjectCreate(objname,OBJ_TREND,0,time2,price1,time2,price2); }
ObjectSet(objname,OBJPROP_COLOR,session_color);
ObjectSet(objname,OBJPROP_BACK,true);
ObjectSet(objname,OBJPROP_STYLE,RectLineStyle);
ObjectSet(objname,OBJPROP_WIDTH,RectLineWidth);
ObjectSet(objname,OBJPROP_RAY,0);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void PlaceImportantPointsUTC(datetime UTC,string text,string description)
{
datetime time=UTCToLocalTime(UTC,Broker_TimeZone,Broker_DST_start,Broker_DST_end);
string name=TimeToStr(UTC,TIME_DATE|TIME_MINUTES)+" UTC ";
int barshift=iBarShift(Symbol(),0,time);
if((IndicatorCounted()<barshift+1) || (barshift==0) || (IndicatorCounted()==0)) return;
string settext="";
low=MathMin(MathMin(Low[barshift],Low[barshift+1]),Low[barshift-1]);
if(low<0.1) { low=Bid; }
if(ObjectFind(name)<0) { ObjectCreate(name,OBJ_ARROW,0,time,low-8*Point); settext=description; }
else
{
settext=ObjectDescription(name);
if(StringFind(settext,description)<0) { settext=settext+", "+description; }
}
ObjectSet(name,OBJPROP_ARROWCODE,191);
ObjectSet(name,OBJPROP_BACK,true);
ObjectSet(name,OBJPROP_COLOR,UTCPointColor);
ObjectSetText(name,settext);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void CopySeries(datetime &array[],int MODE,string SYMBOL,int PERIOD)
{
ArrayCopySeries(array,MODE,SYMBOL,PERIOD);
int lasterror=GetLastError();
if(lasterror==4066) // ERR_HISTORY_WILL_UPDATED
{
int attempt=0;
while(lasterror==4066 && attempt<10)
{
Sleep(5000);
ArrayCopySeries(array,MODE,SYMBOL,PERIOD);
lasterror=GetLastError();
}
}
}
//+------------------------------------------------------------------+
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
---