3 Line Break On Chart +levels
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «# tlb oc v02 mod.mq5» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Этот исходный файл представляет собой пользовательский индикатор для MetaTrader 5, предназначенный для отображения на графике горизонтальных линий поддержки и сопротивления, рассчитанных по данным нескольких таймфреймов. Индикатор не использует буферы и рисует объекты в окне графика.
В коде объявлены входные параметры, позволяющие выбрать, для каких таймфреймов отображать уровни, задать количество баров для расчёта и толщину линий, а также включить или отключить показ дополнительных подтверждающих уровней. Индикатор работает на текущем символе и обрабатывает данные таймфреймов от M1 до MN1.
При инициализации индикатор задаёт короткое имя и сбрасывает сохранённые временные метки баров для каждого периода. При деинициализации удаляются все созданные графические объекты. Основная логика выполняется в функции start, которая для каждого разрешённого таймфрейма вызывает процедуру отображения уровней.
Индикатор не содержит торговых функций и не выполняет торговых операций; он только визуализирует расчётные уровни на графике.
Настройки программы
| Настройка | Описание |
|---|---|
| LB | Целочисленный параметр, задающий количество линий в расчёте уровней поддержки и сопротивления. Используется в алгоритме для определения глубины анализа. |
| maxBarsForPeriod | Целочисленный параметр, ограничивающий максимальное количество баров, используемых для расчёта уровней на каждом таймфрейме. Если значение больше нуля, количество баров не превышает указанное. |
| showM01 | Логический переключатель, разрешающий или запрещающий отображение уровней для минутного таймфрейма M1. |
| showM05 | Логический переключатель, разрешающий или запрещающий отображение уровней для пятиминутного таймфрейма M5. |
| showM15 | Логический переключатель, разрешающий или запрещающий отображение уровней для пятнадцатиминутного таймфрейма M15. |
| showM30 | Логический переключатель, разрешающий или запрещающий отображение уровней для тридцатиминутного таймфрейма M30. |
| showH01 | Логический переключатель, разрешающий или запрещающий отображение уровней для часового таймфрейма H1. |
| showH04 | Логический переключатель, разрешающий или запрещающий отображение уровней для четырёхчасового таймфрейма H4. |
| showD01 | Логический переключатель, разрешающий или запрещающий отображение уровней для дневного таймфрейма D1. |
| showW01 | Логический переключатель, разрешающий или запрещающий отображение уровней для недельного таймфрейма W1. |
| showMN1 | Логический переключатель, разрешающий или запрещающий отображение уровней для месячного таймфрейма MN1. |
| LineWidth | Целочисленный параметр, задающий толщину отображаемых горизонтальных линий на графике. |
| ShowC | Логический переключатель, включающий или отключающий отображение дополнительных подтверждающих уровней (пунктирных линий). |
Поиск по коду файла
#property indicator_chart_window
#property indicator_buffers 0
extern int LB = 3;
extern int maxBarsForPeriod = 1000;
extern bool showM01 = true;
extern bool showM05 = true;
extern bool showM15 = true;
extern bool showM30 = true;
extern bool showH01 = true;
extern bool showH04 = true;
extern bool showD01 = true;
extern bool showW01 = true;
extern bool showMN1 = true;
extern color Res_Color = Red,
Sup_Color = Green,
ResC_Color = Gray,
SupC_Color = Gray;
extern int LineWidth = 1;
extern bool ShowC = true;
int init()
{
// код доступен только после оплаты
}
int deinit()
{
DeleteHLineObject( StringConcatenate( getPeriodAsString( PERIOD_M1 ), " Sup" ) );
DeleteHLineObject( StringConcatenate( getPeriodAsString( PERIOD_M1 ), " Res" ) );
DeleteHLineObject( StringConcatenate( getPeriodAsString( PERIOD_M1 ), " Sup C" ) );
DeleteHLineObject( StringConcatenate( getPeriodAsString( PERIOD_M1 ), " Res C" ) );
DeleteHLineObject( StringConcatenate( getPeriodAsString( PERIOD_M5 ), " Sup" ) );
DeleteHLineObject( StringConcatenate( getPeriodAsString( PERIOD_M5 ), " Res" ) );
DeleteHLineObject( StringConcatenate( getPeriodAsString( PERIOD_M5 ), " Sup C" ) );
DeleteHLineObject( StringConcatenate( getPeriodAsString( PERIOD_M5 ), " Res C" ) );
DeleteHLineObject( StringConcatenate( getPeriodAsString( PERIOD_M15 ), " Sup" ) );
DeleteHLineObject( StringConcatenate( getPeriodAsString( PERIOD_M15 ), " Res" ) );
DeleteHLineObject( StringConcatenate( getPeriodAsString( PERIOD_M15 ), " Sup C" ) );
DeleteHLineObject( StringConcatenate( getPeriodAsString( PERIOD_M15 ), " Res C" ) );
DeleteHLineObject( StringConcatenate( getPeriodAsString( PERIOD_M30 ), " Sup" ) );
DeleteHLineObject( StringConcatenate( getPeriodAsString( PERIOD_M30 ), " Res" ) );
DeleteHLineObject( StringConcatenate( getPeriodAsString( PERIOD_M30 ), " Sup C" ) );
DeleteHLineObject( StringConcatenate( getPeriodAsString( PERIOD_M30 ), " Res C" ) );
DeleteHLineObject( StringConcatenate( getPeriodAsString( PERIOD_H1 ), " Sup" ) );
DeleteHLineObject( StringConcatenate( getPeriodAsString( PERIOD_H1 ), " Res" ) );
DeleteHLineObject( StringConcatenate( getPeriodAsString( PERIOD_H1 ), " Sup C" ) );
DeleteHLineObject( StringConcatenate( getPeriodAsString( PERIOD_H1 ), " Res C" ) );
DeleteHLineObject( StringConcatenate( getPeriodAsString( PERIOD_H4 ), " Sup" ) );
DeleteHLineObject( StringConcatenate( getPeriodAsString( PERIOD_H4 ), " Res" ) );
DeleteHLineObject( StringConcatenate( getPeriodAsString( PERIOD_H4 ), " Sup C" ) );
DeleteHLineObject( StringConcatenate( getPeriodAsString( PERIOD_H4 ), " Res C" ) );
DeleteHLineObject( StringConcatenate( getPeriodAsString( PERIOD_D1 ), " Sup" ) );
DeleteHLineObject( StringConcatenate( getPeriodAsString( PERIOD_D1 ), " Res" ) );
DeleteHLineObject( StringConcatenate( getPeriodAsString( PERIOD_D1 ), " Sup C" ) );
DeleteHLineObject( StringConcatenate( getPeriodAsString( PERIOD_D1 ), " Res C" ) );
DeleteHLineObject( StringConcatenate( getPeriodAsString( PERIOD_W1 ), " Sup" ) );
DeleteHLineObject( StringConcatenate( getPeriodAsString( PERIOD_W1 ), " Res" ) );
DeleteHLineObject( StringConcatenate( getPeriodAsString( PERIOD_W1 ), " Sup C" ) );
DeleteHLineObject( StringConcatenate( getPeriodAsString( PERIOD_W1 ), " Res C" ) );
DeleteHLineObject( StringConcatenate( getPeriodAsString( PERIOD_MN1 ), " Sup" ) );
DeleteHLineObject( StringConcatenate( getPeriodAsString( PERIOD_MN1 ), " Res" ) );
DeleteHLineObject( StringConcatenate( getPeriodAsString( PERIOD_MN1 ), " Sup C" ) );
DeleteHLineObject( StringConcatenate( getPeriodAsString( PERIOD_MN1 ), " Res C" ) );
return(0);
}
double Diap( int mt4Period, bool up, int C, int shift )
{
int i;
double MM;
if(up)
{
MM = get_max( mt4Period, shift );
for(i = 1; i < C; i++)
if(get_max( mt4Period, shift-i ) > MM)
MM = get_max( mt4Period, shift-i );
}
if(!up)
{
MM = get_min( mt4Period, shift );
for(i = 1; i < C; i++)
if(get_min( mt4Period, shift-i ) < MM)
MM = get_min( mt4Period, shift-i );
}
return(MM);
}
void EmulateDoubleBuffer( double& buffer[], int numBars )
{
if(ArraySize(buffer) < numBars)
{
ArraySetAsSeries(buffer, false);
ArrayResize(buffer, numBars);
ArraySetAsSeries(buffer, true);
}
}
void DeleteHLineObject(string name)
{
ObjectDelete(name);
ObjectDelete(name + "_Label");
}
void ShowHLineObject(string name, color clr, int style, double dValue, int shift )
{
if(ObjectFind(name)!= 0)
{
CreateHLineObject(name,clr, style, dValue, shift);
}
{
ObjectSet(name + "_Label",OBJPROP_PRICE1,dValue);
ObjectSet(name + "_Label",OBJPROP_TIME1,Time[0] + Period() * shift);
ObjectSet(name + "_Label",OBJPROP_STYLE, style);
}
ObjectSet(name, OBJPROP_PRICE1, dValue);
}
void CreateHLineObject(string name, color clr, int style, double dValue, int shift )
{
{
ObjectCreate (name + "_Label", OBJ_TEXT, 0,Time[0] + Period() * shift, dValue);
ObjectSetText (name + "_Label", name, 7, "Verdana", clr);
}
ObjectCreate (name, OBJ_HLINE, 0, Time[0], dValue);
ObjectSet (name, OBJPROP_STYLE, style );
ObjectSet (name, OBJPROP_COLOR, clr);
ObjectSet (name, OBJPROP_WIDTH, LineWidth);
}
string getPeriodAsString( int mt4Period )
{
string periodname = 0;
switch( mt4Period )
{
case PERIOD_M1: { periodname = "M1"; break; }
case PERIOD_M5: { periodname = "M5"; break; }
case PERIOD_M15: { periodname = "M15"; break; }
case PERIOD_M30: { periodname = "M30"; break; }
case PERIOD_H1: { periodname = "H1"; break; }
case PERIOD_H4: { periodname = "H4"; break; }
case PERIOD_D1: { periodname = "D1"; break; }
case PERIOD_W1: { periodname = "W1"; break; }
case PERIOD_MN1: { periodname = "MN1"; break; }
}
return (periodname);
}
static datetime prevBarTime_M01 = NULL;
static datetime prevBarTime_M05 = NULL;
static datetime prevBarTime_M15 = NULL;
static datetime prevBarTime_M30 = NULL;
static datetime prevBarTime_H01 = NULL;
static datetime prevBarTime_H04 = NULL;
static datetime prevBarTime_D01 = NULL;
static datetime prevBarTime_W01 = NULL;
static datetime prevBarTime_MN1 = NULL;
void set_prevBarTime( int mt4Period, datetime value )
{
switch( mt4Period )
{
case PERIOD_M1: { prevBarTime_M01 = value; break; }
case PERIOD_M5: { prevBarTime_M05 = value; break; }
case PERIOD_M15: { prevBarTime_M15 = value; break; }
case PERIOD_M30: { prevBarTime_M30 = value; break; }
case PERIOD_H1: { prevBarTime_H01 = value; break; }
case PERIOD_H4: { prevBarTime_H04 = value; break; }
case PERIOD_D1: { prevBarTime_D01 = value; break; }
case PERIOD_W1: { prevBarTime_W01 = value; break; }
case PERIOD_MN1: { prevBarTime_MN1 = value; break; }
}
}
datetime get_prevBarTime( int mt4Period )
{
switch( mt4Period )
{
case PERIOD_M1: { return (prevBarTime_M01); break; }
case PERIOD_M5: { return (prevBarTime_M05); break; }
case PERIOD_M15: { return (prevBarTime_M15); break; }
case PERIOD_M30: { return (prevBarTime_M30); break; }
case PERIOD_H1: { return (prevBarTime_H01); break; }
case PERIOD_H4: { return (prevBarTime_H04); break; }
case PERIOD_D1: { return (prevBarTime_D01); break; }
case PERIOD_W1: { return (prevBarTime_W01); break; }
case PERIOD_MN1: { return (prevBarTime_MN1); break; }
}
}
static datetime prevBarCount_M01 = NULL;
static datetime prevBarCount_M05 = NULL;
static datetime prevBarCount_M15 = NULL;
static datetime prevBarCount_M30 = NULL;
static datetime prevBarCount_H01 = NULL;
static datetime prevBarCount_H04 = NULL;
static datetime prevBarCount_D01 = NULL;
static datetime prevBarCount_W01 = NULL;
static datetime prevBarCount_MN1 = NULL;
void set_prevBarCount( int mt4Period, int value )
{
switch( mt4Period )
{
case PERIOD_M1: { prevBarCount_M01 = value; break; }
case PERIOD_M5: { prevBarCount_M05 = value; break; }
case PERIOD_M15: { prevBarCount_M15 = value; break; }
case PERIOD_M30: { prevBarCount_M30 = value; break; }
case PERIOD_H1: { prevBarCount_H01 = value; break; }
case PERIOD_H4: { prevBarCount_H04 = value; break; }
case PERIOD_D1: { prevBarCount_D01 = value; break; }
case PERIOD_W1: { prevBarCount_W01 = value; break; }
case PERIOD_MN1: { prevBarCount_MN1 = value; break; }
}
}
int get_prevBarCount( int mt4Period )
{
switch( mt4Period )
{
case PERIOD_M1: { return (prevBarCount_M01); break; }
case PERIOD_M5: { return (prevBarCount_M05); break; }
case PERIOD_M15: { return (prevBarCount_M15); break; }
case PERIOD_M30: { return (prevBarCount_M30); break; }
case PERIOD_H1: { return (prevBarCount_H01); break; }
case PERIOD_H4: { return (prevBarCount_H04); break; }
case PERIOD_D1: { return (prevBarCount_D01); break; }
case PERIOD_W1: { return (prevBarCount_W01); break; }
case PERIOD_MN1: { return (prevBarCount_MN1); break; }
}
}
double TLBMax_M01[];
double TLBMax_M05[];
double TLBMax_M1Показано первые 50% кода (символов: 14944)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.