如果我必须访问当前当天的前一天的每日收盘价,那么只需将安全功能与close [1]结合使用,如以下https://getsatisfaction.com/tradingview/topics/using-pine-script-to-retrieve-previous-days-close-from-within-intraday-chart中所述。
但是,我不清楚在指标计算中是否使用相同的概念。 在https://www.tradingview.com/wiki/Context_Switching,The%E2%80%98security%E2%80%99_Function的前瞻参数讨论中提到了这一点,但是我对自己的理解并不完全自信。
人们可以看看这个代码片段
在此示例中,ADX指标是根据每日值计算的,然后在30分钟的时间范围和第二天进行访问。如果ADX大于25并且看涨,则我们进入多头头寸。如果ADX小于25或看跌,我们将平仓。
作为一个具体的例子,目的是:在交易的前30分钟结束时的周二上午,我们将查看在周一晚上收盘价结束时构建的ADX。
要实现此目的,我仅用high [1]和low [1]替换了函数中对high和low的引用来计算ADX。
请告知该代码是否是实现此目标的推荐方法,或者是否存在任何可能的错误。
谢谢
//@version=3
strategy("ADX daily long", overlay=true,initial_capital=100000, currency='USD', commission_type='strategy.commission,cash_per_order',commission_value=1, default_qty_type=strategy.cash,default_qty_value=100000)
length = input(title="Length", type=integer, defval=14)
src = input(title="Source", type=source, defval=close)
// Begin ADX
adxlen = input(14, title="ADX Smoothing")
dilen = input(14, title="DI Length")
adx_threshold = input(title="ADX threshold", type=integer, defval=25)
hd_period = '1D'
dirmovdirection(len) =>
up = change(high[1])
down = -change(low[1])
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[1], len)
plus = fixnan(100 * rma(plusDM, len) / truerange)
minus = fixnan(100 * rma(minusDM, len) / truerange)
direction = (plus>minus)?1:0
dirmov(len) =>
up = change(high[1])
down = -change(low[1])
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 = security(tickerid, hd_period, adx(dilen, adxlen))
direction = security(tickerid, hd_period, dirmovdirection(dilen))
// plot(sig, color=red, title="ADX")
// End ADX
if sig > 25 and direction == 1
strategy.entry("ADX daily long", strategy.long)
if (sig< 25 or direction == 0)
strategy.close("ADX daily long")
答案 0 :(得分:0)
首先。在大多数情况下,尤其是在回测策略中,应为lookahead参数使用默认值。否则,您的bactesting将给您错误的结果。
第二,您对“安全”功能的使用,例如
sig = security(tickerid, hd_period, adx(dilen, adxlen))
是正确的。在这种情况下,“ adx(dilen,adxlen)”功能将在不同的时间范围内执行(根据“ hd_period”的值)。
关于“安全性”的唯一一件事是,它不适合请求比当前图表时间范围低的时间范围的数据。
谢谢!