如何根据TradingView当前主标的自动切换自定义指标?
解决方案:根据主标的动态显示自定义指数指标
方法一:将两个指标逻辑整合到单个脚本(推荐)
直接把两个指数的计算逻辑合并到一个脚本中,无需调用外部自定义指标,实现更简洁:
indicator(title = "Dynamic Index", shorttitle = "DynIdx", overlay = false) // 获取当前图表的主标的代码 current_ticker = syminfo.ticker // 封装科技指数计算逻辑 calc_tech_idx() => sec_1_t = request.security("NASDAQ:AAPL", timeframe.period, close) sec_2_t = request.security("NASDAQ:MSFT", timeframe.period, close) sec_3_t = request.security("NASDAQ:GOOGL", timeframe.period, close) sec_4_t = request.security("NASDAQ:AMZN", timeframe.period, close) sec_1_t*0.25 + sec_2_t*0.25 + sec_3_t*0.25 + sec_4_t*0.25 // 封装银行指数计算逻辑 calc_bank_idx() => sec_1_b = request.security("NYSE:JPM", timeframe.period, close) sec_2_b = request.security("NYSE:BAC", timeframe.period, close) sec_3_b = request.security("NYSE:WFC", timeframe.period, close) sec_4_b = request.security("NYSE:GS", timeframe.period, close) sec_1_b*0.25 + sec_2_b*0.25 + sec_3_b*0.25 + sec_4_b*0.25 // 根据主标的选择要显示的指数 display_value = na if current_ticker == "AAPL" display_value = calc_tech_idx() elif current_ticker == "JPM" display_value = calc_bank_idx() // 仅绘制有效数据 plot(display_value, title="Dynamic Index", color=color.blue, display=display.data_window)
代码说明
- 用
syminfo.ticker获取当前主标的代码; - 把两个指数的计算逻辑封装成函数,提升代码可读性;
- 通过条件判断给
display_value赋值:主标为AAPL时计算科技指数,JPM时计算银行指数,其他情况保持空值na; - 绘图时仅显示有有效值的部分,避免空值干扰。
方法二:调用已发布的自定义指标(需指标公开)
如果你的Tech_idx和Bank_idx已经发布为公开指标,可通过request.security()结合指标引用路径调用(需替换实际账户名和指标发布名称):
indicator(title = "Dynamic Index", shorttitle = "DynIdx", overlay = false) current_ticker = syminfo.ticker // 调用公开自定义指标,格式:[标的代码]@[用户名]:[指标名称] tech_idx_value = request.security("NASDAQ:AAPL@your_username:Big.tech", timeframe.period, close) bank_idx_value = request.security("NYSE:JPM@your_username:Big.Banks", timeframe.period, close) display_value = na if current_ticker == "AAPL" display_value = tech_idx_value elif current_ticker == "JPM" display_value = bank_idx_value plot(display_value, title="Dynamic Index", color=color.blue)
你之前代码的问题
request.security仅用于获取证券行情数据,无法直接调用自定义指标;- 变量赋值语法错误:
var string b =未完成赋值,且字符串类型不能用NULL; - 你尝试调用的XLF、XLK是ETF,并非自己创建的自定义指标,不符合需求。
内容的提问来源于stack exchange,提问作者mariano.b.
相关产品推荐
相关产品推荐

