Pine指标无需编译 14 6
多空动能仪表盘(Pine v6)
把 RSI、MACD、ADX、均线方向合成一个 -100 到 100 的动能分数

composite_score_indicator.pine79 行
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
//@version=6
indicator("综合评分指标", shorttitle="综合评分", overlay=false)
// ========== 可调参数 ==========
rsiPeriod = input.int(14, title="RSI 周期", minval=1)
macdFast = input.int(12, title="MACD 快线周期", minval=1)
macdSlow = input.int(26, title="MACD 慢线周期", minval=1)
macdSignal = input.int(9, title="MACD 信号线周期", minval=1)
adxPeriod = input.int(14, title="ADX 周期", minval=1)
adxThreshold = input.int(20, title="ADX 趋势阈值", minval=1)
emaFast = input.int(50, title="EMA 快线周期", minval=1)
emaSlow = input.int(200, title="EMA 慢线周期", minval=1)
// 权重参数(推荐总和为 1.0,但代码会自动归一化)
weightRSI = input.float(0.25, title="RSI 权重", minval=0.0, step=0.05)
weightMACD = input.float(0.25, title="MACD 权重", minval=0.0, step=0.05)
weightADX = input.float(0.25, title="ADX 权重", minval=0.0, step=0.05)
weightEMA = input.float(0.25, title="EMA 权重", minval=0.0, step=0.05)
// ========== 计算四个维度 ==========
// 1. RSI 维度:相对 50 的偏离,范围 -100 到 +100
rsiValue = ta.rsi(close, rsiPeriod)
rsiScore = (rsiValue - 50) * 2.0 // RSI=0 -> -100, RSI=100 -> +100, RSI=50 -> 0
// 2. MACD 维度:柱状体正负,简化为 -100 / 0 / +100
[macdLine, signalLine, histLine] = ta.macd(close, macdFast, macdSlow, macdSignal)
macdScore = histLine > 0 ? 100.0 : (histLine < 0 ? -100.0 : 0.0)
// 3. ADX 维度:趋势强度,大于阈值为 +100,小于为 -100
adxValue = ta.adx(adxPeriod)
adxScore = adxValue >= adxThreshold ? 100.0 : -100.0
// 4. EMA 维度:快线在慢线上方为 +100,下方为 -100
emaFastValue = ta.ema(close, emaFast)
emaSlowValue = ta.ema(close, emaSlow)
emaScore = emaFastValue > emaSlowValue ? 100.0 : (emaFastValue < emaSlowValue ? -100.0 : 0.0)
// ========== 加权合成总分 ==========
// 计算权重总和,防止除零
weightSum = weightRSI + weightMACD + weightADX + weightEMA
weightSumSafe = weightSum > 0 ? weightSum : 1.0 // 如果用户把所有权重都设为 0,用 1.0 避免除零
// 加权平均,保持 -100 到 +100 范围
compositeScore = (rsiScore * weightRSI + macdScore * weightMACD + adxScore * weightADX + emaScore * weightEMA) / weightSumSafe
// ========== 绘制柱状图 ==========
// 根据总分着色:>30 绿色、<-30 红色、中间灰色
barColor = compositeScore > 30 ? color.new(color.green, 0) : (compositeScore < -30 ? color.new(color.red, 0) : color.new(color.gray, 30))
plot(compositeScore, title="综合评分", style=plot.style_histogram, color=barColor, linewidth=3)
// ========== 参考线 ==========
hline(30, title="多头区 +30", color=color.new(color.green, 70), linestyle=hline.style_dashed)
hline(0, title="中性 0", color=color.new(color.gray, 50), linestyle=hline.style_solid)
hline(-30, title="空头区 -30", color=color.new(color.red, 70), linestyle=hline.style_dashed)
// ========== 右上角 table 显示各维度得分 ==========
var table scoreTable = table.new(position.top_right, 2, 5, bgcolor=color.new(color.black, 85), border_width=1, border_color=color.new(color.gray, 50))
if barstate.islast
// 表头
table.cell(scoreTable, 0, 0, "维度", text_color=color.white, text_size=size.small, bgcolor=color.new(color.blue, 70))
table.cell(scoreTable, 1, 0, "得分", text_color=color.white, text_size=size.small, bgcolor=color.new(color.blue, 70))
// RSI 行
table.cell(scoreTable, 0, 1, "RSI", text_color=color.white, text_size=size.small)
table.cell(scoreTable, 1, 1, str.tostring(math.round(rsiScore, 1)), text_color=rsiScore > 0 ? color.lime : color.red, text_size=size.small)
// MACD 行
table.cell(scoreTable, 0, 2, "MACD", text_color=color.white, text_size=size.small)
table.cell(scoreTable, 1, 2, str.tostring(math.round(macdScore, 1)), text_color=macdScore > 0 ? color.lime : color.red, text_size=size.small)
// ADX 行
table.cell(scoreTable, 0, 3, "ADX", text_color=color.white, text_size=size.small)
table.cell(scoreTable, 1, 3, str.tostring(math.round(adxScore, 1)), text_color=adxScore > 0 ? color.lime : color.red, text_size=size.small)
// EMA 行
table.cell(scoreTable, 0, 4, "EMA", text_color=color.white, text_size=size.small)
table.cell(scoreTable, 1, 4, str.tostring(math.round(emaScore, 1)), text_color=emaScore > 0 ? color.lime : color.red, text_size=size.small)作品说明
思路说明
计算四个技术维度的独立得分,再按用户设定的权重加权平均,合成 -100 到 +100 的综合评分。RSI 偏离 50 中枢越远得分越极端;MACD 柱状体正负决定方向;ADX 大于 20 代表趋势强,小于 20 是震荡;EMA50 与 EMA200 的相对位置判断中长期趋势。四个维度各自标准化到 -100~+100,加权求和后除以权重总和,保持在同一尺度。柱状图用三色区分多空中性,table 实时显示各维度贡献,方便调试和优化权重配比。
使用说明
安装方法 在 TradingView 图表页面,点击底部「Pine 编辑器」,粘贴完整代码,点击「添加到图表」。指标会显示在主图下方的独立副图窗口。
参数调节
- 周期参数:RSI/MACD/ADX/EMA 的计算周期可按个人交易风格调整,默认值适用于日线级别
- ADX 趋势阈值:默认 20,低于此值判定为震荡市,高于为趋势市,可调到 25 提高趋势判定门槛
- 权重参数:四个维度默认各占 0.25(25%),可根据策略偏好调整,例如做趋势交易可提高 ADX 和 EMA 权重;代码会自动归一化,不必强制总和为 1
信号解读
- 绿色柱(>30):多个维度偏多,考虑做多或持有多单
- 红色柱(<-30):多个维度偏空,考虑做空或持有空单
- 灰色柱(-30~30):市场中性或维度分歧,观望或小仓位试探
- 右上角 table:实时显示四个维度各自贡献,绿色数字为正分,红色为负分,方便诊断哪些因素在主导当前评分
注意事项
- 本指标是辅助工具,需结合价格形态、支撑阻力位等其他因素综合判断
- ADX 和 EMA 维度采用二值化(±100),如需更细腻的渐变评分可自行修改公式
- 建议在回测中测试不同权重组合,找到适合标的和周期的配比
- RSI 极端超买超卖(>70 或 <30)时,评分会接近 ±40,叠加其他维度后可能触发 ±30 阈值
评论
后可以留言,比如反馈用着怎么样、想加什么功能。
还没有人评论,来抢个沙发。