问题描述
我正在尝试测试RSI-14 DI反转策略,但是无法通过其所使用的功能访问DI +或DI-(变量为“正”和“负”)。访问他们?这是代码:
//@version=4
strategy("RSI-14,DI+,DI- Reversal Strategy",overlay=false)
/// DI+ DI- Code /// /// DI+ is the variable called "plus" and DI- is the variable called "minus"
adxlen = input(14,title="ADX Smoothing")
dilen = input(14,title="DI Length")
dirmov(len) =>
up = change(high)
down = -change(low)
plusDM = na(up) ? na : (up > down and up > 0 ? up : 0)
minusDM = na(down) ? na : (down > up and down > 0 ? down : 0)
truerange = rma(tr,len)
plus = fixnan(100 * rma(plusDM,len) / truerange)
minus = fixnan(100 * rma(minusDM,len) / truerange)
[plus,minus]
adx(dilen,adxlen) =>
[plus,minus] = dirmov(dilen)
sum = plus + minus
adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum),adxlen)
sig = adx(dilen,adxlen)
plot(sig,color=color.red,title="ADX")
///// RSI Code /////
rsi = rsi(close,14)
//rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))
rsi_ob = rsi >= 70
rsi_os = rsi <= 30
///// MovAvg Code /////
sma5 = sma(close,5)
sma200 = sma(close,200)
////////// Strategy Entries and Exits //////////
t = time(timeframe.period,"0830-1500")
session_open = na(t) ? false : true
plus_ob = plus[1] >= 60 and plus[1] > plus
plus_os = plus <= 15
minus_ob = minus[1] <= 10 and minus[1] < minus
minus_os = minus >= 55
isShortEntry = rsi_ob and plus_ob and minus_ob and close < open
isShortExit = plus_os
if (session_open)
strategy.entry("Short",strategy.short,100.0,when = isShortEntry)
strategy.close("Short",when = isShortExit)
else
strategy.close_all()
bgcolor(session_open ? color.green : na)
plotshape(isLongEntry,style=shape.arrowup,color=color.green,location=location.bottom)
plotshape(isShortEntry,style=shape.arrowdown,location=location.top)
Add to Chart operation Failed,reason: line 46: Undeclared identifier 'plus';
line 47: Undeclared identifier 'plus';
line 48: Undeclared identifier 'minus';
line 49: Undeclared identifier 'minus';
line 51: Undeclared identifier 'plus_ob';
line 51: Undeclared identifier 'minus_ob';
line 52: Undeclared identifier 'plus_os';
line 55: Undeclared identifier 'isShortEntry';
line 57: Undeclared identifier 'isShortExit';
line 63: Undeclared identifier 'isLongEntry';
line 64: Undeclared identifier 'isShortEntry'
感谢您的帮助,谢谢!
解决方法
您无法在全局范围内访问局部函数。
参见Scopes in the script
此代码进行编译,并在全局范围内获取plus
和minus
变量。
//@version=4
strategy("RSI-14,DI+,DI- Reversal Strategy",overlay=false)
/// DI+ DI- Code /// /// DI+ is the variable called "plus" and DI- is the variable called "minus"
adxlen = input(14,title="ADX Smoothing")
dilen = input(14,title="DI Length")
dirmov(len) =>
up = change(high)
down = -change(low)
plusDM = na(up) ? na : (up > down and up > 0 ? up : 0)
minusDM = na(down) ? na : (down > up and down > 0 ? down : 0)
truerange = rma(tr,len)
plus = fixnan(100 * rma(plusDM,len) / truerange)
minus = fixnan(100 * rma(minusDM,len) / truerange)
[plus,minus]
adx(dilen,adxlen) =>
[plus,minus] = dirmov(dilen)
sum = plus + minus
adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum),adxlen)
sig = adx(dilen,adxlen)
plot(sig,color=color.red,title="ADX")
///// RSI Code /////
rsi = rsi(close,14)
//rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))
rsi_ob = rsi >= 70
rsi_os = rsi <= 30
///// MovAvg Code /////
sma5 = sma(close,5)
sma200 = sma(close,200)
////////// Strategy Entries and Exits //////////
t = time(timeframe.period,"0830-1500")
session_open = na(t) ? false : true
// STACKOVERFLOW ADDED CODE - START
var float plus = na
var float minus = na
[myPlus,myMinus] = dirmov(dilen)
plus := myPlus
minus := myMinus
// STACKOVERFLOW ADDED CODE - END
plus_ob = plus[1] >= 60 and plus[1] > plus
plus_os = plus <= 15
minus_ob = minus[1] <= 10 and minus[1] < minus
minus_os = minus >= 55
isShortEntry = rsi_ob and plus_ob and minus_ob and close < open
isShortExit = plus_os
if (session_open)
strategy.entry("Short",strategy.short,100.0,when = isShortEntry)
strategy.close("Short",when = isShortExit)
else
strategy.close_all()
bgcolor(session_open ? color.green : na)
// plotshape(isLongEntry,style=shape.arrowup,color=color.green,location=location.bottom) // STACKOVERFLOW: You haven't declared this variable yet,so I commented it out.
plotshape(isShortEntry,style=shape.arrowdown,location=location.top)