Pine Script预警变量无法随用户输入更新 如何重新初始化?
问题根因
这是TradingView的固有机制:预警在创建时会对当前脚本的所有输入参数、代码逻辑生成一份固定快照,后续你修改脚本的输入参数、甚至修改脚本本身的代码,都不会同步到已经创建完成的预警上,只有删除原有预警后重新创建,才会加载最新的参数和代码逻辑,你遇到的参数不更新的问题是正常的平台特性,不是代码逻辑错误。
可选解决方案
方案1:保留input参数的用法
如果习惯用输入框调整参数,每次修改TP Price的数值后,直接删除原有预警,用修改后的脚本重新创建预警即可,不需要调整代码。
方案2:无需重建预警的实现方式
如果不想每次修改参数都重建预警,可以把价格参数的入口从静态的input改为可交互的图表绘制对象,比如手动可拖动的价格线,调整价格时只需要拖动线的位置即可,无需修改参数也无需重建预警,参考优化代码:
//@version=5 indicator("动态TP预警", overlay=true) var symbol = syminfo.basecurrency + "/" + syminfo.currency var avPrefix = "e=oandapractice " + " s=" + symbol + "" // 创建可拖动的TP价格线,默认位置是当前收盘价 var line tpLine = line.new(bar_index - 1, close, bar_index, close, width=2, color=color.green, style=line.style_dashed, title="TP价位") // 实时更新线的x轴位置,保证一直显示在图表最右侧 line.set_x2(tpLine, bar_index) // 读取线的y轴价格作为TP价格 TpPrice = line.get_y1(tpLine) if barstate.isrealtime and barstate.islastconfirmedhistory clearOrder = avPrefix + " c=order\n " tpTrigger = avPrefix + " b=sell" + " q=20000" + " t=limit" + " fp=" + str.tostring(TpPrice) alert(message=clearOrder + tpTrigger, freq=alert.freq_once_per_bar_close)
原有代码的小优化建议
你原代码中var TpPrice = 0.0的声明其实可以省略,直接读取输入参数或者价格线的数值即可,不需要额外用var变量中转。
内容的提问来源于stack exchange,提问作者Barney
相关产品推荐
相关产品推荐

