首页 > 解决方案 > 尝试在 Pine 脚本中制作一个在不同时间尺度上工作的 RSI 指标

问题描述

好的,所以我的代码是这样的:

rsilength = input(14, title="RSI Length", type=input.integer)
//200 SMA
sma = sma(close, input(200))
rsiset = rsi(close, rsilength)
rsiW = security(syminfo.tickerid, "W", rsiset)  // 1 Week
rsiD = security(syminfo.tickerid, "D", rsiset)  // 1 Day
rsi4h = security(syminfo.tickerid, "240", rsiset) // 4h

if rsi4h == rsiset
    sma := sma(close, input(1200))
if rsiD == rsiset
    sma := sma(close, input(200))
if rsiW == rsiset
    sma := sma(close, input(29))

我试图让 sma 图正确显示在每日、4 小时和每周图表上。

它正在工作。SMA 线在所有 3 个时间框架上都绘制得很好。但我收到警告

每次计算都应调用函数“sma”以保持一致性。建议从此范围中提取调用。

有没有办法写同样的东西而不收到警告?RSI 也可以正常工作(我在代码的下方使用它们。唯一困扰我的是 ifs 中每个 sma 的 3 个警告

标签: pine-scripttrading

解决方案


//@version=4
study("My Script")

var int     myInput = 1

rsilength   = input(14, title="RSI Length", type=input.integer)

sma         = sma(close, input(200))

rsiset      = rsi(close, rsilength)
rsiW        = security(syminfo.tickerid, "W",   rsiset) // 1 Week
rsiD        = security(syminfo.tickerid, "D",   rsiset) // 1 Day
rsi4h       = security(syminfo.tickerid, "240", rsiset) // 4h

if rsi4h == rsiset
    myInput := input(1200, "input rsi4h")
else if rsiD == rsiset
    myInput := input( 200, "input rsiD")
else if rsiW == rsiset
    myInput := input(  29, "input rsiW")

sma := sma(close, myInput)

plot(sma)

推荐阅读