!!orderblocks 1.04 (mtf).mq5
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «!!orderblocks 1.04 (mtf).mq5» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Индикатор отображает на графике уровни ордер-блоков, определяемые на основе фрактального анализа ценовых данных. Поддерживается отрисовка линий и прямоугольников для бычьих и медвежьих ордер-блоков с настраиваемыми цветами, толщиной и стилями.
Индикатор работает в многотаймфреймном режиме, рассчитывая уровни на выбранном таймфрейме и отображая их на текущем графике. Доступны параметры фильтрации по типу поглощения свечей для уточнения отображаемых уровней.
Предусмотрена система уведомлений со звуковыми, всплывающими, push-уведомлениями и email-оповещениями. Имеется функция автоматической очистки устаревших графических объектов на графике.
Настройки программы
| Настройка | Описание |
|---|---|
| TimeFrame | Таймфрейм, на котором рассчитываются уровни ордер-блоков для многотаймфреймного отображения. |
| PREFIX | Префикс для имён графических объектов, создаваемых индикатором. |
| FractalPeriod | Период фрактала, определяющий глубину поиска экстремумов ценовых данных. |
| OBLineDraw | Включает или отключает отрисовку линий ордер-блоков на графике. |
| OBLineEngulfing | Включает отрисовку линий только для свечей поглощения рядом с ордер-блоками. |
| OBLineEngulfingType | Тип поглощения для фильтрации: тело свечи или фитиль. |
| OBLineType | Тип линии ордер-блока: тело свечи или фитиль. |
| AlertHeader | Заголовок текста для всплывающих уведомлений. |
| soundAlert | Включает или отключает звуковое оповещение. |
| popupAlert | Включает или отключает всплывающие уведомления на графике. |
| pushAlert | Включает или отключает push-уведомления на мобильные устройства. |
| emailAlert | Включает или отключает отправку email-оповещений. |
| VisualizationHeader | Заголовок текста для визуальных подписей на графике. |
| OBLineLength | Длина линий ордер-блоков в барах. |
| OBLineColorBull | Цвет линий ордер-блоков для бычьих уровней. |
| OBLineColorBear | Цвет линий ордер-блоков для медвежьих уровней. |
| OBLineWidth | Толщина линий ордер-блоков в пикселях. |
| OBLineStyle | Стиль линий ордер-блоков на графике. |
| EngulfingHighlight | Включает или отключает подсветку свечей поглощения рядом с ордер-блоками. |
| EngulfingHighlightColorBull | Цвет подсветки поглощения для бычьих ордер-блоков. |
| EngulfingHighlightColorBear | Цвет подсветки поглощения для медвежьих ордер-блоков. |
Поиск по коду файла
#property version "1.03"
#property strict
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 clrDodgerBlue
#property indicator_color2 clrRed
#property indicator_width1 2
#property indicator_width2 2
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 string PREFIX = "JBOB_";
input int FractalPeriod = 42; //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 = true;
input bool popupAlert = true;
input bool pushAlert = true;
input bool emailAlert = true;
input string VisualizationHeader = "=== Visualization ===";//-------
input int OBLineLength = 45;//OB Line length, bars
input color OBLineColorBull = clrDodgerBlue;//BULL OB Line color
input color OBLineColorBear = clrRed;//BEAR OB Line color
input int OBLineWidth = 1;//OB Line width
input ENUM_LINE_STYLE OBLineStyle = STYLE_SOLID;//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
const int MAX_LINES=25;
const string NameUpper=PREFIX+"Upper_";
const string NameLower=PREFIX+"Lower_";
const string NameEngulfing=PREFIX+"Engulfing_";
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,PREFIX,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]Показано первые 50% кода (символов: 13932)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.