VOLUME SWINGS & SR LEVELS
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «volume swings & sr levels@amazing_owner.mq5» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Индикатор для MetaTrader 4, отображающий на графике линии тренда, уровни поддержки и сопротивления, а также информацию об объёме. Использует фрактальный анализ для определения экстремумов цены и строит на их основе горизонтальные уровни и наклонные трендовые линии. На графике выводятся стрелки направления движения, текстовые метки с рассчитанным объёмом и уровни с настраиваемым визуальным оформлением.
Настройки программы
| Настройка | Описание |
|---|---|
| TrendUpColor | Цвет бычьего тренда — Задаёт цвет линий тренда, отображающих восходящее движение цены. |
| TrendDownColor | Цвет медвежьего тренда — Задаёт цвет линий тренда, отображающих нисходящее движение цены. |
| SnapExtremumsToLevelOnChar | Привязка экстремумов к уровню — Определяет, следует ли корректировать положение ранее найденных экстремумов при перерисовке уровней. |
| FractalBarsOnEachSide | Баров с каждой стороны фрактала — Количество баров с каждой стороны от проверяемой свечи для определения фрактального экстремума. |
| ProceedMaxHistoryBars | Максимум баров истории — Ограничивает количество обрабатываемых баров исторических данных при расчёте. |
| LevelActuality | Актуальность уровня — Задаёт период актуальности построенного уровня в барах. |
| RestDefaultTimeframeValues | Сброс значений по умолчанию — При включении автоматически подбирает параметры ExtremumToLevelMaxGap и PriceDeltaFor1Bar в зависимости от текущего таймфрейма. |
| ExtremumToLevelMaxGap | Макс. разрыв экстремум–уровень — Максимально допустимое отклонение экстремума от уровня для их объединения. |
| PriceDeltaFor1Bar | Ценовой сдвиг на бар — Величина ценового смещения, применяемая при построении и расчёте уровней. |
Поиск по коду файла
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Yellow
#property indicator_color2 Yellow
extern color TrendUpColor=Aqua;
extern color TrendDownColor=Red;
extern bool SnapExtremumsToLevelOnChar=True;
extern int FractalBarsOnEachSide=5;
extern int ProceedMaxHistoryBars=1000;
extern int LevelActuality=160;
extern bool RestDefaultTimeframeValues=1;
extern int ExtremumToLevelMaxGap=100;
extern double PriceDeltaFor1Bar=20;
int LevelLength[];
int LevelWidth[];
int PriceCrossedLevel;
double longList[];
double shortList[];
int init()
{
// код доступен только после оплаты
}
int deinit()
{
int i=0;
for (i=Bars-1;i>=0;i--)
if (ObjectFind("Level_"+i)!=-1)
ObjectDelete("Level_"+i);
for (i=Bars-1;i>=0;i--)
if (ObjectFind("Trend_"+i)!=-1)
ObjectDelete("Trend_"+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;
int LastExtremumHighBar=-1;
int LastExtremumLowBar=-1;
int LastExtremumBar=-1;
double iFractalValue=0,jFractalValue=0;
SetIndexStyle(0,DRAW_ARROW,0,1);
SetIndexArrow(0,233);
SetIndexStyle(1,DRAW_ARROW,0,1);
SetIndexArrow(1,234);
ArrayInitialize(longList,0);
ArrayInitialize(shortList,0);
if (RestDefaultTimeframeValues==1)
{
switch (Period())
{
case 1:
{
ExtremumToLevelMaxGap=2;
PriceDeltaFor1Bar=0.2;
break;
}
case 5:
{
ExtremumToLevelMaxGap=5;
PriceDeltaFor1Bar=0.2;
break;
}
case 15:
{
ExtremumToLevelMaxGap=8;
PriceDeltaFor1Bar=0.2;
break;
}
case 30:
{
ExtremumToLevelMaxGap=10;
PriceDeltaFor1Bar=0.3;
break;
}
case 60:
{
ExtremumToLevelMaxGap=15;
PriceDeltaFor1Bar=0.4;
break;
}
case 240:
{
ExtremumToLevelMaxGap=25;
PriceDeltaFor1Bar=0.4;
break;
}
case 1440:
{
ExtremumToLevelMaxGap=75;
PriceDeltaFor1Bar=1.5;
break;
}
case 10080:
{
ExtremumToLevelMaxGap=150;
PriceDeltaFor1Bar=5;
break;
}
case 43200:
{
ExtremumToLevelMaxGap=300;
PriceDeltaFor1Bar=24;
break;
}
}
}
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])
{
longList[i]=Low[i];
longList[LastExtremumLowBar]=0;
LastExtremumLowBar=i;
}
break;
}
case 1:
{
if (Low[i]<High[LastExtremumHighBar])
{
longList[i]=Low[i];
LastExtremumLowBar=i;
}
break;
}
case 0:
{
longList[i]=Low[i];
LastExtremumLowBar=i;
break;
}
}
}
if (i==Highest(Symbol(),Period(),MODE_HIGH,FractalBarsOnEachSide*2+1,i-FractalBarsOnEachSide) && longList[i]==0)
{
switch (LastBarWasHighLow(LastExtremumLowBar,LastExtremumHighBar))
{
case 1:
{
if (High[i]>High[LastExtremumHighBar])
{
shortList[i]=High[i];
shortList[LastExtremumHighBar]=0;
LastExtremumHighBar=i;
}
break;
}
case -1:
{
if (High[i]>Low[LastExtremumLowBar])
{
shortList[i]=High[i];
LastExtremumHighBar=i;
}
break;
}
case 0:
{
shortList[i]=High[i];
LastExtremumHighBar=i;
break;
}
}
}
}
for (i=MathMin(ProceedMaxHistoryBars,Bars-FractalBarsOnEachSide-1);i>=FractalBarsOnEachSide;i--)
{
if (longList[i]==Low[i])
{
Stop=-1;
CurrState=0;
for (j=i-1;j>=0 && Stop==-1;j--)
{
if (CurrState==-1)
if (High[j]>Low[i]+(i-j)*PriceDeltaFor1Bar*Point+PriceCrossedLevel*Point)
Stop=j;
if (CurrState==0)
if (Low[j]<Low[i]+(i-j)*PriceDeltaFor1Bar*Point-PriceCrossedLevel*Point)
CurrState=-1;
}
if (Stop!=-1)
LevelLength[i]=i-Stop;
else
Показано первые 50% кода (символов: 7515)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.