rsi_jurik_slope_mtf_nmc.mq5
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «rsi_jurik_slope_mtf_nmc.mq5» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Данный индикатор рассчитывает модифицированный RSI с применением пользовательской алгоритмической сглаживающей функции и отображает результат в отдельном окне MetaTrader 4. Логика визуализации разделяет значения индикатора на четыре гистограммных ряда в зависимости от знака текущего значения и направления наклона относительно предыдущего бара. Два ряда окрашены в зелёный, два — в пурпурный цвет, дополнительный серый уровень задаётся параметрами.
Поддерживается работа на множественных таймфреймах: индикатор может получать данные расчёта с указанного таймфрейма через встроенные вызовы iCustom. Включена возможность интерполяции значений между барами старшего таймфрейма для более плавного отображения. Доступны настройки периода, цены расчёта, фазы и режима двойной сглаживающей.
В качестве уровней используются два пользовательских параметра — верхний и нижний, по умолчанию установленные на 30 и -30 соответственно. Индикатор рисует горизонтальные уровни в окне и ограничивает масштаб от -55 до +55. Деактивация расчёта или возврат количества баров возможны через специальное значение параметра таймфрейма.
Настройки программы
| Настройка | Описание |
|---|---|
| TimeFrame | TimeFrame — Таймфрейм для расчёта индикатора. Специальные значения "calculateValue" и "returnBars" активируют режимы внутреннего вызова. |
| RsiPeriod | RsiPeriod — Период расчёта RSI, задаётся числовым значением по умолчанию 25. |
| RsiPrice | RsiPrice — Тип цены для расчёта RSI, целочисленный параметр (по умолчанию PRICE_CLOSE). |
| RsiPhase | RsiPhase — Фазовый параметр сглаживания, числовой тип, по умолчанию 0. |
| RsiDouble | RsiDouble — Переключатель двойной сглаживающей обработки, логический тип, по умолчанию false. |
| LevelUp | LevelUp — Верхний уровень для отображения горизонтальной линии, числовой тип, по умолчанию 30. |
| LevelDown | LevelDown — Нижний уровень для отображения горизонтальной линии, числовой тип, по умолчанию -30. |
| Interpolate | Interpolate — Переключатель интерполяции значений между барами старшего таймфрейма, логический тип, по умолчанию true. |
Поиск по коду файла
#property indicator_separate_window
#property indicator_buffers 5
#property indicator_color1 LimeGreen
#property indicator_color2 LimeGreen
#property indicator_color3 PaleVioletRed
#property indicator_color4 PaleVioletRed
#property indicator_color5 DarkGray
#property indicator_width1 2
#property indicator_width3 2
#property indicator_width5 2
#property indicator_minimum -55
#property indicator_maximum +55
#property indicator_levelcolor DarkGray
extern string TimeFrame = "Current time frame";
extern double RsiPeriod = 25;
extern int RsiPrice = PRICE_CLOSE;
extern double RsiPhase = 0;
extern bool RsiDouble = false;
extern double LevelUp = 30;
extern double LevelDown = -30;
extern bool Interpolate = true;
double rsi[];
double rsihuu[];
double rsihud[];
double rsihdu[];
double rsihdd[];
double slope[];
int timeFrame;
string indicatorFileName;
bool returnBars;
bool calculateValue;
int init()
{
// код доступен только после оплаты
}
int deinit() { return(0); }
int start()
{
// код доступен только после оплаты
}
int counted_bars=IndicatorCounted();
if(counted_bars < 0) return(-1);
if(counted_bars>0) counted_bars--;
int limit = MathMin(Bars-counted_bars,Bars-1);
if (returnBars) { rsihuu[0] = limit+1; return(0); }
if (calculateValue || timeFrame == Period())
{
for(int i = limit; i >= 0; i--)
{
rsi[i] = iRsi(iMA(NULL,0,1,0,MODE_SMA,RsiPrice,i),RsiPeriod,RsiPhase,RsiDouble,i);
rsihuu[i] = EMPTY_VALUE;
rsihud[i] = EMPTY_VALUE;
rsihdd[i] = EMPTY_VALUE;
rsihdu[i] = EMPTY_VALUE;
slope[i] = slope[i+1];
if (rsi[i] > rsi[i+1]) slope[i] = 1;
if (rsi[i] < rsi[i+1]) slope[i] = -1;
if (rsi[i]>0)
if (slope[i]==1)
rsihuu[i] = rsi[i];
else rsihud[i] = rsi[i];
if (rsi[i]<0)
if (slope[i]==1)
rsihdu[i] = rsi[i];
else rsihdd[i] = rsi[i];
}
return(0);
}
limit = MathMax(limit,MathMin(Bars-1,iCustom(NULL,timeFrame,indicatorFileName,"returnBars",0,0)*timeFrame/Period()));
for(i=limit; i>=0; i--)
{
int y = iBarShift(NULL,timeFrame,Time[i]);
rsihuu[i] = EMPTY_VALUE;
rsihud[i] = EMPTY_VALUE;
rsihdd[i] = EMPTY_VALUE;
rsihdu[i] = EMPTY_VALUE;
rsi[i] = iCustom(NULL,timeFrame,indicatorFileName,"calculateValue",RsiPeriod,RsiPrice,RsiPhase,RsiDouble,4,y);
slope[i] = iCustom(NULL,timeFrame,indicatorFileName,"calculateValue",RsiPeriod,RsiPrice,RsiPhase,RsiDouble,5,y);
if (rsi[i]>0)
if (slope[i]==1)
rsihuu[i] = rsi[i];
else rsihud[i] = rsi[i];
if (rsi[i]<0)
if (slope[i]==1)
rsihdu[i] = rsi[i];
else rsihdd[i] = rsi[i];
if (!Interpolate || y==iBarShift(NULL,timeFrame,Time[i-1])) continue;
datetime time = iTime(NULL,timeFrame,y);
for(int n = 1; i+n < Bars && Time[i+n] >= time; n++) continue;
for(int k = 1; k < n; k++)
{
rsi[i+k] = rsi[i] + (rsi[i+n]-rsi[i])*k/n;
if (rsihuu[i]!=EMPTY_VALUE) rsihuu[i+k]= rsi[i+k];
if (rsihud[i]!=EMPTY_VALUE) rsihud[i+k]= rsi[i+k];
if (rsihdu[i]!=EMPTY_VALUE) rsihdu[i+k]= rsi[i+k];
if (rsihdd[i]!=EMPTY_VALUE) rsihПоказано первые 50% кода (символов: 6353)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.