OrderBlocks
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «orderblocks (orgn)@amazing_owner.mq5» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Индикатор MetaTrader 4 для отображения зон Order Block на графике. Он определяет точки фракталов и рисует уровни верхней и нижней границы order block в виде трендовых линий, поддерживая отображение по телу свечи или по теням. Индикатор работает в текущем таймфрейме или на более высоких таймфреймах через мультитаймфреймовый вызов собственного файла.
Настройки программы
| Настройка | Описание |
|---|---|
| TimeFrame | Таймфрейм — Выбор таймфрейма для расчёта и отображения уровней Order Block, включая вариант текущего графика и более высокие таймфреймы. |
| Fractals period (FractalPeriod) | Период фрактала — Количество баров, используемых для определения фрактальных точек, служащих базой для построения зон Order Block. |
| Line on OB Candle (OBLineDraw) | Рисовать линии OB — Включает или отключает отрисовку трендовых линий уровней Order Block на свечах, удовлетворяющих условиям OB. |
| Line only on engulfing OB Candle (OBLineEngulfing) | Линии только на поглощающих OB — При включении линии рисуются только на свечах Order Block, которые являются поглощающими (engulfing). |
| Engulfing type (OBLineEngulfingType) | Тип поглощения — Определяет, какой частью свечи проверяется условие поглощающей свечи: по телу или по тени. |
| OB Line type (OBLineType) | Тип линии OB — Задаёт, по какому элементу свечи строятся уровни Order Block: по телу или по тени. |
| AlertHeader | Заголовок оповещений — Текстовый заголовок, добавляемый к сообщениям оповещений для удобной идентификации в логах и уведомлениях. |
| soundAlert | Звуковое оповещение — Включает воспроизведение звукового сигнала при срабатывании условий оповещения. |
| popupAlert | Всплывающее оповещение — Включает отображение всплывающего окна с сообщением при срабатывании условий оповещения. |
| pushAlert | Push-оповещение — Включает отправку push-уведомления на мобильное устройство терминала MetaTrader. |
| emailAlert | Email-оповещение — Включает отправку электронного письма с уведомлением при срабатывании условий оповещения. |
| VisualizationHeader | Заголовок визуализации — Текстовый заголовок раздела настроек визуальных параметров индикатора. |
| OB Line length, bars (OBLineLength) | Длина линии OB — Длина трендовых линий уровней Order Block в барах, определяющая горизонтальный размер отрисовки. |
| BULL OB Line color (OBLineColorBull) | Цвет линии бычьего OB — Цвет трендовых линий для бычьих (восходящих) зон Order Block. |
| BEAR OB Line color (OBLineColorBear) | Цвет линии медвежьего OB — Цвет трендовых линий для медвежьих (нисходящих) зон Order Block. |
| OB Line width (OBLineWidth) | Толщина линии OB — Толщина линий уровней Order Block в пикселях. |
| OB Line style (OBLineStyle) | Стиль линии OB — Стиль отрисовки линий уровней Order Block (сплошной, пунктир и т.д.). |
| Engulfing Highlight (EngulfingHighlight) | Подсветка поглощения — Включает визуальную подсветку прямоугольником области поглощающей свечи внутри зоны Order Block. |
| Bull engulfing Highlight color (EngulfingHighlightColorBull) | Цвет подсветки бычьего поглощения — Цвет прямоугольника подсветки для бычьих поглощающих свечей в зоне Order Block. |
| Bear engulfing Highlight color (EngulfingHighlightColorBear) | Цвет подсветки медвежьего поглощения — Цвет прямоугольника подсветки для медвежьих поглощающих свечей в зоне Order Block. |
Поиск по коду файла
#property version "1.03"
#property strict
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 clrAqua
#property indicator_color2 clrMagenta
#property indicator_width1 5
#property indicator_width2 5
const int MAX_LINES=25;
const string PREFIX="JBOB_";
const string NameUpper=PREFIX+"Upper_";
const string NameLower=PREFIX+"Lower_";
const string NameEngulfing=PREFIX+"Engulfing_";
enum ENG_TYPE
{
engBody=0,//Candle's body
engWick=1,//Candle's wick
};
enum enTimeFrames
{
tf_cu = PERIOD_CURRENT, // Current time frame
tf_m1 = PERIOD_M1, // 1 minute
tf_m5 = PERIOD_M5, // 5 minutes
tf_m15 = PERIOD_M15, // 15 minutes
tf_m30 = PERIOD_M30, // 30 minutes
tf_h1 = PERIOD_H1, // 1 hour
tf_h4 = PERIOD_H4, // 4 hours
tf_d1 = PERIOD_D1, // Daily
tf_w1 = PERIOD_W1, // Weekly
tf_mn1 = PERIOD_MN1, // Monthly
tf_n1 = -1, // First higher time frame
tf_n2 = -2, // Second higher time frame
tf_n3 = -3 // Third higher time frame
};
extern enTimeFrames TimeFrame = tf_cu;
input int FractalPeriod = 36; //Fractals period
input bool OBLineDraw = true;//Line on OB Candle
input bool OBLineEngulfing = false;//Line only on engulfing OB Candle
input ENG_TYPE OBLineEngulfingType = engBody;//Engulfing type
input ENG_TYPE OBLineType = engWick;//OB Line type
input string AlertHeader = "=== Alerts ===";//-------
input bool soundAlert = false;
input bool popupAlert = false;
input bool pushAlert = false;
input bool emailAlert = false;
input string VisualizationHeader = "=== Visualization ===";//-------
input int OBLineLength = 15;//OB Line length, bars
input color OBLineColorBull = clrAqua;//BULL OB Line color
input color OBLineColorBear = clrMagenta;//BEAR OB Line color
input int OBLineWidth = 1;//OB Line width
input ENUM_LINE_STYLE OBLineStyle = STYLE_DASH;//OB Line style
input bool EngulfingHighlight = false;//Engulfing Highlight
input color EngulfingHighlightColorBull = clrSkyBlue;//Bull engulfing Highlight color
input color EngulfingHighlightColorBear = clrTomato;//Bear engulfing Highlight color
double buffUp[],buffDown[],count[],m_level=0.0;
datetime m_level_updated=0;
int m_ind_upper=0,m_ind_lower=0;
string indicatorFileName,short_name="";
#define _mtfCall(_buff,_ind) iCustom(NULL,TimeFrame,indicatorFileName,0,FractalPeriod,OBLineDraw,OBLineEngulfing,OBLineEngulfingType,OBLineType,"",soundAlert,popupAlert,pushAlert,emailAlert,VisualizationHeader,OBLineLength,OBLineColorBull,OBLineColorBear,OBLineWidth,OBLineStyle,EngulfingHighlight,EngulfingHighlightColorBull,EngulfingHighlightColorBear,_buff,_ind)
int OnInit()
{
// код доступен только после оплаты
}
void OnDeinit(const int reason)
{
DeleteObjectsByPrefix(PREFIX);
}
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
// код доступен только после оплаты
}
int limit=fmin(fmax(rates_total-prev_calculated,FractalPeriod),rates_total-2); count[0]=limit;
if (TimeFrame != _Period)
{
limit = (int)fmax(limit,fmin(Bars-1,_mtfCall(2,0)*TimeFrame/_Period));
for (int i=limit;i>=0 && !_StopFlag; i--)
{
int y = iBarShift(NULL,TimeFrame,time[i]);
int x = iBarShift(NULL,TimeFrame,time[i-1]);
if (x!=y)
{
buffUp[i] = _mtfCall(0,y);
buffDown[i] = _mtfCall(1,y);
}
else
{
buffUp[i] = EMPTY_VALUE;
buffDown[i] = EMPTY_VALUE;
}
}
return(rates_total);
}
if(rates_total<=FractalPeriod) return 0;
limit=rates_total;
if(prev_calculated>0)
{
limit=rates_total-prev_calculated+FractalPeriod+1;
}
ArraySetAsSeries(open,true);
ArraySetAsSeries(high,true);
ArraySetAsSeries(low,true);
ArraySetAsSeries(close,true);
ArraySetAsSeries(time,true);
ArraySetAsSeries(buffUp,true);
ArraySetAsSeries(buffDown,true);
for(int i=limit-1;i>0;i--)
{
bool found_up=true;
for(int j=i+1;((j<rates_total) && ((j-i)<=FractalPeriod));j++)
{
if(low[j]<low[i])
{
found_up=false;
break;
}
}
if(found_up)
{
for(int j=i-1;(j>0 && ((i-j)<=FractalPeriod));j--)
{
if(low[j]<low[i])
{
found_up=false;
break;
}
}
}
if(found_up)
{
buffUp[i]=low[i];
if(time[i]>m_level_updated && i!=0)
{
bool engulfing_ok=false;
if(OBLineEngulfingType==engBody)
{
double L=close[i]<open[i] ? close[i] : open[i];
double H=close[i]<open[i] ? open[i] : close[i];
engulfing_ok=close[i-1]>open[i-1] && open[i-1]<=L && close[i-1]>H;
}
else if(OBLineEngulfingType==engWick)
{
engulfing_ok=low[i-1]<=low[i] && high[i-1]>high[i];
}
if(EngulfingHighlight && engulfing_ok)
{
DrawRectangle(0,NameEngulfing,time[i+1],MathMin(low[i],low[i-1]),time[i-1]+PeriodSeconds(),MathMax(high[i],high[i-1]),EngulfingHighlightColorBull,1,STYLE_SOLID);
}
if(!OBLineEngulfing) engulfing_ok=true;
if(engulfing_ok)
{
m_level_updated=time[i];
if(OBLineDraw)
{
m_ind_lower++;
if(m_ind_lower>MAX_LINES) m_ind_lower=1;
if(OBLineType==engBody)
{
if(close[i]>open[i])
{
m_level=close[i];
if(close[1]>open[i])
{
DrawTL(0,NameUpper+IntegerToString(m_ind_lower)/*+TimeToString(time[i])*/,time[i],close[i],time[i]+PeriodSeconds()*OBLineLength,close[i],OBLineColorBull,OBLineWidth,OBLineStyle);
DrawTL(0,NameLower+IntegerToString(m_ind_lower)/*TimeToString(time[i])*/,time[i],open[i],time[i]+PeriodSeconds()*OBLineLength,open[i],OBLineColorBull,OBLineWidth,OBLineStyle);
}
}
else
{
m_level=open[i];
if(close[1]>close[i])
{
DrawTL(0,NameUpper+IntegerToString(m_ind_lower)/*TimeToString(time[i])*/,time[i],open[i],time[i]+PeriodSeconds()*OBLineLength,open[i],OBLineColorBull,OBLineWidth,OBLineStyle);
DrawTL(0,NameLower+IntegerToString(m_ind_lower)/*TimeToString(time[i])*/,time[i],close[i],time[i]+PeriodSeconds()*OBLineLength,close[i],OBLineColorBull,OBLineWidth,OBLineStyle);
}
}
}
else if(OBLineType==engWick)
{
m_level=high[i];
if(close[1]>low[i])
{
DrawTL(0,NameUpper+IntegerToString(m_ind_lower)/*+TimeToString(time[i])*/,time[i],high[i],time[i]+PeriodSeconds()*OBLineLength,high[i],OBLineColorBull,OBLineWidth,OBLineStyle);
DrawTL(0,NameLower+IntegerToString(m_ind_lower)/*+TimeToString(time[i])*/,time[i],low[i],time[i]+PeriodSeconds()*OBLineLength,low[i],OBLineColorBull,OBLineWidth,OBLineStyle);
}
}
}
}
}
}
else
{
buffUp[i]=EMPTY_VALUE;
string nm=NameUpper+TimeToString(time[i]);
if(ObjectFind(0,nm)>=0)
{
color col=(color)ObjectGetInteger(0,nm,OBJPROP_COLOR);
if(col==OBLineColorBull) ObjectDelete(0,nm);
}
nm=NameLower+TimeToString(time[i]);
if(ObjectFind(0,nm)>=0)
{
color col=(color)ObjectGetInteger(0,nm,OBJPROP_COLOR);
if(col==OBLineColorBull) ObjectDelete(0,nm);
}
}
bool found_down=true;
for(int j=i+1;((j<rates_total) && ((j-i)<=FractalPeriod));j++)
{
if(high[j]>high[i])
{
found_down=false;
break;
}
}
if(found_down)
{
for(int j=i-1;(j>0 && ((i-j)<=FractalPeriod));j--)
{
if(high[j]>high[i])
{
found_down=false;
break;
}
}
}
if(found_down)
{
buffDown[i]=high[i];
if(time[i]>m_level_updated && i!=0)
{
bool engulfing_ok=false;
if(OBLineEngulfingType==engBody)
{
double L=close[i]<open[i] ? close[i] : open[i];
double H=close[i]<open[i] ? open[i] : close[i];
engulfing_ok=close[i-1]<open[i-1] && open[i-1]>=H && close[i-1]<L;
}
else if(OBLineEngulfingType==engWick)
{
engulfing_ok=low[i-1]<low[i] && high[i-1]>=high[i];
}
if(EngulfingHighlight && engulfing_ok)
{
DrawRectangle(0,NameEngulfing,time[i+1],MathMin(low[i],low[i-1]),time[i-1]+PeriodSeconds(Показано первые 50% кода (символов: 13934)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.