如何在Pine Script脚本间传递simple integer?解决参数类型错误
解决Pine Script跨脚本传值至
request.security的问题 问题原因
input.source仅支持传递series类型变量,但request.security的calc_bars_count参数要求传入simple int类型,直接传递会触发类型不匹配的报错。我们需要把脚本A中的整数转换为兼容格式,或者更换跨脚本传值方式。
方案一:将脚本A的固定值转为series,脚本B提取为simple int
修改后的脚本A
把原有的bars转为固定不变的series(因是硬编码值,全周期不会改变):
//@version=5 indicator("A", overlay=false) bars = 100 plot(bars, title="Nr. of bars") // 输出固定series值供脚本B读取 var float fixed_bars = bars plot(fixed_bars, title="Fixed Bars", display=display.data_window)
修改后的脚本B
通过input.source选择脚本A的Fixed Bars系列,再在图表初始化时转为simple int:
//@version=5 indicator("B") // 选择脚本A输出的Fixed Bars系列 bars_series = input.source(title='Nr. of bars', defval=close) // 图表加载完成后提取series值,转为simple int var int bars = na if barstate.islast bars := int(bars_series) // 正常传入calc_bars_count参数 c = request.security(syminfo.tickerid, "D", close, calc_bars_count=bars) plot(c)
方案二:直接在脚本B中调用脚本A的输出(无需input.source)
如果不需要用户手动选择数据源,可直接调用脚本A的指标输出:
脚本A保持原版本即可
//@version=5 indicator("A") bars = 100 plot(bars, title="Nr. of bars")
修改后的脚本B
//@version=5 indicator("B") // 调用脚本A的指标,获取其输出的series值 a_bars_series = ta.indicator("A", syminfo.tickerid, timeframe.period) // 转换为simple int类型 var int bars = int(a_bars_series) // 传入request.security参数 c = request.security(syminfo.tickerid, "D", close, calc_bars_count=bars) plot(c)
补充说明
两种方案的核心逻辑一致:先将脚本A的simple值转为series类型,再在脚本B中转换为request.security要求的simple int类型。方案一适合需要用户手动切换数据源的场景,方案二更适合固定依赖脚本A的场景。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

