rsi_of_nma_2_mtf__alerts.mq5
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «rsi_of_nma_2_mtf__alerts.mq5» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Данный продукт представляет собой пользовательский индикатор для платформы MetaTrader 5, рассчитывающий индикатор RSI на основе цены, прошедшей через собственную процедуру сглаживания (NMA). Индикатор отображается в отдельном окне и поддерживает работу на различных таймфреймах, включая межтаймфреймный режим.
Индикатор использует два уровня (верхний и нижний) для определения трендовых условий. При пересечении уровней система может отправлять уведомления через различные каналы: всплывающие сообщения, звуковые сигналы, push-уведомления и электронную почту. Доступна настройка срабатывания алертов на текущем баре или на следующем.
В индикаторе реализована интерполяция значений между барами при переходе между таймфреймами, что обеспечивает более плавное отображение данных. Логика построения включает предварительное и последующее сглаживание с настраиваемыми параметрами фазы и длины.
Настройки программы
| Настройка | Описание |
|---|---|
| TimeFrame | Таймфрейм, на котором рассчитывается индикатор (вариант настройки). |
| Length | Период расчёта индикатора RSI (целое число). |
| Price | Тип цены, используемой для расчёта индикатора (вариант настройки). |
| LevelUp | Верхний уровень для определения разворотных условий тренда (числовое значение). |
| LevelDown | Нижний уровень для определения разворотных условий тренда (числовое значение). |
| NmaLength | Длина расчёта нормализованной скользящей средней (NMA), используемой для формирования входных данных RSI (целое число). |
| PreSmooth | Параметр предварительного сглаживания ценовой серии (числовое значение). |
| PreSmoothPhase | Фазовый параметр предварительного сглаживания (числовое значение). |
| PosSmooth | Параметр последующего сглаживания ценовой серии перед расчётом RSI (числовое значение). |
| PosSmoothPhase | Фазовый параметр последующего сглаживания (числовое значение). |
| alertsOn | Включает или отключает систему алертов в целом (переключатель). |
| alertsOnCurrent | Определяет, будут ли алерты срабатывать на текущем баре или на следующем (переключатель). |
| alertsMessage | Включает или отключает всплывающие сообщения об алертах (переключатель). |
| alertsSound | Включает или отключает звуковые сигналы об алертах (переключатель). |
| alertsNotify | Включает или отключает push-уведомления об алертах (переключатель). |
| alertsEmail | Включает или отключает отправку уведомлений об алертах по электронной почте (переключатель). |
| Interpolate | Включает или отключает интерполяцию значений индикатора между барами при работе на межтаймфреймах. |
Поиск по коду файла
#property indicator_separate_window
#property indicator_buffers 5
#property indicator_color1 Gray
#property indicator_color2 LimeGreen
#property indicator_color3 LimeGreen
#property indicator_color4 Orange
#property indicator_color5 Orange
#property indicator_width2 3
#property indicator_width3 3
#property indicator_width4 3
#property indicator_width5 3
#property indicator_minimum -5
#property indicator_maximum +105
extern ENUM_TIMEFRAMES TimeFrame = PERIOD_CURRENT;
extern int Length = 14;
extern ENUM_APPLIED_PRICE Price = PRICE_CLOSE;
extern double LevelUp = 80;
extern double LevelDown = 20;
extern int NmaLength = 14;
extern double PreSmooth = 0;
extern double PreSmoothPhase = 0;
extern double PosSmooth = 10;
extern double PosSmoothPhase = 100;
extern bool alertsOn = true;
extern bool alertsOnCurrent = false;
extern bool alertsMessage = true;
extern bool alertsSound = false;
extern bool alertsNotify = true;
extern bool alertsEmail = true;
extern bool Interpolate = true;
double rsi[];
double rsiUa[];
double rsiUb[];
double rsiDa[];
double rsiDb[];
double prc[];
double trend[];
string indicatorFileName;
bool returnBars;
int init()
{
// код доступен только после оплаты
}
int deinit(){ return(0); }
double tBuffer[][2];
#define iPrc 0
#define iMom 1
int start()
{
// код доступен только после оплаты
}
int countedBars = IndicatorCounted();
if(countedBars<0) return(-1);
if(countedBars>0) countedBars--;
int i,r,limit = MathMin(Bars-countedBars,Bars-1);
if (returnBars) { rsi[0] = limit+1; return(0); }
if (TimeFrame!=Period())
{
limit = MathMax(limit,MathMin(Bars,iCustom(NULL,TimeFrame,indicatorFileName,-99,0,0)*TimeFrame/Period()));
if (trend[limit]== 1) CleanPoint(limit,rsiUa,rsiUb);
if (trend[limit]==-1) CleanPoint(limit,rsiDa,rsiDb);
for(i=limit; i>=0; i--)
{
int y = iBarShift(NULL,TimeFrame,Time[i]);
rsi[i] = iCustom(NULL,TimeFrame,indicatorFileName,PERIOD_CURRENT,Length,Price,LevelUp,LevelDown,NmaLength,PreSmooth,PreSmoothPhase,PosSmooth,PosSmoothPhase,alertsOn,alertsOnCurrent,alertsMessage,alertsSound,alertsNotify,alertsEmail,0,y);
trend[i] = iCustom(NULL,TimeFrame,indicatorFileName,PERIOD_CURRENT,Length,Price,LevelUp,LevelDown,NmaLength,PreSmooth,PreSmoothPhase,PosSmooth,PosSmoothPhase,alertsOn,alertsOnCurrent,alertsMessage,alertsSound,alertsNotify,alertsEmail,6,y);
rsiUa[i] = EMPTY_VALUE;
rsiUb[i] = EMPTY_VALUE;
rsiDa[i] = EMPTY_VALUE;
rsiDb[i] = EMPTY_VALUE;
if (!Interpolate || (i>0 && 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 l = 1; l < n && (i+l<Bars) && (i+n)<Bars; l++)
rsi[i+l] = rsi[i] + (rsi[i+n] - rsi[i])*l/n;
}
for(i=limit; i>=0; i--)
{
if (trend[i] == 1) PlotPoint(i,rsiUa,rsiUb,rsi);
if (trend[i] == -1) PlotPoint(i,rsiDa,rsiDb,rsi);
}
return(0);
}
if (ArrayRange(tBuffer,0) != Bars) ArrayResize(tBuffer,Bars);
if (trend[limit]== 1) CleanPoint(limit,rsiUa,rsiUb);
if (trend[limit]==-1) CleanPoint(limit,rsiDa,rsiDb);
for(i=limit, r=Bars-i-1; i >= 0; i--,r++)
{
double rawPrice = iMA(NULL,0,1,0,MODE_SMA,Price,i);
tBuffer[r][iPrc] = iSmooth(rawPrice,PreSmooth,PreSmoothPhase,i,0);
tBuffer[r][iMom] = tBuffer[r][iPrc]-tBuffer[r-1][iPrc];
double momRatio = 0.00;
double sumMomen = 0.00;
double ratio = 0.00;
for (int k = 0; k<NmaLength; k++)
{
sumMomen += MathAbs(tBuffer[r-k][iMom]);
momRatio += tBuffer[r-k][iMom]*(MathSqПоказано первые 50% кода (символов: 7848)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.