如何按百分比调整RSI等技术指标的显示数值?
技术指标数值的百分比调整方案(以RSI为例)
需求说明
需要实现RSI、Stochastic这类技术指标的输出数值按百分比调整功能,例如将默认输出为70的RSI信号提升至80。
可行方案
以下提供两种实用的调整方式,均基于Pine Script实现:
方案1:直接按百分比缩放数值
适合需要整体放大/缩小指标数值的场景,操作简单直观。修改后的代码如下:
//@version=4 study(title="百分比调整版RSI", shorttitle="RSI (调整版)", format=format.price, precision=2, resolution="") len = input(14, minval=1, title="周期长度") src = input(close, "数据源", type = input.source) // 核心调整参数:正数为放大,负数为缩小,输入百分比数值 adjust_percent = input.float(14.29, title="数值调整百分比(%)", minval=-100, maxval=100) / 100 // 计算原始RSI up = rma(max(change(src), 0), len) down = rma(-min(change(src), 0), len) rsi_raw = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down)) // 应用调整并限制数值在0-100区间内 rsi_adjusted = clamp(rsi_raw * (1 + adjust_percent), 0, 100) // 绘制调整后的RSI曲线 plot(rsi_adjusted, "调整后RSI", color=color.white) // 示例水平线:原70调整后为80,对应输入14.29% hline(80, "超买线", color=color.red, linestyle=hline.style_solid) hline(28.57, "超卖线", color=color.blue, linestyle=hline.style_solid) hline(57.14, "中线", color=color.gray, linestyle=hline.style_solid)
说明:
- 若要将原70的RSI值提升至80,计算调整比例为
(80/70)-1≈14.29%,直接在输入框填入14.29即可。 clamp()函数确保调整后的数值始终保持在0-100的合理区间,避免异常值。
方案2:线性映射精准调整阈值
适合需要指定特定阈值映射关系的场景,比如保持超买超卖的相对区间比例。修改后的代码如下:
//@version=4 study(title="阈值映射版RSI", shorttitle="RSI (映射版)", format=format.price, precision=2, resolution="") len = input(14, minval=1, title="周期长度") src = input(close, "数据源", type = input.source) // 自定义映射参数:设置原阈值和目标阈值 original_ob = input(70, title="原超买阈值") target_ob = input(80, title="目标超买阈值") original_os = input(30, title="原超卖阈值") target_os = input(20, title="目标超卖阈值") // 计算线性映射的斜率和截距 slope = (target_ob - target_os) / (original_ob - original_os) intercept = target_ob - slope * original_ob // 计算原始RSI up = rma(max(change(src), 0), len) down = rma(-min(change(src), 0), len) rsi_raw = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down)) // 应用线性映射并限制数值范围 rsi_adjusted = clamp(slope * rsi_raw + intercept, 0, 100) // 绘制调整后的RSI曲线 plot(rsi_adjusted, "映射后RSI", color=color.white) // 绘制目标水平线 hline(target_ob, "目标超买线", color=color.red, linestyle=hline.style_solid) hline(target_os, "目标超卖线", color=color.blue, linestyle=hline.style_solid) hline(slope * 50 + intercept, "中线", color=color.gray, linestyle=hline.style_solid)
说明:
- 只需输入原指标的关键阈值(如原超买70)和想要的目标阈值(如80),代码会自动计算线性映射关系,保持区间内其他数值的相对比例。
- 同样通过
clamp()限制数值在0-100区间内。
内容的提问来源于stack exchange,提问作者kappamachine
相关产品推荐
相关产品推荐

