需要一些帮助才能使以下功能正常工作

Need some help in making following function work

我写了一个 test/practice 函数来执行给定时间范围内的 macd,如下所示,它给我错误

//@version=4
study(title="function test") 

src = close

//---macd, signal, histogram definitions

fastl = 12
slowl = 26
sigl = 9

fastMA = ema(src, fastl)
slowMA = ema(src, slowl)
macd = fastMA - slowMA
sig = ema(macd, sigl)
hist = macd - sig


//---function for macd calculations


//current time frame 

nt=timeframe.period


//function to automate calculating macd, signal and histogram for th nt or the current time frame.

omsh(nt) => 
    omf = security(syminfo.tickerid, nt, macd)
    osf = security(syminfo.tickerid, nt, sig)
    ohf = security(syminfo.tickerid, nt, hist)

// MACD plot

hline(0, '0 Line', linestyle=hline.style_solid, linewidth=1, color=color.gray)

plot(omf, color=color.blue)
plot(osf, color=color.red)
plot(ohf, style=plot.style_histogram, linewidth=1, transp=55)

以上函数给出了以下错误

line 38: Undeclared identifier `omf`;
line 39: Undeclared identifier `osf`;
line 40: Undeclared identifier `ohf`

我只是想不出如何绕过它。

它们已经在函数 omsh(nt) 中声明了,不是吗?

并且函数 omsh(nt) 已经 run/executed/processed,输入 "nt",不是吗?

输入的nt被声明为ok了吗?我认为我做对了,但我可能是错的。

感谢您的帮助。

omsh(nt) => 
    omf = security(syminfo.tickerid, nt, macd)
    osf = security(syminfo.tickerid, nt, sig)
    ohf = security(syminfo.tickerid, nt, hist)

您已在局部范围内声明了这些变量。这意味着,它们在函数之外是不可见的。这就是您收到该错误的原因。

您的代码中不需要函数。你可以简单地做:

omf = security(syminfo.tickerid, nt, macd)
osf = security(syminfo.tickerid, nt, sig)
ohf = security(syminfo.tickerid, nt, hist)
// MACD plot

hline(0, '0 Line', linestyle=hline.style_solid, linewidth=1, color=color.gray)

plot(omf, color=color.blue)
plot(osf, color=color.red)
plot(ohf, style=plot.style_histogram, linewidth=1, transp=55)

编辑:由于 OP 的评论

一个函数可以return多个变量。因此,您可以使用局部变量,最后 return 它们。

omsh(nt) => 
    f_omf = security(syminfo.tickerid, nt, macd)
    f_osf = security(syminfo.tickerid, nt, sig)
    f_ohf = security(syminfo.tickerid, nt, hist)
    [f_omf, f_osf, f_ohf]

那么当你调用这个函数时,你应该提供三个变量来获取return值:

[omf, osf, ohf] = omsh(nt)

然后像以前一样简单地绘制这些变量:

plot(omf, color=color.blue)
plot(osf, color=color.red)
plot(ohf, style=plot.style_histogram, linewidth=1, transp=55)