【问题标题】:How to stop the script if a condition is met?如果满足条件,如何停止脚本?
【发布时间】:2021-06-01 02:20:56
【问题描述】:

(P.S.我有一个类似的问题,但我删除了它并写了这个简化的)

脚本有一个起点,它开始搜索条件,从这一点开始,当首先满足这三个条件中的任何一个时,我需要停止从该点绘制任何内容,包括如果再次满足相同的条件未来。

对于虚拟脚本,我对这 3 个条件中的每一个都使用了 3 个 EMA 交叉,因此如果 close 将首先交叉 ema50,那么将来它们中的任何一个都应该不再有交叉图,基本上脚本应该停在那里。

这是我能得到的最远的地方,我的做法是不绘制任何东西。

编辑:我根据 LucF 的答案更新了脚本,效果很好(在满足这 3 个条件之一后没有绘制任何绘图或绘图形状,但我仍然需要在图表上绘制第一个条件/绘图形状。

//@version=4
study("My Script", overlay = true)

//time reset
ttt = input(title = "Date", defval = timestamp("25 Apr 2021 00:00 +0000"), type = input.time, inline = "time")
tz = input(0, title="TimeZone", type=input.integer, inline = "time")

timeadj = time + tz * 60 * 60 * 1000
t1 = timeadj >= ttt ? 1 : 0
bgcolor(t1 ? color.new(color.aqua, 95) :na)

//emas
ema50  = ema(close, 50)
ema100 = ema(close, 100)
ema200 = ema(close, 200)

//conditions
bool ema50_cross = crossover(close, ema50) and t1
bool ema100_cross = crossover(close, ema100) and t1
bool ema200_cross = crossover(close, ema200) and t1
var bool stopPlotting = false
stopPlotting := stopPlotting or ema50_cross or ema100_cross or ema200_cross

//plots
plot(not stopPlotting ? ema50  :na, color = color.yellow)
plot(not stopPlotting ? ema100 :na, color = color.purple)
plot(not stopPlotting ? ema200 :na, color = color.aqua)

//plotshapes
plotshape(not stopPlotting ? ema50_cross :na, color = color.yellow, size = size.small)
plotshape(not stopPlotting ? ema100_cross :na, color = color.purple, size = size.small)
plotshape(not stopPlotting ? ema200_cross :na, color = color.aqua, size = size.small)

【问题讨论】:

    标签: pine-script


    【解决方案1】:

    每当你的一个十字架出现时,这将停止绘图:

    //@version=4
    study("My Script", overlay = true)
    
    ema50  = ema(close, 50)
    ema100 = ema(close, 100)
    ema200 = ema(close, 200)
    
    bool ema50_cross = crossover(close, ema50)
    bool ema100_cross = crossover(close, ema100)
    bool ema200_cross = crossover(close, ema200)
    var bool stopPlotting = false
    stopPlotting := stopPlotting or ema50_cross or ema100_cross or ema200_cross
    
    plot(not stopPlotting ? ema50  :na, color = color.yellow)
    plot(not stopPlotting ? ema100 :na, color = color.purple)
    plot(not stopPlotting ? ema200 :na, color = color.aqua)
        
    plotshape(ema50_cross, color = color.yellow, size = size.small)
    plotshape(ema100_cross, color = color.purple, size = size.small)
    plotshape(ema200_cross, color = color.aqua, size = size.small)
    

    【讨论】:

    • 我将时间重置添加到您的脚本中,实际上,当首先满足这 3 个条件中的任何一个时,它会停止绘图,但我需要在图表上显示第一个 plotshape(cross),我按照您的所有 3 个绘图形状的示例plotshape(not stopPlotting ? ema50_cross :na, color = color.yellow, size = size.small)...其他两个绘图形状相同,但这种方式将停止绘制所有绘图形状,包括我想要绘制的第一个绘图形状。
    • 不客气。您在最初的问题中没有提到该要求。如果您需要更多帮助,请在问题末尾添加可编译的 sn-p 编辑。
    • 好吧,我用你的代码玩了一点,我从stopPlotting := s...行添加了条件索引,用stopPlotting := stopPlotting or ema50_cross[1] or ema100_cross[1] or ema200_cross[1]更改,显然它正在工作,它只会显示第一个条件/遇到的情节形状,从不重复,但我不确定这是否是最好的方法。无论如何,再次感谢,学到了新东西,如果没有其他办法,我会将您的答案标记为已接受。
    • 这应该可以正常工作,但会让您的 MA 稍后停止绘制一个条形图。也可以仅在 plotshape() 测试中使用 stopPlottingstopPlotting[1] 的先前实例。
    猜你喜欢
    • 2022-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多