RSI Linear Regression
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «rsi linear regression.pine» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Индикатор «RSI Linear Regression» рассчитывает значение RSI заданного периода по выбранному источочнику данных и отображает его в виде линии на графике с уровнями 30, 50 и 70. К результатам RSI применяется линейная регрессия с настраиваемым периодом тренда и коэффициентом отклонения, после чего на графике строятся линия регрессии и граничные полосы. В углу графика отображается значение корреляции и R². Дополнительно индикатор отмечает точки разворота зигзага на RSI с помощью меток, фиксирующих относительные максимумы и минимумы.
Настройки программы
| Настройка | Описание |
|---|---|
| len | Период расчёта RSI, определяющий количество баров для усреднения приростов и падений цены. |
| src | Источник данных, из которого берётся значение для расчёта RSI. |
| periodTrend | Период тренда для линейной регрессии, задаёт количество баров, используемых при построении линии регрессии RSI. |
| deviationsAmnt | Множитель отклонения для построения граничных полос линейной регрессии. Увеличение значения расширяет диапазон отклонения вокруг линии регрессии. |
| estimatorType | Тип оценки коэффициентов линейной регрессии. Доступны варианты Biased и Unbiased, определяющие знаменатель при расчёте наклона. |
| extendType | Режим продления линий регрессии вправо или отрезок без продолжения. |
| length | Длина зигзага, используемая для определения точек разворота (пивотов) на линии RSI. |
Поиск по коду файла
indicator('<[Osc]RSI Линейная Регрессия]>','<[RSI Линейная Регрессия]>', false)
len = input.int(14, minval = 1, title = 'Длина')
src = input(close, 'Источник')
up = ta.rma(math.max(ta.change(src), 0), len)
down = ta.rma(-math.min(ta.change(src), 0), len)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - 100 / (1 + up / down)
plot(rsi, 'RSI', color = #00ffee)
band1 = hline(70, 'Верхний уровень', color = #787B86)
bandm = hline(50, 'Средний уровень', color = #787b8680)
band0 = hline(30, 'Нижний уровень', color = #787B86)
fill(band1, band0, color = #7e57c21a, title = 'Фон')
drawLine(X1, Y1, X2, Y2, ExtendType, Color, LineStyle) =>
var line Line = na
Line := line.new(X1, Y1, X2, Y2, xloc.bar_index, ExtendType, Color, LineStyle, 1)
line.delete(Line[1])
rsdcr2(PeriodMinusOne, Deviations, Estimate) =>
var period = PeriodMinusOne + 1
var devDenominator = Estimate == 'Unbiased' ? PeriodMinusOne : period
Ex = 0.0
Ex2 = 0.0
Exy = 0.0
Ey = 0.0
for i = 0 to PeriodMinusOne by 1
closeI = nz(rsi[i])
Ex := Ex + i
Ex2 := Ex2 + i * i
Exy := Exy + closeI * i
Ey := Ey + closeI
Ey
ExEx = Ex * Ex
slope = Ex2 == ExEx ? 0.0 : (period * Exy - Ex * Ey) / (period * Ex2 - ExEx)
linearRegression = (Ey - slope * Ex) / period
intercept = linearRegression + bar_index * slope
deviation = 0.0
for i = 0 to PeriodMinusOne by 1
deviation := deviation + math.pow(nz(rsi[i]) - (intercept - bar_index[i] * slope), 2.0)
deviation
deviation := Deviations * math.sqrt(deviation / devDenominator)
correlate = ta.correlation(rsi, bar_index, period)
r2 = math.pow(correlate, 2.0)
[linearRegression, slope, deviation, correlate, r2]
periodTrend = input.int(89, 'Период тренда', minval = 4)
deviationsAmnt = input.float(1.5, ' Отклонение', minval = 0.1, step = 0.1)
estimatorType = input.string('Unbiased', ' Оценка', options = ['Biased', 'Unbiased'])
var extendType = input.string('Right', 'Продление', options = ['Right', 'Segment']) == 'Right' ? extend.right : extend.none
periodMinusOne = periodTrend - 1
[linReg, slope, deviation, correlate, r2] = rsdcr2(periodMinusOne, deviationsAmnt, estimaПоказано первые 50% кода (символов: 3620)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.