Pine 脚本条件 1 和条件 2 最多向后 n 步满足

Use*_*124 3 if-statement conditional-statements pine-script

假设我有条件 1 和条件 2。如果在最多 5 个柱内满足条件 1 和条件 2,那么我想要执行一些操作。举个例子,假设当前收盘价满足条件 1,并且 5 根柱前满足条件 2,那么我想执行一些操作。我如何在 Pine 中表述它?

condition1 = ...
condition2 = ...

if (condition1(close)==true or condition1(close-2)==true  or             
condition1(close-3)==true  or condition1(close-4)==true  or     
condition1(close-5)==true)

and (condition2(close)==true or condition2(close-2)==true  or             
condition2(close-3)==true  or condition2(close-4)==true  or     
condition2(close-5)==true)

then...
Run Code Online (Sandbox Code Playgroud)

也许可以这样表述:

if condition1(close:close-5)== true and condition2(close:close-5)== true then ...
Run Code Online (Sandbox Code Playgroud)

我读过例如这个帖子: 仅更改最后 5 个小节的背景:一个我无法破解的非常简单的问题 这听起来像是一个类似的问题,但我不确定如何实现它。

小智 6

a)您需要使用ta.barssince()函数。

https://www.tradingview.com/pine-script-reference/v5/#fun_ta%7Bdot%7Dbarssince

//@version=5
indicator("My Script")

/// let's say condition 1 was met at current close, and condition 2 was fulfilled 5 bars ago, then I want to perform some action

ema10 = ta.ema(close, 10)
condition1 = close > open
condition2 = ta.crossover(ema10, close)


x = false

if condition1 and ta.barssince(condition2) == 5
    x := true


plot(ema10)    
bgcolor(condition2? color.orange:na)
bgcolor(x?color.green:na)

Run Code Online (Sandbox Code Playgroud)

b) 另一种方法是使用历史引用运算符[]

https://www.tradingview.com/pine-script-docs/en/v5/language/Operators.html#history-referencing-operator

//@version=5
indicator("My Script")

// lets say you want to check if condition2 if true for 5 bars, and condition1 is true in the current bar

ema10 = ta.ema(close, 10)
condition1 = ta.crossover(ema10, close) 
condition2 = close > open

condition3 = condition2[1] and condition2[2] and condition2[3] and condition2[4] and condition2[5]


x = false

if condition1 and condition3
    x := true

plot(ema10)    
bgcolor(condition2? color.orange:na)
bgcolor(x?color.green:na)




Run Code Online (Sandbox Code Playgroud)