这段 Pine Script™ 是用于绘制 线性回归振荡器(Linear Regression Oscillator,LRO)的指标代码,分析股价的线性趋势,并提供超买/超卖信号。它同时包含一些视觉增强的功能,如颜色变化、信号标记和反转信号。以下是对代码的详细分析:
length
: 定义了线性回归的回溯周期(默认为 20)。
upper
和 lower
: 设定了振荡器的上限和下限(默认为 1.5 和 -1.5),用来判断市场的超买和超卖区域。
candles
: 布尔值,用于决定是否根据振荡器的值改变K线的颜色。
col_up
和 col_dn
: 定义了上涨和下跌的颜色。
source
: 选取当前柱(bar)的收盘价作为数据源。
lowest
和 highest
: 用于存储最近 5 根 K 线的最低和最高价格,这在后面的反转信号中有使用。
函数 linear_regression_osc
:计算线性回归的斜率(slope)和截距(intercept),并生成线性回归振荡器值。核心部分是通过循环求和计算斜率和截距,并使用这些值计算出每一根柱的回归值。
pine
复制代码
m = (n * sum_xy - sum_x * sum_y) / (n * sum_x_squared - sum_x * sum_x)
c = (sum_y - m * sum_x) / n
这部分通过手动计算线性回归模型中的斜率 m
和截距 c
,并将其应用到每根 K 线的索引上来计算对应的回归值。
将线性回归振荡器的值通过 移动平均 和 标准差 进行标准化处理:
pine
复制代码
linear_regression := (linear_regression - ta.sma(linear_regression, 100)) / ta.stdev(linear_regression, 100)
这样处理后,振荡器值会围绕0波动,便于超买和超卖的识别。
cond1
和 cond2
: 用于检测线性回归值是否与0发生交叉,从而发出趋势反转信号。
cond_1
和 cond_2
: 用于检测线性回归振荡器的自我交叉(例如,当振荡器值高于上限时发生下穿信号)。
pine
复制代码
cond1 = ta.crossunder(linear_regression, 0)
cond2 = ta.crossover(linear_regression, 0)
使用 lowest.push(low)
和 highest.push(high)
将最近 5 个 K 线的最低价和最高价保存到数组中,用于后续的价格反转信号和无效化价格水平的计算。
当数组超过 5 个元素时,移除最早的数据点:
pine
复制代码
switch
lowest.size() > 5 => lowest.shift(), highest.shift()
振荡器的绘制:使用 plot
函数根据振荡器的数值绘制颜色渐变的区域。
阈值和零线:绘制上限和下限,以及中间的0轴线来辅助视觉判断。
信号标记:当条件满足时,在图表上添加标记,标注趋势反转的信号。
pine
复制代码
plotchar(cond1 ? 0 : na, "", "◆", ...)
plotchar(cond_1, "", "◇", ...)
标签绘制:当振荡器超过阈值或者发生趋势反转时,在图表上显示标签来帮助交易者做出判断。
pine
复制代码
label.new(chart.point.from_index(bar_index, low), "▲", ...)
当信号条件满足时,将无效化价格水平绘制在图表上,并使用不同的颜色来标记价格无效的点:
pine
复制代码
plot(not ta.change(points) ? points : na, ...)
根据振荡器值,选择性改变K线的颜色:
pine
复制代码
candle_col = candles ? (linear_regression < 0 ? col_dn : col_up) : na
plotcandle(open, high, low, close, ...)
这段代码主要实现了线性回归振荡器,用于判断市场的趋势反转和价格超买/超卖情况,并通过一系列条件和可视化工具,帮助用户进行交易判断。