Rwma Smoothed Rsi T3 Inverse Fisher Transform
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «rwma_smooth_rsi_t3_inverse_fisher_transform_signal_line_alerts_mtf.mq5» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Данный индикатор для MetaTrader 4 рассчитывает аналитический показатель на основе сглаженного RSI с применением алгоритма T3 и обратного преобразования Фишера. Входные данные цены проходят через многослойное скользящее среднее (RWMA) с настраиваемой глубиной сглаживания, после чего вычисляется RSI-подобный показатель, сглаженный по T3, и преобразуется обратным преобразованием Фишера в диапазон от 0 до 100.
Индикатор отображает основной буфер и сигнальную линию, а также определяет направление тренда и пересечения сигнальной линии. При включённой многоцветной индикации тренды отрисовываются разными цветами для наглядности. Поддерживается работа на различных таймфреймах, включая интерполяцию значений между барами.
Встроенная система уведомлений позволяет отслеживать смену направления тренда и пересечения сигнальной линии. Уведомления могут отправляться через всплывающие сообщения, электронную почту или звуковые сигналы. Все параметры настраиваются через панель свойств индикатора.
Настройки программы
| Настройка | Описание |
|---|---|
| TimeFrame | Таймфрейм — Таймфрейм, на котором рассчитывается индикатор. Поддерживается выбор из стандартных периодов (M1, M5, M15, M30, H1, H4, D1, W1, MN), а также специальных режимов «returnBars» и «calculateValue». |
| Length | Период RSI — Период расчёта RSI-подобного показателя, определяет количество баров для анализа изменения цены. |
| Hot | Параметр T3 Hot — Параметр сглаживания алгоритма T3, влияет на степень инерционности фильтра. Принимает дробное значение. |
| OriginalT3 | Оригинальный T3 — Переключатель выбора формулы расчёта коэффициентов T3: оригинальная или альтернативная версия. |
| UseFilteredPrice | Использовать сглаженную цену — Переключатель, определяющий, используется ли предварительно сглаженная цена (через RWMA) или простая скользящая средняя SMA для расчёта RSI. |
| EmaPeriod | Период EMA — Период экспоненциального сглаживания для расчёта сигнальной линии и промежуточных вычислений. |
| SignalPeriod | Период сигнальной линии — Период сглаживания для расчёта сигнальной линии на основе значений обратного преобразования Фишера. |
| RwmaLength | Длина RWMA — Длина окна для расчёта взвешенного скользящего среднего (RWMA), минимальное значение — 2. |
| Depth | Глубина RWMA — Глубина многослойного скользящего среднего (RWMA), определяет количество проходов сглаживания входных данных цены. Значение ограничивается от 2 до 50. |
| Price | Тип цены — Тип цены, используемый для расчётов (например, цена закрытия). Принимает целочисленный код типа цены. |
| Interpolate | Интерполяция — Переключатель интерполяции значений индикатора между барами при работе на старших таймфреймах. |
| MultiColor | Многоцветный режим — Переключатель многоцветного отображения индикатора: при изменении направления тренда цвета линий меняются. |
| alertsOn | Уведомления включены — Главный переключатель включения/отключения всей системы уведомлений индикатора. |
| alertsOnCurrent | Уведомления на текущем баре — Переключатель, определяющий, отслеживаются ли события на текущем баре (true) или на предыдущем завершённом баре (false). |
| alertsMessage | Текстовые уведомления — Переключатель отправки всплывающих текстовых уведомлений об изменениях тренда и пересечениях сигнальной линии. |
| alertsSound | Звуковые уведомления — Переключатель воспроизведения звукового сигнала при срабатывании уведомлений. |
| alertsEmail | Уведомления по email — Переключатель отправки уведомлений об изменениях тренда и пересечениях сигнальной линии по электронной почте. |
Поиск по коду файла
#property indicator_separate_window
#property indicator_buffers 4
#property indicator_color1 DeepSkyBlue
#property indicator_color2 PaleVioletRed
#property indicator_color3 PaleVioletRed
#property indicator_color4 Gold
#property indicator_width1 2
#property indicator_width2 2
#property indicator_width3 2
#property indicator_minimum -5
#property indicator_maximum 105
#property indicator_level1 12
#property indicator_level2 88
#property indicator_levelcolor DimGray
extern string TimeFrame = "Current time frame";
extern int Length = 32;
extern double Hot = 0.7;
extern bool OriginalT3 = false;
extern bool UseFilteredPrice = false;
extern int EmaPeriod = 4;
extern int SignalPeriod = 5;
extern int RwmaLength = 2;
extern int Depth = 10;
extern int Price = PRICE_CLOSE;
extern bool Interpolate = true;
extern bool MultiColor = true;
extern bool alertsOn = false;
extern bool alertsOnCurrent = false;
extern bool alertsMessage = true;
extern bool alertsSound = false;
extern bool alertsEmail = false;
#define MAX_depth 50
double inv[];
double invUa[];
double invUb[];
double rwm[];
double rsx[];
double trend[];
double trends[];
double signal[];
double pBuffer[][MAX_depth];
string indicatorFileName;
bool returnBars;
bool calculateValue;
int timeFrame;
int init()
{
// код доступен только после оплаты
}
double work[][2];
#define _ema1 0
#define _ema2 1
int start()
{
// код доступен только после оплаты
}
int counted_bars=IndicatorCounted();
int i,l,r,limit;
if(counted_bars<0) return(-1);
if(counted_bars>0) counted_bars--;
limit=Bars-counted_bars;
if (returnBars) { inv[0] = limit+1; return(0); }
if (calculateValue || timeFrame == Period())
{
if (ArrayRange(pBuffer,0) != Bars) { ArrayResize(pBuffer,Bars); ArrayResize(work,Bars); }
if (MultiColor && !calculateValue && trend[limit]==-1) CleanPoint(limit,invUa,invUb);
double weight = (RwmaLength+1.0)*RwmaLength*0.5;
for(i=limit, r=Bars-limit-1; i>=0; i--,r++)
{
double price = iMA(NULL,0,1,0,MODE_SMA,Price,i);
double coeff = 5;
double sum = 0;
double sumc = 0;
for (int s=0; s<Depth; s++)
{
pBuffer[r][s] = price;
if (r>RwmaLength)
{
for (l=0, price=0; l<RwmaLength; l++) price += (RwmaLength-l)*pBuffer[r-l][s];
price /= weight;
}
sum += coeff*price;
sumc += coeff;
coeff = MathMax(coeff-1,1);
}
rwm[i] = sum/sumc;
}
double alpha = 2.0 / (1.0+EmaPeriod);
double alphas = 2.0 / (1.0+SignalPeriod);
double Kg = (3.0)/(2.0+Length);
double Hg = 1.0-Kg;
for(i=limit, r=Bars-i-1; i>=0; i--, r++)
{
if (UseFilteredPrice)
rsx[i] = 0.1 * iRsi(rwm[i] ,Length,Hot,OriginalT3,i);
else rsx[i] = 0.1 * iRsi(iMA(NULL,0,1,0,MODE_SMA,Price,i),Length,Hot,OriginalT3,i);
work[r][_ema1] = work[r-1][_ema1]+alpha*(rsx[i] -work[r-1][_ema1]);
work[r][_ema2] = work[r-1][_ema2]+alpha*(work[r][_ema1]-work[r-1][_ema1]);
double zlema = 2.0*work[r][_ema1]-work[r][_ema2];
inv[i] = 50.0*(1+(MathExp(2*zlema)-1)/(MathExp(2*zlema)+1));
signal[i] = signal[i+1]+alphas*(inv[i]-signal[i+1]);
invUa[i] = EMPTY_VALUE;
invUb[i] = EMPTY_VALUE;
trend[i] = trend[i+1];
trends[i] = trends[i+1];
if (inv[i] > inv[i+1]) trend[i] = 1;
if (inv[i] < inv[i+1]) trend[i] =-1;
if (inv[i] > signal[i]) trends[i]= 1;
if (inv[i] < signal[i]) trends[i]=-1;
if (MultiColor && !calculateValue && trend[i]==-1) PlotPoint(i,invUa,invUb,inv);
}
manageAlerts();
return(0);
}
limit = MathMax(limit,MathMin(Bars,iCustom(NULL,timeFrame,indicatorFileName,"returnBars",0,0)*timeFrame/Period()));
if (MultiColor && trend[limit]==-1) CleanPoint(limit,invUa,invUb);
for (i=limit;i>=0; i--)
{
int y = iBarShift(NULL,timeFrame,Time[i]);
inv[i] = iCustom(NULL,timeFrame,indicatorFileName,"calculateValue",Length,Hot,OriginalT3,UseFilteredPrice,EmaPeriod,SignalPeriod,RwmaLength,Depth,Price,0,y);
signal[i] = iCustom(NULL,timeFrame,indicatorFileName,"calculateValue",Length,Hot,OriginalT3,UseFilteredPrice,EmaPeriod,SignalPeriod,RwmaLength,Depth,Price,3,y);
invUa[i] = EMPTY_VALUE;
invUb[i] = EMPTY_VALUE;
trend[i] = iCustom(NULL,timeFrame,indicatorFileName,"calculateValue",Length,Hot,OriginalT3,UseFilteredPrice,EmaPeriod,SignalPeriod,RwmaLength,Depth,Price,6,y);
trends[i] = iCustom(NULL,timeFrame,indicatorFileName,"calculateValue",Length,Hot,OriginalT3,UseFilteredPrice,EmaPeriod,SignalPeriod,RwmaLength,Depth,Price,7,y);
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;
double factor = 1.0 / n;
for(int j = 1; j < n; j++)
{
inv[i+j] = j*factor*inv[i+n] + (1.0-j*factor)*inv[i];
signal[i+j] = j*factor*signal[i+n] + (1.0-j*factor)*signal[i];
}
Показано первые 50% кода (символов: 9450)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.