使用 PineScript 重新评估每根蜡烛的变量值以防止重绘错误
Using PineScript to reassess variable value on each candle to prevent repainting errors
Tradingview 的警报选项在蜡烛移动时触发时并不理想。该移动平均线指标将一直有效,直到出现特定错误,这实际上对编码来说有些基础。基本上,由于每支蜡烛一个信号是我所拥有的条件,如果指示器在一根蜡烛持续时间内反复闪烁绿色到红色,然后稳定在错误的信号上,那么接下来的几分钟内没有 'new' 变化(这意味着交易失败,因为它没有收到新信号)
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")
即。它以红色开始,但蜡烛关闭时指示器重新闪烁绿色,但它无法触发新警报,也不会检查下一根蜡烛以重新评估值。即它不检查值。它不会检查以确保在打开的新蜡烛上该值确实是它认为的值,它认为它是红色的,因为警报不允许它在每根蜡烛上触发多次,这也是一个严重的重新绘制错误。避免这一切的最好方法是以某种方式添加几行代码,使其重新检查下一根蜡烛的值。我不想使用 'trigger alert on close' 的原因是因为它触发订单的时间较晚,我喜欢打开时触发的响应时间,但希望它重新评估而不触发直到下一根蜡烛,如果这有意义的话。
你有两个选择:
从脚本的计算角度进入无重绘模式,并接受这样一个事实,即为了实现这一点,您需要处理来自已经过去的柱的数据,在这种情况下,您的可以触发警报 "Once Per Bar" 因此它将在确认后的柱开始时触发。这将需要修改您的代码以引用来自关闭柱或实时柱的 open
(不会更改)的数据。
通过保持脚本不变但在警报中使用 "Once Per Bar Close" 间接实现无重绘。
就是这样。没有其他选择,因为在 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
Tradingview 的警报选项在蜡烛移动时触发时并不理想。该移动平均线指标将一直有效,直到出现特定错误,这实际上对编码来说有些基础。基本上,由于每支蜡烛一个信号是我所拥有的条件,如果指示器在一根蜡烛持续时间内反复闪烁绿色到红色,然后稳定在错误的信号上,那么接下来的几分钟内没有 'new' 变化(这意味着交易失败,因为它没有收到新信号)
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")
即。它以红色开始,但蜡烛关闭时指示器重新闪烁绿色,但它无法触发新警报,也不会检查下一根蜡烛以重新评估值。即它不检查值。它不会检查以确保在打开的新蜡烛上该值确实是它认为的值,它认为它是红色的,因为警报不允许它在每根蜡烛上触发多次,这也是一个严重的重新绘制错误。避免这一切的最好方法是以某种方式添加几行代码,使其重新检查下一根蜡烛的值。我不想使用 'trigger alert on close' 的原因是因为它触发订单的时间较晚,我喜欢打开时触发的响应时间,但希望它重新评估而不触发直到下一根蜡烛,如果这有意义的话。
你有两个选择:
从脚本的计算角度进入无重绘模式,并接受这样一个事实,即为了实现这一点,您需要处理来自已经过去的柱的数据,在这种情况下,您的可以触发警报 "Once Per Bar" 因此它将在确认后的柱开始时触发。这将需要修改您的代码以引用来自关闭柱或实时柱的
open
(不会更改)的数据。通过保持脚本不变但在警报中使用 "Once Per Bar Close" 间接实现无重绘。
就是这样。没有其他选择,因为在 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