如何有条件地在ta.crossover上绘图



我是一个完全的新手,请对我宽容一点!

我有一个有效的脚本,但我需要完善它。相关的代码是:

plotshape(series = ta.crossover(close,upper1), style=shape.xcross, location=location.abovebar, color=color.new(color.blue, 0), size=size.tiny, display=display.pane)
plotshape(series = ta.crossunder(close,lower1), style=shape.xcross, location=location.belowbar, color=color.new(color.yellow, 0), size=size.tiny, display=display.pane)

正如您可能想象的那样,使用上面的代码,每当一个条形图在上方1或下方1闭合时,就会在相应条形图的上方或下方绘制一个小十字。

相反,我希望它首先评估条形图[2],看看该条形图上是否满足条件,然后转到下一个条形图,重新开始评估过程。但是,如果在bar[2]上不满足条件,那么我希望脚本继续到下一行,并以与bar[2]相同的方式评估bar[1],这样,如果在bar[1]上满足条件,则移动到下一个bar,重新开始评估过程。但是,如果在bar[1]上仍然不满足条件,那么我希望脚本继续bar[0]。如果在栏[0]上满足条件,则按照我现有的脚本进行绘图。如果在栏[0]上不满足条件,则在下一栏上从头开始重新启动脚本,依此类推。

净效果是,如果在前两个条形图上不满足相同的条件,则脚本将只在已越过上方1或越过下方1的条形图上方或下方绘制"x"。

我希望这是清楚的。我的感觉是,这真的应该不难做到,但由于我几乎没有使用pine脚本的经验,即使我已经阅读了《用户手册》,我也很难在代码中进行概念化。

任何见解都将不胜感激。

感谢阅读。

...
var condition2Check = false
var condition1Check = false
if not condition2 // condition not met
condition2Check := true
if condition2Check and not condition1 // condition2 not met before and now condition1 not met either
condition1Check := true
condition0Check = false
if condition1Check and condition0 // condition2 not met before and condition1 not met either but then condition0 met --> then plotshape as in my existing script.
condition0Check := true
condition1Check := false
condition2Check := false
else
condition1Check := false // reset previous checks
condition2Check := false // reset previous checks
coSeries = ta.crossover(close,upper1) // these must be called on each bar
cuSeries = ta.crossunder(close,lower1) // these must be called on each bar
plotshape(condition0Check ? coSeries : na, style=shape.xcross, location=location.abovebar, color=color.new(color.blue, 0), size=size.tiny, display=display.pane)
plotshape(condition0Check ? cuSeries : na, style=shape.xcross, location=location.belowbar, color=color.new(color.yellow, 0), size=size.tiny, display=display.pane)

基本上,这是一种方法,然而,在不了解你的情况下,我无法让你走得更远
在此脚本中,您将检查当前栏上的条件级别(分别为2,1,0(,并将实时结果存储到var变量中,然后再转到下一个栏,在那里您可以检查与上一个栏相关的下一个条件
尽管根据您的情况,您也可以很好地利用序列数据上的历史引用运算符来执行";回顾";在每个条上从当前条向后检查以前的条件。这是一个非常简单的例子:

...
if close[2] < open[2] and close[1] < open[1] and condition0
// plot condition met - Note: plot still needs to be called in the global scope
...

并不是说这样,你还需要确保添加一个控制上次绘制时间的复选框,因为上面的条件在多个连续的条形图上可能成立,你可能不希望这样。

最新更新