首页 > 解决方案 > 蜡烛的可变开始时间

问题描述

我想编写一个代码,如果在 X 条后面和前一个条之间发生条件,则条件为真。如果期间的起始蜡烛是变量,则使用方括号将不起作用。

例子

在上面的示例中,如果 RSI 超过 50 并且在(RSI 低于 30 时的蜡烛)和(超过​​ 50 时的蜡烛之前的蜡烛)之间,我想得到一个信号. 在这种情况下,带有绿色垂直线的蜡烛是第一个越过 50 线的蜡烛,所以我想得到一个信号,但带有紫色线的蜡烛是它第二次越过 50,所以我不是有兴趣在那里有信号

我也尝试过使用 sum() 函数,因为它似乎是最简单的选择,但它不接受使用 barsince() 的函数中的可变长度,这给了我这个错误:

“Pine 无法确定系列的参考长度。尝试使用 max_bars_back”

我还添加了 sincedown 和 sinceup >0 的条件,因为 sum() 函数在 rsi >70 或 <30 时不接受长度为 0。

可能很简单,但我找不到正确的代码。

谢谢

//@version=4

study(title="Relative Strength Index", shorttitle="RSI", format=format.price, precision=2, resolution="")

len = input(14, minval=1, title="Length")
src = input(close, "Source", type = input.source)

up = rma(max(change(src), 0), len)
down = rma(-min(change(src), 0), len)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))

os = rsi < 30
ob = rsi > 70

sincedown = barssince(os)
sinceup = barssince(ob)

condup = sincedown > 0 ? sum(rsi > 50 ? 1 : 0, sincedown) : na
conddn = sinceup > 0 ? sum(rsi < 50 ? 1 : 0, sinceup) : na

gup = rsi > 50 and condup == 0 ? 1 : 0
gdn = rsi < 50 and conddn == 0 ? 1 : 0

bgcolor(gup ? color.green : gdn ? color.red : na, transp = 60)
plot(rsi, "RSI", color=#8E1599)
band1 = hline(70, "Upper Band", color=#C0C0C0)
mid = hline(50, "Mid", color=#C0C0C0)
band0 = hline(30, "Lower Band", color=#C0C0C0)
fill(band1, band0, color=#9915FF, transp=90, title="Background")

标签: pine-script

解决方案


推荐阅读