繁体   English   中英

如何仅在 Pine 脚本中满足交叉条件的第一个值时 plot 行

[英]How to plot line only on first value of crossover condition met in Pine Script

我需要 Pine 脚本编码方面的帮助,我想要 plot 单独的第一个交叉值,而不是一整天的整个系列值。 因此,如果交叉条件第一次或第二次或第三次或 n 次为真,我需要 plot 从满足第一个条件到一天结束的行,并忽略第二个或第三个或第四个或第 n 个系列值到 plot。该怎么做? 我不想使用 line.new(),因为我想在 tradingview.com 中进行回测,对于历史柱,我想使用 Plot()。 所以请帮助我的代码。

我正在尝试的策略:从 5 分钟的高点到低点增加 30 点,如果 5 分钟的蜡烛第一次从高点交叉 30 点到 plot 线,如果一天内再次满足条件则忽略。


`
//@version=5
indicator(title="Crossover", shorttitle="Crossover", overlay=true)

//*5Mins High Low calculation*//
inputMax = input(5, title= "ORB total time (minutes)")
sess = input("0915-0920", title="Session Time") 
t = time(timeframe.period, sess + ":1234567")
hide = timeframe.isintraday and timeframe.multiplier <= inputMax
is_newbar(res) => ta.change(time(res)) != 0
in_session = not na(t)
is_first = in_session and not in_session[1]
orb_high = float(na)
orb_low = float(na)
if is_first
    orb_high := high
    orb_low := low
else
    orb_high := orb_high[1]
    orb_low := orb_low[1]
if high > orb_high and in_session
    orb_high := high
if low < orb_low and in_session
    orb_low := low
plot(hide ? orb_high : na , style=plot.style_line, color=orb_high[1] != orb_high ? na : color.green , title="ORB High", linewidth=3)
plot(hide ? orb_low : na , style=plot.style_line, color=orb_low[1] != orb_low ? na : color.red, title="ORB Low", linewidth=3)


//*Crossover condition*//
var Up = 0.0
Up := orb_high + 30
var b_i = 0.0
cross_over_happened = if(ta.crossover(close, Up)) and barstate.isconfirmed
    1
else
    0
b_i := ta.valuewhen(cross_over_happened, close, 0)
plot(b_i, color = color.black, linewidth = 2)
`

只要满足条件,上面的代码就会 plot,但我只需要 plot 交叉条件的第一个值,而不是整个系列。 请帮助代码。

我会以稍微不同的方式对此进行 go(这与您所做的非常接近)。 我会添加一个bool来检查今天是否已经发生交叉,并且仅当交叉和新bool为真时才会更改b_i的值。

首先设置我们需要的变量:

var float orb_high = na
var float orb_low = na
var bool already_had_crossover_today = false
var float b_i = na

其次,在每个新的一天重置这些变量:

if ta.change(time("D"))
    orb_high := high
    orb_low := low
    already_had_crossover_today := false
    b_i := na

第三,我们将检查crossover ,无论它是否是当天的第一个:

Up = orb_high + 30
cross_over_happened = ta.crossover(close, Up)

最后,我们将检查我们是否有交叉,并且在白天交叉尚未发生:

if cross_over_happened and not already_had_crossover_today
    b_i := close
    already_had_crossover_today := true

比我们可以只使用plot ,为了更好的可视化使用style参数:

plot(b_i, style = plot.style_linebr)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM