sdx-tzpivots_mod.mq5
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «sdx-tzpivots_mod.mq5» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Индикатор TZ-Pivot рассчитывает пивот-точки и связанные торговые уровни на основе анализа часовых поясов. Он определяет максимум, минимум и закрытие предыдущего торгового дня в настраиваемом часовом поясе, а затем вычисляет стандартные уровни пивотов, зоны поддержки и сопротивления, уровни Фибоначчи, уровни Камариллы и промежуточные пивоты. Также отображаются зоны покупки и продажи с настраиваемыми уровнями входа и выхода.
Помимо этого, индикатор выполняет анализ тренда с помощью ADX, индекса силы (Force Index) и RSI, отображая направленные сигналы на графике. Можно включить отображение максимумов, минимумов и цен открытия, цветовую зонировку и ценовые подписи на линиях. Все пересчёты обновляются каждые 60 секунд и работают только на таймфреймах до дневного включительно.
Настройки программы
| Настройка | Описание |
|---|---|
| LocalTimeZone | Локальный часовой пояс — Часовой пояс, соответствующий локальному времени на графиках MetaTrader 4 (например, 1 или 2 для Европы). |
| DestTimeZone | Часовой пояс назначения — Часовой пояс, в котором рассчитываются торговые уровни (например, 1 или 2 для европейской сессии). |
| DailyOpenCalculate | Расчёт по цене открытия дня — Переключатель: при включении цена открытия используется как базовая точка для расчёта уровней вместо пивота. |
| ShowHighLowOpen | Показать максимум, минимум и открытие — Переключатель: при включении отображаются максимум, минимум и цена открытия. |
| ShowPivots | Показать пивоты — Переключатель: при включении отображаются уровни поддержки и сопротивления S1–S3 и R1–R3. |
| ShowMidPitvot | Показать промежуточные пивоты — Переключатель: при включении отображаются промежуточные пивот-уровни. |
| ShowFibos | Показать уровни Фибоначчи — Переключатель: при включении отображаются уровни Фибоначчи на диапазоне предыдущего дня. |
| ShowCamarilla | Показать уровни Камариллы — Переключатель: при включении отображаются уровни Камариллы. |
| ShowLevelPrices | Показать цены на линиях — Переключатель: при включении на линиях отображаются числовые значения цен. |
| DebugLogger | Отладочный журнал — Переключатель: при включении выводится дополнительная диагностическая информация в журнал. |
| Zones | Показать зоны — Переключатель: при включении на графике отображаются цветные зоны покупки и продажи. |
| BuyArea | Цвет зоны покупки — Цвет зоны покупки. |
| SellArea | Цвет зоны продажи — Цвет зоны продажи. |
| BuySellStart | Начало зоны покупки/продажи — Начальное значение в пунктах для первой зоны покупки/продажи относительно цены открытия. |
| BuySellEnd | Конец зоны покупки/продажи — Конечное значение в пунктах для второй зоны покупки/продажи относительно цены открытия. |
| number of bars from right, where lines labels will be shown (BarForLabels) | Бар для подписей — Количество баров от правого края графика, на котором отображаются подписи линий. |
| LineStyle | Стиль линий — Стиль линий уровней. |
| LineThickness | Толщина линий — Толщина линий уровней. |
Поиск по коду файла
#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 bool DailyOpenCalculate = false;
extern bool ShowHighLowOpen = false;
extern bool ShowPivots = false;
extern bool ShowMidPitvot = false;
extern bool ShowFibos= false;
extern bool ShowCamarilla = false;
extern bool ShowLevelPrices = true;
extern bool DebugLogger = false;
extern bool Zones = true;
extern color BuyArea = LimeGreen;
extern color SellArea = Red;
extern int BuySellStart = 20;
extern int BuySellEnd = 40;
extern int BarForLabels= 0; // number of bars from right, where lines labels will be shown
extern int LineStyle= 0;
extern int LineThickness= 1;
int ADX_period = 14;
int FI_period = 14;
int RSI_period = 14;
#define BUY1 "BUY1"
#define BUY2 "BUY2"
#define SELL1 "SELL1"
#define SELL2 "SELL2"
/*
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);
gvname=Symbol()+"bl1";
GlobalVariableDel(gvname);
gvname=Symbol()+"bl2";
GlobalVariableDel(gvname);
gvname=Symbol()+"bt";
GlobalVariableDel(gvname);
gvname=Symbol()+"sl1";
GlobalVariableDel(gvname);
gvname=Symbol()+"sl2";
GlobalVariableDel(gvname);
gvname=Symbol()+"st";
GlobalVariableDel(gvname);
ObjectsDeleteAll(0, OBJ_LABEL);
ObjectsDeleteAll(0, OBJ_RECTANGLE);
ObjectDelete("ADX"); ObjectDelete("FI"); ObjectDelete("RSI");
ObjectDelete("Signal");
ObjectDelete("Analysis"); ObjectDelete("Strength"); ObjectDelete("Trend");
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, White, level+10*Point);
SetTimeLine("YesterdayEnd", "Today", idxfirstbaroftoday, White, level+10*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,bl1,bl2,sl1,sl2;
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);
string Signal ="";
color col;
double open;
if (DailyOpenCalculate == true) { open = today_open; }
else { open = p; }
bl1 = open+(BuySellStart*Point);
bl1=NormalizeDouble(bl1,digits);
gvname=Symbol()+"bl1";
gvval=bl1;
GlobalVariableSet(gvname,gvval);
bl2 = open+(BuySellEnd*Point);
bl2=NormalizeDouble(bl2,digits);
gvname=Symbol()+"bl2";
gvval=bl2;
GlobalVariableSet(gvname,gvval);
sl1 = open-(BuySellStart*Point);
sl1=NormalizeDouble(sl1,digits);
gvname=Symbol()+"sl1";
gvval=sl1;
GlobalVariableSet(gvname,gvval);
sl2 = open-(BuySellEnd*Point);
sl2=NormalizeDouble(sl2,digits);
gvname=Symbol()+"sl2";
gvval=sl2;
GlobalVariableSet(gvname,gvval);
if(Ask>(bl1-5*Point)&&Ask<(bl1+5*Point)){Signal = "BUY Stop @ "+DoubleToStr(bl1,Digits)+""
+"\n, TP @ "+DoubleToStr(bl2,Digits)+""
+"\n, SL @ "+DoubleToStr(bl1-30*Point,Digits)+"";
col = LimeGreen;
}
if(Ask>(bl2-5*Point)&&Ask<(bl2+5*Point)){Signal = "Breakout BUY Stop @ "+DoubleToStr(bl2,Digits)+""
+"\n, TP @ "+DoubleToStr(bl2+20*Point,Digits)+""
+"\n, SL @ "+DoubleToStr(bl1-10*Point,Digits)+"";
col = LimeGreen;
}
if(Bid<(sl1+5*Point)&&Bid>(sl1-5*Point)){Signal = "SELL Stop @ "+DoubleToStr(sl1,Digits)+""
+"\n, TP @ "+DoubleToStr(sl2,Digits)+""
+"\n, SL @ "+DoubleToStr(sl1+30*Point,Digits)+"";
col = Red;
}
if(Bid<(sl2+5*Point)&&Bid>(sl2-5*Point)){Signal = "Breakout SELL Stop @ "+DoubleToStr(sl2,Digits)+""
+"\n, TP @ "+DoubleToStr(sl2-20*Point,Digits)+""
+"\n, SL @ "+DoubleToStr(sl1+10*Point,Digits)+"";
col = Red;
}
else{Signal = "Waiting..."; col = Silver;}
ObjectCreate("Signal", OBJ_LABEL, 0, 0, 0);
ObjectSetText("Signal", Signal, 8, "Arial", col);
ObjectSet("Signal", OBJPROP_CORNER, 0);
ObjectSet("Signal", OBJPROP_XDISTANCE, 7);
ObjectSet("Signal", OBJPROP_YDISTANCE, 180);
SetLevel("Pivot", p, Silver, LineStyle, LineThickness, startofday);
SetLevel("BUY Level 1", bl1, BuyArea, LineStyle, LineThickness, startofday);
SetLevel("BUY Level 2", bl2, BuyArea, LineStyle, LineThickness, startofday);
SetLevel("SELL Level 1", sl1, SellArea, LineStyle, LineThickness, startofday);
SetLevel("SELL Level 2", sl2, SellArea, LineStyle, LineThickness, startofday);
if (DailyOpenCalculate == true)
{
SetLevel("Open", open, Silver, LineStyle, LineThickness, startofday);
}
Graphics(BUY1, bl1, bl2, BuyArea, startofday);
Graphics(BUY2, bl2, bl2, BuyArea, startofday);
Graphics(SELL1, sl1, sl2, SellArea, startofday);
Graphics(SELL2, sl2, sl2, SellArea, startofday);
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*Point;
SetLevel(DoubleToStr(ds1,Digits), ds1, Gold, LineStylПоказано первые 50% кода (символов: 21625)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.