Pine script 使用PineScript重新评估每个蜡烛上的变量值以防止重新绘制错误

Pine script 使用PineScript重新评估每个蜡烛上的变量值以防止重新绘制错误,pine-script,Pine Script,Tradingview的警报选项并不适合在蜡烛移动时触发。这个移动平均线指示器将一直工作,直到一个特定的错误出现,这实际上是编码的基础。基本上,因为每支蜡烛有一个信号是我的条件,如果指示灯在一支蜡烛持续时间内从绿色到红色反复闪烁,然后设置在错误的位置,那么在接下来的几分钟内没有“新”的变化,这意味着交易失败,因为它没有得到新的信号 ahma = 0.0 ahma := nz(ahma[1]) + (src - (nz(ahma[1]) + nz(ahma[length])) / 2) / le

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")
即,它以红色开始,但蜡烛关闭,指示灯重新灰化为绿色,但它无法触发新警报,也不会在下一支蜡烛上检查以重新评估该值。也就是说,它没有检查值。它没有检查以确保打开的新蜡烛上的值确实是它认为的值,它认为它是红色的,因为警报不允许它在每根蜡烛上触发多次,这也是一个严重的重新绘制错误。避免这一切的最好方法是以某种方式添加几行代码,使其在下一个蜡烛上重新检查值。我不想使用“关闭时触发警报”的原因是因为它触发订单的时间太晚,我喜欢打开时触发的响应时间,但如果有意义的话,我希望它在下一支蜡烛前不触发就重新评估。

您有两个选择:

从脚本中的calcs透视图转到no Repait mode(无重绘模式),并接受这样一个事实,即为了实现这一点,您需要处理已过的条形图中的数据,在这种情况下,每个条形图可以触发一次警报,因此它将在确认后的条形图开始处触发。这将需要修改您的代码,以引用关闭的条形图中的数据,或实时条形图的打开位置(不会更改)

保持脚本原样,但在警报关闭时使用每个栏一次,从而间接实现不重新绘制

就这样。没有其他选择,因为在Pine中没有勾号引用,在实时条关闭之前,不会保留实时条期间发生的事件的历史记录。变量仅在栏关闭时提交,因此每次脚本因价格变化而在实时栏中重新执行时,都会重新初始化变量

有关避免重新绘制的技术和代码的讨论,请参见此处:

有关Pine中运行时模型的描述,请参见此处:

是的,我在四处阅读,其他人也有这个问题,对此有点大惊小怪,所以你肯定是说到点子上了。另一方面,我正在考虑用python在30秒的图表上评估研究数据,这在系统中是一个很好的优势,从总体上看,pinescript中缺少特性,再加上警报选项的缺乏,也就是说,您可以t使用不到1分钟的提醒是电视的障碍。正如电视在用户手册的介绍中所写,Pine是一种轻量级语言。它让交易者可以用很少的代码完成相当多的工作,但它从来没有打算成为一种包罗万象的交易平台编程语言。因此,我们需要找出最适合您的需求的方法,这不可避免地需要进行实验。有些人喜欢在松树里做任何事;其他人主要用于原型制作。我认为它肯定找到了自己的一个有用的利基,这也意味着它并不适合所有人。德国劳埃德船级社!此外,在Pine使用tick引用之前,PineCoder有这样一个建议,即允许脚本在实时条中计时连续条件的持续时间。可以让我们在这段时间内达到一半:是的,我目前广泛使用autoview语法的延时,但当然电视还没有功能。更糟糕的是,我引用的上述代码似乎延迟了两支蜡烛,而不是一支蜡烛。在2分钟的图表上,我在关闭时得到了4分钟的延迟,而正常情况下每小节有一次2分钟的延迟,这当然会导致反向错误信号。