如何绕过Pine Script资产调用限制,编写NIFTY50市场宽度指标
绕过Pine Script 40只标的限制,编写NIFTY 50市场宽度指标的方法
方法1:拆分脚本为两个独立指标
把50只NIFTY50成分股分成两组(比如25+25),分别编写两个Pine Script指标,各自处理一组标的的市场宽度统计(比如上涨家数、均线突破家数等),最后在图表上合并结果。
- 操作步骤:
- 第一组脚本:选取25只成分股,用
request.security逐个获取标的数据,统计目标指标(如站上20日均线的家数)。 - 第二组脚本:处理剩余25只成分股,复用相同的统计逻辑。
- 在TradingView图表上同时加载两个指标,手动将两组统计值相加,得到完整的50只标的市场宽度数据。
- 第一组脚本:选取25只成分股,用
- 代码片段示例(第一组):
//@version=5 indicator("NIFTY50 宽度指标-组1", overlay=false) // 填入前25只NIFTY50成分股代码 symbols = ["RELIANCE", "TCS", "HDFCBANK", "INFY", "ICICIBANK", ...] upCount = 0 for sym in symbols closeVal = request.security(sym, timeframe.period, close) ma20 = ta.sma(closeVal, 20) if closeVal > ma20 upCount += 1 plot(upCount, title="组1站上年线家数")
方法2:跨bar分批获取数据(进阶)
利用var变量存储跨bar数据,在不同bar周期分批获取两组标的的数据,最后合并计算。这种方法需注意数据同步问题,适合有Pine Script经验的用户。
- 代码片段示例:
//@version=5 indicator("NIFTY50 宽度指标-合并版", overlay=false) var int upCount1 = 0 var int upCount2 = 0 // 拆分两组成分股代码 symbols1 = ["RELIANCE", "TCS", ...] // 25只 symbols2 = ["HDFCLIFE", "BAJFINANCE", ...] // 25只 // 偶数bar获取第一组数据,奇数bar获取第二组 if bar_index % 2 == 0 upCount1 := 0 for sym in symbols1 closeVal = request.security(sym, timeframe.period, close) ma20 = ta.sma(closeVal, 20) if closeVal > ma20 upCount1 += 1 else upCount2 := 0 for sym in symbols2 closeVal = request.security(sym, timeframe.period, close) ma20 = ta.sma(closeVal, 20) if closeVal > ma20 upCount2 += 1 totalUp = upCount1 + upCount2 plot(totalUp, title="总站上年线家数")
方法3:利用TradingView指标组合功能
加载两个拆分的分组指标后,通过TradingView自带的组合功能合并输出:
- 操作步骤:右键点击其中一个指标的线条,选择「添加到组合」,再选择另一个指标的对应输出,即可自动生成合并后的总数据系列。
内容的提问来源于stack exchange,提问作者Krishnendu Bhattacharyya
相关产品推荐
相关产品推荐

