需要一些帮助才能使以下功能正常工作
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)
我写了一个 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)