past_regression_deviated_one_more_average_rsi_-_separate_nmc.mq5
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «past_regression_deviated_one_more_average_rsi_-_separate_nmc.mq5» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Это пользовательский индикатор для MetaTrader 4, отображающий аналитические данные в отдельном окне индикатора с использованием 8 буферов. Он вычисляет линейную регрессию за настраиваемый период и строит три пары каналов стандартных отклонений вокруг неё.
Индикатор включает RSI-подобный осциллятор, в котором стандартное сглаживание заменено адаптивным экспоненциальным скользящим средним (OMA). Значение осциллятора рассчитывается на основе изменений цены и их абсолютных величин, нормализовано в диапазон 0–100.
Поддерживается анализ на различных таймфреймах, выбор произвольного символа и опциональная интерполяция между барами. Все ключевые параметры — длина регрессии, множители отклонений, период RSI, скорость OMA и адаптивный режим — настраиваются пользователем.
Настройки программы
| Настройка | Описание |
|---|---|
| TimeFrame | Таймфрейм — Таймфрейм, на котором выполняется расчёт индикатора, или специальные значения calculateValue и returnBars |
| LRlength | Длина регрессии — Период линейной регрессии, определяющий количество баров для расчёта линейной регрессии и стандартных отклонений |
| stdchannel1 | Стандартное отклонение 1 — Множитель стандартного отклонения для первого пары каналов (верхний и нижний) |
| stdchannel2 | Стандартное отклонение 2 — Множитель стандартного отклонения для второй пары каналов (верхний и нижний) |
| stdchannel3 | Стандартное отклонение 3 — Множитель стандартного отклонения для третьей пары каналов (верхний и нижний) |
| RsiLength | Период RSI — Период расчёта RSI-подобного осциллятора |
| OmaSpeed | Скорость OMA — Константа скорости, влияющая на чувствительность адаптивного скользящего среднего OMA |
| OmaAdaptive | Адаптивная OMA — Переключатель адаптивного режима скользящего среднего OMA, автоматически подстраивающего период под волатильность |
| Price | Тип цены — Тип цены, используемый для расчётов индикатора (например, закрытие, открытие и т.д.) |
| UseSymbol | Символ — Символ инструмента для анализа; если пуст — используется текущий символ графика |
| Interpolate | Интерполяция — Включение или выключение интерполяции значений между барами при работе на разных таймфреймах |
Поиск по коду файла
#property indicator_separate_window
#property indicator_buffers 8
#property indicator_color1 DeepSkyBlue
#property indicator_color2 Yellow
#property indicator_color3 Olive
#property indicator_color4 Olive
#property indicator_color5 Orange
#property indicator_color6 Orange
#property indicator_color7 Gray
#property indicator_color8 Gray
#property indicator_width1 2
extern string TimeFrame = "Current time frame";
extern int LRlength = 55;
extern double stdchannel1 = 1;
extern double stdchannel2 = 2;
extern double stdchannel3 = 3;
extern int RsiLength = 14;
extern double OmaSpeed = 1.5;
extern bool OmaAdaptive = true;
extern int Price = PRICE_CLOSE;
extern string UseSymbol = "";
extern bool Interpolate = true;
double lrBuffer[];
double upBuffer1[];
double dnBuffer1[];
double upBuffer2[];
double dnBuffer2[];
double upBuffer3[];
double dnBuffer3[];
double prices[];
string indicatorFileName;
bool calculateValue;
bool returnBars;
int timeFrame;
int init()
{
// код доступен только после оплаты
}
int deinit() {return(0);}
int start()
{
// код доступен только после оплаты
}
int limit,i,n,counted_bars=IndicatorCounted();
string symbol;
if(counted_bars<0) return(-1);
if(counted_bars>0) counted_bars--;
limit=MathMin(Bars-counted_bars,Bars-1);
if (returnBars) { prices[0] = limit+1; return(0); }
if (iOpen(UseSymbol,0,0)==0)
symbol = Symbol();
else symbol = UseSymbol;
if (calculateValue || timeFrame == Period())
{
for(i=limit; i>=0; i--)
{
prices[i] = iRsi(iMA(symbol,0,1,0,MODE_SMA,Price,i),RsiLength,OmaSpeed,OmaAdaptive,i);
double slope;
double value = iLRValue(slope,LRlength,i);
double stddev = 0;
for(int k=0; k<LRlength; k++)
{
double diff = prices[i+k]-(value-k*slope);
stddev += diff*diff;
}
stddev = MathSqrt(stddev/(LRlength-1.0));
lrBuffer[i] = value;
upBuffer1[i] = lrBuffer[i]+(stdchannel1*stddev);
dnBuffer1[i] = lrBuffer[i]-(stdchannel1*stddev);
upBuffer2[i] = lrBuffer[i]+(stdchannel2*stddev);
dnBuffer2[i] = lrBuffer[i]-(stdchannel2*stddev);
upBuffer3[i] = lrBuffer[i]+(stdchannel3*stddev);
dnBuffer3[i] = lrBuffer[i]-(stdchannel3*stddev);
}
if (!calculateValue) IndicatorShortName("prd "+symbol+" ("+LRlength+")");
return(0);
}
limit = MathMax(limit,MathMin(Bars-1,iCustom(symbol,timeFrame,indicatorFileName,"returnBars",0,0)*timeFrame/Period()));
for (i=limit;i>=0;i--)
{
int y = iBarShift(NULL,timeFrame,Time[i]);
prices[i] = iCustom(symbol,timeFrame,indicatorFileName,"calculateValue",LRlength,stdchannel1,stdchannel2,stdchannel3,RsiLength,OmaSpeed,OmaAdaptive,Price,0,y);
lrBuffer[i] = iCustom(symbol,timeFrame,indicatorFileName,"calculateValue",LRlength,stdchannel1,stdchannel2,stdchannel3,RsiLength,OmaSpeed,OmaAdaptive,Price,1,y);
upBuffer1[i] = iCustom(symbol,timeFrame,indicatorFileName,"calculateValue",LRlength,stdchannel1,stdchannel2,stdchannel3,RsiLength,OmaSpeed,OmaAdaptive,Price,2,y);
dnBuffer1[i] = iCustom(symbol,timeFrame,indicatorFileName,"calculateValue",LRlength,stdchannel1,stdchannel2,stdchannel3,RsiLength,OmaSpeed,OmaAdaptive,Price,3,y);
upBuffer2[i] = iCustom(symbol,timeFrame,indicatorFileName,"calculateValue",LRlength,stdchannel1,stdchannel2,stdchannel3,RsiLength,OmaSpeed,OmaAdaptive,Price,4,y);
dnBuffer2[i] = iCustom(symbol,timeFrame,indicatorFileName,"calculateValue",LRlength,stdchannel1,stdchannel2,stdchannel3,RsiLength,OmaSpeed,OmaAdaptive,Price,5,y);
upBuffer3[i] = iCustom(symbol,timeFrame,indicatorFileName,"calculateValue",LRlength,stdchannel1,stdchannel2,stdchannel3,RsiLength,OmaSpeed,OmaAdaptive,Price,6,y);
dnBuffer3[i] = iCustom(symbol,timeFrame,indicatorFileName,"calculateValue",LRlength,stdchannel1,stdchannel2,stdchannel3,RsiLength,OmaSpeed,OmaAdaptive,Price,7,y);
if (!Interpolate || y==iBarShift(NULL,timeFrame,Time[i-1])) continue;
datetime time = iTime(NULL,timeFrame,y);
for(n = 1; i+n < Bars && Time[i+n] >= time; n++) continue;
for(k = 1; k < n; k++)
{
prices[i+k] = prices[i] + (prices[i+n] -prices[i] )*k/n;
lrBuffer[i+k] = lrBuffer[i] + (lПоказано первые 50% кода (символов: 7971)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.