如何在TradingView Supercharts中绘制ETF组合加权平均收益率曲线?
实现基于基准日的ETF涨跌幅百分比及加权组合曲线(Pine Script v6)
核心思路
要实现左边缘为0%的涨跌幅曲线,关键是以时间段起始点的价格为基准,将每个ETF的当前价格转换为相对基准的涨跌幅百分比;加权组合则先计算组合的实时净值,再基于组合的基准净值转换为百分比曲线,确保所有曲线的基准统一。
修改后的完整代码
//@version=6 indicator('ETF组合涨跌幅', overlay=true, scale=scale.percent) // 1. 获取两个ETF的实时收盘价 etf1_close = request.security('SPY', timeframe.period, close) etf2_close = request.security('SPDW', timeframe.period, close) // 2. 获取时间段起始点的基准价格(第一个K线的收盘价) var float etf1_base = na var float etf2_base = na if bar_index == 0 etf1_base := etf1_close etf2_base := etf2_close // 3. 计算单个ETF的相对基准涨跌幅(%) etf1_percent = (etf1_close / etf1_base - 1) * 100 etf2_percent = (etf2_close / etf2_base - 1) * 100 // 4. 计算加权组合的基准净值与实时净值,再转换为涨跌幅(%) // 权重设置:30% SPY,70% SPDW weight1 = 0.3 weight2 = 0.7 portfolio_base = weight1 * etf1_base + weight2 * etf2_base portfolio_current = weight1 * etf1_close + weight2 * etf2_close portfolio_percent = (portfolio_current / portfolio_base - 1) * 100 // 5. 绘制曲线 plot(etf1_percent, color=color.red, title='SPY 涨跌幅') plot(etf2_percent, color=color.blue, title='SPDW 涨跌幅') plot(portfolio_percent, color=color.green, title='30%SPY+70%SPDW 组合', linewidth=2)
代码关键部分解释
- 基准价格锁定:用
var关键字定义基准变量,确保仅在第一个K线(bar_index == 0)时赋值一次,后续不再修改,保证基准点固定为时间段左边缘。 - 涨跌幅转换:通过
(当前价/基准价 - 1)*100公式,将绝对价格转换为相对基准的百分比涨跌幅,自然实现左边缘为0%的展示效果。 - 加权组合计算:先计算组合在基准日的总价值,再计算实时总价值,最后转换为百分比涨跌幅,确保组合曲线与单个ETF的基准完全对齐。
- 刻度适配:
scale=scale.percent强制图表使用百分比刻度,完美匹配涨跌幅数据的展示需求。
使用说明
- 将代码粘贴到TradingView的Pine Script编辑器中,点击添加到图表。
- 图表会自动以当前所选时间段(如过去一年)的起始点为基准,显示两个ETF及组合的涨跌幅曲线,左边缘统一为0%。
- 如需调整权重,直接修改
weight1和weight2的值即可(建议权重总和为1)。
内容的提问来源于stack exchange,提问作者ragnarok
相关产品推荐
相关产品推荐

