TZ-Pivot
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «sdx-tzpivots.mq5» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
TZ-Pivot — пользовательский индикатор для MetaTrader 4, который рассчитывает пивот-уровни и смежные ценовые уровни на основе часовых поясов. Основная идея заключается в определении торговой сессии в целевом часовом поясе и расчёте уровней на основе максимума, минимума и закрытия предыдущего торгового дня в этой сессии.
Индикатор отрисовывает горизонтальные линии уровней и текстовые метки на графике цен. Доступны несколько групп уровней: стандартные пивоты R1–R3 и S1–S3, промежуточные уровни между ними, уровни Фибоначчи и Камарилла по диапазону вчерашнего дня, а также уровни максимума, минимума и открытия. Каждая группа может быть включена или отключена отдельно.
Верхний левый угол может содержать информационный комментарий с диапазонами и экстремумами текущего и предыдущего торгового дня. Индикатор обновляет расчёты не чаще раза в минуту и поддерживает настройку часового пояса сервера и целевой сессии. Имеется режим отладочного логирования для вывода служебной информации в окно экспертов.
Настройки программы
| Настройка | Описание |
|---|---|
| LocalTimeZone | Локальный часовой пояс — Часовой пояс, соответствующий серверному времени MT4 (например, 1 или 2 для Европы). 0 — без корректировки. |
| DestTimeZone | Целевой часовой пояс — Часовой пояс торговой сессии, для которой рассчитываются уровни (например, 1 или 2 для европейской сессии). 0 — GMT. |
| LineStyle | Стиль линии — Стиль линий уровней на графике. |
| LineThickness | Толщина линии — Толщина линий уровней на графике. |
| ShowComment | Показать комментарий — Отображение информационного комментария в верхнем левом углу графика с диапазонами и экстремумами. |
| ShowHighLowOpen | Показать High/Low/Open — Отображение горизонтальных линий максимума, минимума и открытия текущего и предыдущего торгового дня. |
| ShowSweetSpots | Показать Sweet Spots — Отображение уровней Sweet Spots — двух ближайших золотых уровней Bid (округлённых до 50 пунктов). |
| ShowPivots | Показать пивоты — Отображение стандартных пивотных уровней R1–R3 (сопротивление) и S1–S3 (поддержка), а также центрального пивота. |
| ShowMidPitvot | Показать промежуточные пивоты — Отображение промежуточных пивотных уровней между основными уровнями поддержки и сопротивления. |
| ShowFibos | Показать Фибоначчи — Отображение уровней Фибоначчи по диапазону вчерашнего торгового дня. |
| ShowCamarilla | Показать Камарилла — Отображение уровней Камарилла (H3, H4, L3, L4), рассчитанных по диапазону вчерашнего дня. |
| ShowLevelPrices | Показать цены уровней — Отображение числовых значений цен на текстовых метках горизонтальных линий уровней. |
| number of bars from right, where lines labels will be shown (BarForLabels) | Бар для меток — Количество баров от правого края графика, где будут отображаться метки линий уровней. |
| DebugLogger | Отладочный логгер — Включает вывод отладочной информации (время, часовые пояса, индексы баров) в окно экспертов. |
Поиск по коду файла
#property indicator_chart_window
/* Introduction:
Calculation of pivot and similar levels based on time zones.
If you want to modify the colors, please scroll down to line
200 and below (where it says "Calculate Levels") and change
the colors. Valid color names can be obtained by placing
the curor on a color name (e.g. somewhere in the word "Orange"
and pressing F1).
Time-Zone Inputs:
LocalTimeZone: TimeZone for which MT4 shows your local time,
e.g. 1 or 2 for Europe (GMT+1 or GMT+2 (daylight
savings time). Use zero for no adjustment.
The MetaQuotes demo server uses GMT +2.
DestTimeZone: TimeZone for the session from which to calculate
the levels (e.g. 1 or 2 for the European session
(without or with daylight savings time).
Use zero for GMT
Example: If your MT server is living in the EST (Eastern Standard Time,
GMT-5) zone and want to calculate the levels for the London trading
session (European time in summer GMT+1), then enter -5 for
LocalTimeZone, 1 for Dest TimeZone.
Please understand that the LocalTimeZone setting depends on the
time on your MetaTrader charts (for example the demo server
from MetaQuotes always lives in CDT (+2) or CET (+1), no matter
what the clock on your wall says.
If in doubt, leave everything to zero.
*/
extern int LocalTimeZone= 0;
extern int DestTimeZone= 0;
extern int LineStyle= 2;
extern int LineThickness= 1;
extern bool ShowComment = false;
extern bool ShowHighLowOpen = false;
extern bool ShowSweetSpots = false;
extern bool ShowPivots = true;
extern bool ShowMidPitvot = true;
extern bool ShowFibos= false;
extern bool ShowCamarilla = false;
extern bool ShowLevelPrices = true;
extern int BarForLabels= 10; // number of bars from right, where lines labels will be shown
extern bool DebugLogger = false;
/*
The following doesn't work yet, please leave it to 0/24:
TradingHoursFrom: First hour of the trading session in the destination
time zone.
TradingHoursTo: Last hour of the trading session in the destination
time zone (the hour starting with this value is excluded,
i.e. 18 means up to 17:59 o'clock)
Example: If you are lving in the EST (Eastern Standard Time, GMT-5)
zone and want to calculate the levels for the London trading
session (European time GMT+1, 08:00 - 17:00), then enter
-5 for LocalTimeZone, 1 for Dest TimeZone, 8 for HourFrom
and 17 for hour to.
*/
int TradingHoursFrom= 0;
int TradingHoursTo= 24;
int digits; //decimal digits for symbol's price
int init()
{
// код доступен только после оплаты
}
int deinit()
{
int obj_total= ObjectsTotal();
string gvname;
for (int i= obj_total; i>=0; i--) {
string name= ObjectName(i);
if (StringSubstr(name,0,7)=="[PIVOT]")
ObjectDelete(name);
}
gvname=Symbol()+"st";
GlobalVariableDel(gvname);
gvname=Symbol()+"p";
GlobalVariableDel(gvname);
gvname=Symbol()+"r1";
GlobalVariableDel(gvname);
gvname=Symbol()+"r2";
GlobalVariableDel(gvname);
gvname=Symbol()+"r3";
GlobalVariableDel(gvname);
gvname=Symbol()+"s1";
GlobalVariableDel(gvname);
gvname=Symbol()+"s2";
GlobalVariableDel(gvname);
gvname=Symbol()+"s3";
GlobalVariableDel(gvname);
gvname=Symbol()+"yh";
GlobalVariableDel(gvname);
gvname=Symbol()+"to";
GlobalVariableDel(gvname);
gvname=Symbol()+"yl";
GlobalVariableDel(gvname);
gvname=Symbol()+"ds1";
GlobalVariableDel(gvname);
gvname=Symbol()+"ds2";
GlobalVariableDel(gvname);
gvname=Symbol()+"flm618";
GlobalVariableDel(gvname);
gvname=Symbol()+"flm382";
GlobalVariableDel(gvname);
gvname=Symbol()+"flp382";
GlobalVariableDel(gvname);
gvname=Symbol()+"flp5";
GlobalVariableDel(gvname);
gvname=Symbol()+"fhm382";
GlobalVariableDel(gvname);
gvname=Symbol()+"fhp382";
GlobalVariableDel(gvname);
gvname=Symbol()+"fhp618";
GlobalVariableDel(gvname);
gvname=Symbol()+"h3";
GlobalVariableDel(gvname);
gvname=Symbol()+"h4";
GlobalVariableDel(gvname);
gvname=Symbol()+"l3";
GlobalVariableDel(gvname);
gvname=Symbol()+"l4";
GlobalVariableDel(gvname);
gvname=Symbol()+"mr3";
GlobalVariableDel(gvname);
gvname=Symbol()+"mr2";
GlobalVariableDel(gvname);
gvname=Symbol()+"mr1";
GlobalVariableDel(gvname);
gvname=Symbol()+"ms1";
GlobalVariableDel(gvname);
gvname=Symbol()+"ms2";
GlobalVariableDel(gvname);
gvname=Symbol()+"ms3";
GlobalVariableDel(gvname);
return(0);
}
int start()
{
// код доступен только после оплаты
}
static datetime timelastupdate= 0;
static datetime lasttimeframe= 0;
datetime startofday= 0,
startofyesterday= 0;
double today_high= 0,
today_low= 0,
today_open= 0,
yesterday_high= 0,
yesterday_open= 0,
yesterday_low= 0,
yesterday_close= 0;
int idxfirstbaroftoday= 0,
idxfirstbarofyesterday= 0,
idxlastbarofyesterday= 0;
if (CurTime()-timelastupdate<60 && Period()==lasttimeframe)
return (0);
lasttimeframe= Period();
timelastupdate= CurTime();
if(Period() > 1440) {
Alert("Error - Chart period is greater than 1 day.");
return(-1); // then exit
}
if (DebugLogger) {
Print("Local time current bar:", TimeToStr(Time[0]));
Print("Dest time current bar: ", TimeToStr(Time[0]- (LocalTimeZone - DestTimeZone)*3600), ", tzdiff= ", LocalTimeZone - DestTimeZone);
}
string gvname; double gvval;
ComputeDayIndices(LocalTimeZone, DestTimeZone, idxfirstbaroftoday, idxfirstbarofyesterday, idxlastbarofyesterday);
startofday= Time[idxfirstbaroftoday]; // datetime (x-value) for labes on horizontal bars
gvname=Symbol()+"st";
gvval=startofday;
GlobalVariableSet(gvname,gvval);
startofyesterday= Time[idxfirstbarofyesterday]; // datetime (x-value) for labes on horizontal bars
yesterday_high= -99999; // not high enough to remain alltime high
yesterday_low= +99999; // not low enough to remain alltime low
for (int idxbar= idxfirstbarofyesterday; idxbar>=idxlastbarofyesterday; idxbar--) {
if (yesterday_open==0) // grab first value for open
yesterday_open= Open[idxbar];
yesterday_high= MathMax(High[idxbar], yesterday_high);
yesterday_low= MathMin(Low[idxbar], yesterday_low);
yesterday_close= Close[idxbar];
}
today_open= Open[idxfirstbaroftoday]; // should be open of today start trading hour
today_high= -99999; // not high enough to remain alltime high
today_low= +99999; // not low enough to remain alltime low
for (int j= idxfirstbaroftoday; j>=0; j--) {
today_high= MathMax(today_high, High[j]);
today_low= MathMin(today_low, Low[j]);
}
double level= (yesterday_high + yesterday_low + yesterday_close) / 3;
SetTimeLine("YesterdayStart", "yesterday", idxfirstbarofyesterday, CadetBlue, level - 4*Point);
SetTimeLine("YesterdayEnd", "today", idxfirstbaroftoday, CadetBlue, level - 4*Point);
if (DebugLogger)
Print("Timezoned values: yo= ", yesterday_open, ", yc =", yesterday_close, ", yhigh= ", yesterday_high, ", ylow= ", yesterday_low, ", to= ", today_open);
double p, q, d, r1,r2,r3, s1,s2,s3;
d = (today_high - today_low);
q = (yesterday_high - yesterday_low);
p = (yesterday_high + yesterday_low + yesterday_close) / 3;
p=NormalizeDouble(p,digits);
gvname=Symbol()+"p";
gvval=p;
GlobalVariableSet(gvname,gvval);
r1 = (2*p)-yesterday_low;
r1=NormalizeDouble(r1,digits);
gvname=Symbol()+"r1";
gvval=r1;
GlobalVariableSet(gvname,gvval);
r2 = p+(yesterday_high - yesterday_low); // r2 = p-s1+r1;
r2=NormalizeDouble(r2,digits);
gvname=Symbol()+"r2";
gvval=r2;
GlobalVariableSet(gvname,gvval);
r3 = (2*p)+(yesterday_high-(2*yesterday_low));
r3=NormalizeDouble(r3,digits);
gvname=Symbol()+"r3";
gvval=r3;
GlobalVariableSet(gvname,gvval);
s1 = (2*p)-yesterday_high;
s1=NormalizeDouble(s1,digits);
gvname=Symbol()+"s1";
gvval=s1;
GlobalVariableSet(gvname,gvval);
s2 = p-(yesterday_high - yesterday_low); // s2 = p-r1+s1;
s2=NormalizeDouble(s2,digits);
gvname=Symbol()+"s2";
gvval=s2;
GlobalVariableSet(gvname,gvval);
s3 = (2*p)-((2* yesterday_high)-yesterday_low);
s3=NormalizeDouble(s3,digits);
gvname=Symbol()+"s3";
gvval=s3;
GlobalVariableSet(gvname,gvval);
if (ShowHighLowOpen) {
SetLevel("Y\'s High", yesterday_high, Orange, LineStyle, LineThickness, startofyesterday);
SetLevel("T\'s Open", today_open, Orange, LineStyle, LineThickness, startofday);
SetLevel("Y\'s Low", yesterday_low, Orange, LineStyle, LineThickness, startofyesterday);
gvname=Symbol()+"yh";
gvval=yesterday_high;
GlobalVariableSet(gvname,gvval);
gvname=Symbol()+"to";
gvval=today_open;
GlobalVariableSet(gvname,gvval);
gvname=Symbol()+"yl";
gvval=yesterday_low;
GlobalVariableSet(gvname,gvval);
}
if (ShowSweetSpots) {
int ssp1, ssp2;
double ds1, ds2;
ssp1= Bid / Point;
ssp1= ssp1 - ssp1%50;
ssp2= ssp1 + 50;
ds1= ssp1*Point;
ds2= ssp2*PoiПоказано первые 50% кода (символов: 14989)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.