past_regression_deviated_one_more_average_rsi_-_separate.mq5
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «past_regression_deviated_one_more_average_rsi_-_separate.mq5» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Данный продукт представляет собой пользовательский индикатор для платформы MetaTrader 4, отображаемый в отдельном окне. Он выполняет расчёт аналитических показателей на основе ценовых данных, включая линейную регрессию и каналы стандартных отклонений, а также отрисовывает адаптивный RSI-индикатор.
Индикатор поддерживает работу с несколькими таймфреймами и предусматривает интерполяцию значений между барами. Восемь буферов используются для отображения средней линии и трёх пар каналов отклонения (верхние и нижние для каждого уровня).
Набор настраиваемых параметров позволяет задать периоды расчёта, скорость адаптивной сглаживающей, тип цены, символ инструмента и режим интерполяции. Индикатор предназначен для технического анализа ценовых рядов и визуализации трендовых характеристик.
Настройки программы
| Настройка | Описание |
|---|---|
| TimeFrame | Таймфрейм — Текстовый параметр, задающий таймфрейм для анализа. Может принимать значения таймфреймов (M1, M5, H1, D1 и др.), специальное значение "calculateValue" для расчёта значений или "returnBars" для возврата количества баров. |
| RsiLength | Период RSI — Целочисленный параметр, задающий период расчёта RSI-индикатора. |
| OmaSpeed | Скорость сглаживающей — Числовой параметр, определяющий скорость реакции адаптивной сглаживающей (коэффициент постоянной). |
| OmaAdaptive | Адаптивная сглаживающая — Переключатель адаптивного режима сглаживающей, который автоматически подстраивает период усреднения в зависимости от соотношения сигнала и шума. |
| Price | Тип цены — Целочисленный параметр, задающий тип цены для расчётов (например, Close, Open, High, Low и т.д.). |
| 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 LR.length = 55;
extern double std.channel.1 = 1;
extern double std.channel.2 = 2;
extern double std.channel.3 = 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() {}
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,LR.length,i);
double std.dev = 0;
for(int k=0; k<LR.length; k++)
{
double diff = prices[i+k]-(value-k*slope);
std.dev += diff*diff;
}
std.dev = MathSqrt(std.dev/(LR.length-1.0));
lrBuffer[i] = value;
upBuffer1[i] = lrBuffer[i]+(std.channel.1*std.dev);
dnBuffer1[i] = lrBuffer[i]-(std.channel.1*std.dev);
upBuffer2[i] = lrBuffer[i]+(std.channel.2*std.dev);
dnBuffer2[i] = lrBuffer[i]-(std.channel.2*std.dev);
upBuffer3[i] = lrBuffer[i]+(std.channel.3*std.dev);
dnBuffer3[i] = lrBuffer[i]-(std.channel.3*std.dev);
}
if (!calculateValue) IndicatorShortName("prd "+symbol+" ("+LR.length+")");
return(0);
}
limit = MathMax(limit,MathMin(Bars,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",LR.length,std.channel.1,std.channel.2,std.channel.3,RsiLength,OmaSpeed,OmaAdaptive,Price,0,y);
lrBuffer[i] = iCustom(symbol,timeFrame,indicatorFileName,"calculateValue",LR.length,std.channel.1,std.channel.2,std.channel.3,RsiLength,OmaSpeed,OmaAdaptive,Price,1,y);
upBuffer1[i] = iCustom(symbol,timeFrame,indicatorFileName,"calculateValue",LR.length,std.channel.1,std.channel.2,std.channel.3,RsiLength,OmaSpeed,OmaAdaptive,Price,2,y);
dnBuffer1[i] = iCustom(symbol,timeFrame,indicatorFileName,"calculateValue",LR.length,std.channel.1,std.channel.2,std.channel.3,RsiLength,OmaSpeed,OmaAdaptive,Price,3,y);
upBuffer2[i] = iCustom(symbol,timeFrame,indicatorFileName,"calculateValue",LR.length,std.channel.1,std.channel.2,std.channel.3,RsiLength,OmaSpeed,OmaAdaptive,Price,4,y);
dnBuffer2[i] = iCustom(symbol,timeFrame,indicatorFileName,"calculateValue",LR.length,std.channel.1,std.channel.2,std.channel.3,RsiLength,OmaSpeed,OmaAdaptive,Price,5,y);
upBuffer3[i] = iCustom(symbol,timeFrame,indicatorFileName,"calculateValue",LR.length,std.channel.1,std.channel.2,std.channel.3,RsiLength,OmaSpeed,OmaAdaptive,Price,6,y);
dnBuffer3[i] = iCustom(symbol,timeFrame,indicatorFileName,"calculateValue",LR.length,std.channel.1,std.channel.2,std.channel.3,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;
lrПоказано первые 50% кода (символов: 8065)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.