在较小的时间范围内时如何在较大的时间范围内计算指标的值

时间:2018-12-31 12:29:30

标签: pine-script

如果我必须访问当前当天的前一天的每日收盘价,那么只需将安全功能与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")

1 个答案:

答案 0 :(得分:0)

首先。在大多数情况下,尤其是在回测策略中,应为lookahead参数使用默认值。否则,您的bactesting将给您错误的结果。

第二,您对“安全”功能的使用,例如

sig = security(tickerid, hd_period, adx(dilen, adxlen)) 

是正确的。在这种情况下,“ adx(dilen,adxlen)”功能将在不同的时间范围内执行(根据“ hd_period”的值)。

关于“安全性”的唯一一件事是,它不适合请求比当前图表时间范围低的时间范围的数据。

谢谢!