首页 > 解决方案 > 使用 PineScript 重新评估每根蜡烛的变量值,以防止重新绘制错误

问题描述

Tradingview 的警报选项不适合在蜡烛移动时触发。这个移动平均线指标将一直工作,直到出现特定错误,这实际上是编码的基础。基本上,因为每根蜡烛的一个信号是我的条件,如果指示器在一根蜡烛持续时间内反复闪烁绿色到红色,然后停留在错误的信号上,那么在接下来的几分钟内都没有“新”变化(这意味着失去交易,因为它没有收到新的信号)

ahma = 0.0
ahma := nz(ahma[1]) + (src - (nz(ahma[1]) + nz(ahma[length])) / 2) / 
length 


col1= ahma>ahma[1]
col3= ahma<ahma[1]
isNewCol1 = nz(col3[1]) and col1
isNewCol3 = nz(col1[1]) and col3
colorP = col1 ? green : col3 ? red : yellow
plot(ahma, color=colorP, linewidth=3, title="ahma")

alertcondition(condition=isNewCol1, title="Long", message="green")
alertcondition(condition=isNewCol3, title="Short", message="red")

IE。它以红色开始,但蜡烛在指示器重新闪烁绿色时关闭,但它无法触发新警报,并且不会检查下一个蜡烛以重新评估值。即它不检查值。它不是检查以确保在打开新蜡烛时该值确实是它认为的那样,它认为它是红色的,因为警报不允许它在每根蜡烛上触发多次,这也是一个严重的重绘错误。避免这一切的最好方法是以某种方式添加几行代码,使其重新检查下一根蜡烛的值。我不想使用“关闭时触发警报”的原因是因为它会延迟触发订单,我喜欢打开时触发的响应时间,但希望它重新评估而不触发直到下一个蜡烛,如果这有意义的话。

标签: pine-script

解决方案


你有两个选择:

  1. 从脚本中的 calcs 角度进入无重绘模式,并接受这样一个事实,即为了实现这一点,您需要使用已经过去的柱中的数据,在这种情况下,您的警报可以“每柱一次”触发,所以确认后,它将在柱的开始处触发。这将需要修改您的代码以引用闭合柱或open实时柱的数据(不会改变)。

  2. 通过保持脚本原样但在警报中使用“每栏关闭一次”来间接实现不重绘。

而已。没有其他选择,因为在 Pine 中没有刻度参考,在实时柱关闭之前,无法保留在实时柱期间发生的事件历史记录。变量仅在柱线收盘时提交,因此每次您的脚本由于价格变化在实时柱线中重新执行时,它们都会重新初始化。

有关避免重绘的技术和代码的讨论,请参见此处: https ://www.tradingview.com/script/s8kWs84i-How-to-avoid-repainting-when-NOT-using-security/

有关 Pine 中运行时模型的说明,请参见此处: https ://www.tradingview.com/pine-script-docs/en/v4/language/Execution_model.html


推荐阅读