예스스탁
예스스탁 답변
2025-06-19 13:45:01
안녕하세요
예스스탁입니다.
input : window(100),devlen_b(2.0);
var : sum_x(0),sum_y(0),sum_xy(0),sum_x_sq(0),i(0);
var : slope(0),y2(0),y1(0),dev(0);
var : mid(0),upper(0),lower(0),alpha(0),rmav(0);
sum_x = 0.0;
sum_y = 0.0;
sum_xy = 0.0;
sum_x_sq = 0.0;
for i = 0 to window - 1
{
sum_x = sum_x + i + 1;
sum_y = sum_y + close[i];
sum_xy = sum_xy + (i + 1) * close[i];
sum_x_sq = sum_x_sq + pow(i + 1, 2);
}
slope = (window * sum_xy - sum_x * sum_y) / (window * sum_x_sq - pow(sum_x, 2));
y2 = (sum_y - slope * sum_x) / window;
y1 = y2 + slope * (window - 1);
dev = 0.0;
for i = 0 to window - 1
{
dev = dev + pow(close[i] - (slope * (window - i) + y2), 2);
}
dev = sqrt(dev / window);
mid = y2 + slope;
alpha = 1 / window ;
rmav = IFf(IsNan(rmav[1]) == true, ma(H-L,window) , alpha * (H-L) + (1 - alpha) * IFf(isnan(rmav[1])==true,0,rmav[1]));
upper = mid + rmav * devlen_b;
lower = mid - rmav * devlen_b;
Plot1(upper,"upper",Gray);
Plot2(mid,"mid",Gray);
Plot3(lower,"lower",Gray);
즐거운 하루되세요
> 사노소이 님이 쓴 글입니다.
> 제목 : 수식 부탁드립니다
> 지표식 부탁 드립니다.
//@version=5
indicator('Linear Regression Bands', overlay = true, max_lines_count = 3)
// ─────────────────────────────
// USER INPUTS
// ─────────────────────────────
bool bands = input.bool(true, "Plot Linear Regression Bands")
int window = input.int(100, "Length")
float devlen_b = input.float(2.0, "Deviation Linear Regression Bands", step=0.1)
// ─────────────────────────────
// COLOR SETTINGS
// ─────────────────────────────
color col_dn = #f01313
color col_up = color.aqua
color col_mid = color.yellow
color gray = color.gray
// ─────────────────────────────
// LINEAR REGRESSION CALC
// ─────────────────────────────
linear_regression(src, window) =>
sum_x = 0.0
sum_y = 0.0
sum_xy = 0.0
sum_x_sq = 0.0
for i = 0 to window - 1
sum_x += i + 1
sum_y += src[i]
sum_xy += (i + 1) * src[i]
sum_x_sq += math.pow(i + 1, 2)
slope = (window * sum_xy - sum_x * sum_y) / (window * sum_x_sq - math.pow(sum_x, 2))
intercept = (sum_y - slope * sum_x) / window
y1 = intercept + slope * (window - 1)
dev = 0.0
for i = 0 to window - 1
dev += math.pow(src[i] - (slope * (window - i) + intercept), 2)
dev := math.sqrt(dev / window)
[intercept, y1, dev, slope]
// ─────────────────────────────
// PLOT
// ─────────────────────────────
[y2, _, dev, slope] = linear_regression(close, window)
mid = y2 + slope
upper = mid + ta.rma(high - low, window) * devlen_b
lower = mid - ta.rma(high - low, window) * devlen_b
p_u = plot(bands ? upper : na, color = bands ? gray : na, linewidth = 2)
p_l = plot(bands ? lower : na, color = bands ? gray : na, linewidth = 2)
p_m = plot(bands ? mid : na, color = bands ? gray : na)
fill(p_u, p_m, mid, upper, na, bands ? color.new(col_up, 80) : na)
fill(p_m, p_l, lower, mid, bands ? color.new(col_dn, 80) : na, na)