Level Trading
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «level trading 123.mq5» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Данный файл является пользовательским индикатором для MetaTrader 5, написанным на языке MQL5. Он предназначен для отображения на графике ценовых уровней и линий тренда, построенных на основе анализа фракталов. Индикатор не выполняет торговых операций и не даёт рекомендаций, а лишь визуализирует рыночную структуру.
Входные параметры позволяют настраивать номер индикатора для одновременного использования нескольких копий, цвета линий тренда и уровней, а также пороги подтверждения уровней по ширине. Дополнительно можно включить автоматическую подстройку значений под текущий таймфрейм, задать количество баров по обе стороны от фрактала, ограничить глубину истории и управлять привязкой экстремумов к уровням.
Индикатор рассчитывает фракталы, определяет длину уровней и объединяет близкие ценовые отметки, после чего отображает их в виде графических объектов. Все настройки и логика работы подтверждены исходным кодом, дополнительные возможности не заявлены.
Настройки программы
| Настройка | Описание |
|---|---|
| IndicatorNumber | Номер индикатора — Уникальный номер индикатора, позволяющий запускать несколько копий на одном графике без конфликтов имён объектов. |
| TrendUpColor | Цвет восходящего тренда — Цвет восходящих линий тренда, соединяющих нижние фракталы. |
| TrendDownColor | Цвет нисходящего тренда — Цвет нисходящих линий тренда, соединяющих верхние фракталы. |
| LevelColor | Цвет уровня — Цвет отображения горизонтальных ценовых уровней на графике. |
| Width2LevelConfirmation | Порог подтверждения уровня шириной 2 — Пороговое значение ширины уровня, при котором уровень отображается линией толщиной 2. |
| Width3LevelConfirmation | Порог подтверждения уровня шириной 3 — Пороговое значение ширины уровня, при котором уровень отображается линией толщиной 3. |
| Width4LevelConfirmation | Порог подтверждения уровня шириной 4 — Пороговое значение ширины уровня, при котором уровень отображается линией толщиной 4. |
| Width5LevelConfirmation | Порог подтверждения уровня шириной 5 — Пороговое значение ширины уровня, при котором уровень отображается линией толщиной 5. |
| SnapExtremumsToLevelOnChar | Привязывать экстремумы к уровню — Если включено, экстремумы привязываются к ценовому уровню, что влияет на отображение линий тренда. |
| FractalBarsOnEachSide | Баров по обе стороны фрактала — Количество баров слева и справа от бара, необходимое для подтверждения фрактала. |
| ProceedMaxHistoryBars | Максимум обрабатываемых баров истории — Максимальное количество исторических баров, обрабатываемых индикатором для расчёта уровней и трендов. |
| LevelActuality | Актуальность уровня — Максимальное количество баров, в течение которых уровень остаётся актуальным для объединения с другими уровнями. |
| RestDefaultTimeframeValues | Использовать значения по умолчанию для таймфрейма — Если включено, значения параметров ExtremumToLevelMaxGap и PriceDeltaFor1Bar автоматически устанавливаются в соответствии с текущим таймфреймом. |
| ExtremumToLevelMaxGap | Максимальный разрыв между экстремумом и уровнем — Максимальное расстояние в пунктах между экстремумом и уровнем, при котором они считаются совпадающими для объединения. |
| PriceDeltaFor1Bar | Дельта цены на 1 бар — Величина изменения цены в пунктах, приходящаяся на один бар, используется для построения наклонных линий уровней. |
Поиск по коду файла
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Red
#property indicator_color2 Blue
extern int IndicatorNumber=1;
extern color TrendUpColor=Blue;
extern color TrendDownColor=Red;
extern color LevelColor=DarkGray;
extern int Width2LevelConfirmation=3;
extern int Width3LevelConfirmation=5;
extern int Width4LevelConfirmation=7;
extern int Width5LevelConfirmation=10;
extern bool SnapExtremumsToLevelOnChar=True;
extern int FractalBarsOnEachSide=7;
extern int ProceedMaxHistoryBars=2000;
extern int LevelActuality=200;
extern bool RestDefaultTimeframeValues=True;
extern int ExtremumToLevelMaxGap=15;
extern double PriceDeltaFor1Bar=0.4;
int LevelLength[];
int LevelWidth[];
int PriceCrossedLevel;
double Long[];
double Short[];
int init()
{
// код доступен только после оплаты
}
int deinit()
{
int i=0;
for(i=Bars-1;i>=0;i--)
if (ObjectFind(StringConcatenate("Level_",IndicatorNumber,"_",i))!=-1)
ObjectDelete(StringConcatenate("Level_",IndicatorNumber,"_",i));
for(i=Bars-1;i>=0;i--)
if (ObjectFind(StringConcatenate("Trend_",IndicatorNumber,"_",i))!=-1)
ObjectDelete(StringConcatenate("Trend_",IndicatorNumber,"_",i));
return(0);
}
int LastBarWasHighLow(int LELB, int LEHB)
{
if (LELB==-1 && LEHB!=-1)
return(1);
if (LELB!=-1 && LEHB==-1)
return(-1);
if (LELB!=-1 && LEHB!=-1 && LELB>LEHB)
return(1);
if (LELB!=-1 && LEHB!=-1 && LELB<LEHB)
return(-1);
return(0);
}
int start()
{
// код доступен только после оплаты
}
int i,j;
int BarsToCheck;
int Stop;
int CurrState; //CurrState=0 - не нашли пересечения, 1-пересечение вверх, -1-пересечение вниз
int LastExtremumHighBar=-1;
int LastExtremumLowBar=-1;
int LastExtremumBar=-1;
double iFractalValue=0,jFractalValue=0;
if (IndicatorCounted()<0)
return(-1);
if (Bars-IndicatorCounted()==1)
return(0);
deinit();
SetIndexStyle(0,DRAW_ARROW,0,3);
SetIndexArrow(0,251);
SetIndexStyle(1,DRAW_ARROW,0,3);
SetIndexArrow(1,251);
ArrayInitialize(Long,0);
ArrayInitialize(Short,0);
if (RestDefaultTimeframeValues==1)
{
switch(Period())
{
case 1: //M1
{
ExtremumToLevelMaxGap=2;
PriceDeltaFor1Bar=0.05;
break;
}
case 5: //M5
{
ExtremumToLevelMaxGap=5;
PriceDeltaFor1Bar=0.1;
break;
}
case 15: //M15
{
ExtremumToLevelMaxGap=8;
PriceDeltaFor1Bar=0.2;
break;
}
case 30: //M30
{
ExtremumToLevelMaxGap=10;
PriceDeltaFor1Bar=0.3;
break;
}
case 60: //H1
{
ExtremumToLevelMaxGap=15;
PriceDeltaFor1Bar=0.4;
break;
}
case 240: //H4
{
ExtremumToLevelMaxGap=25;
PriceDeltaFor1Bar=0.4;
break;
}
case 1440: //D1
{
ExtremumToLevelMaxGap=75;
PriceDeltaFor1Bar=1.5;
break;
}
case 10080: //W1
{
ExtremumToLevelMaxGap=150;
PriceDeltaFor1Bar=5;
break;
}
case 43200: //MN
{
ExtremumToLevelMaxGap=300;
PriceDeltaFor1Bar=24;
break;
}
}
}
if (Width2LevelConfirmation<=1)
Width2LevelConfirmation=2;
if (Width3LevelConfirmation<=Width2LevelConfirmation)
Width3LevelConfirmation=Width2LevelConfirmation+1;
if (Width4LevelConfirmation<=Width3LevelConfirmation)
Width4LevelConfirmation=Width3LevelConfirmation+1;
if (Width5LevelConfirmation<=Width4LevelConfirmation)
Width5LevelConfirmation=Width4LevelConfirmation+1;
PriceCrossedLevel=ExtremumToLevelMaxGap*2;
ArrayResize(LevelLength,Bars);
ArrayInitialize(LevelLength,0);
ArrayResize(LevelWidth,Bars);
ArrayInitialize(LevelWidth,1);
if (FractalBarsOnEachSide<=0)
FractalBarsOnEachSide=1;
for(i=MathMin(ProceedMaxHistoryBars,Bars-FractalBarsOnEachSide-1);i>=FractalBarsOnEachSide;i--)
{
if (i==Lowest(Symbol(),Period(),MODE_LOW,FractalBarsOnEachSide*2+1,i-FractalBarsOnEachSide))
{
switch(LastBarWasHighLow(LastExtremumLowBar,LastExtremumHighBar))
{
case -1:
{
if (Low[i]<Low[LastExtremumLowBar])
{
Long[i]=Low[i];
Long[LastExtremumLowBar]=0;
LastExtremumLowBar=i;
}
break;
}
case 1:
{
if (Low[i]<High[LastExtremumHighBar])
{
Long[i]=Low[i];
LastExtremumLowBar=i;
}
break;
}
case 0:
{
Long[i]=Low[i];
LastExtremumLowBar=i;
break;
}
}
}
if (i==Highest(Symbol(),Period(),MODE_HIGH,FractalBarsOnEachSide*2+1,i-FractalBarsOnEachSide) && Long[i]==0)
{
switch(LastBarWasHighLow(LastExtremumLowBar,LastExtremumHighBar))
{
case 1:
{
if (High[i]>High[LastExtremumHighBar])
{
Short[i]=High[i];
Short[LastExtremumHighBar]=0;
LastExtremumHighBar=i;
}
break;
}
case -1:
{
if (High[i]>Low[LastExtremumLПоказано первые 50% кода (символов: 7647)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.