【问题标题】:How to compute the value of an indicator on a larger timeframe when on a smaller timeframe如何在较小的时间范围内计算较大时间范围内的指标值
【发布时间】:2019-05-27 23:47:37
【问题描述】:

如果我必须在当前盘中访问前一天的每日收盘值,那么我只需使用以下https://getsatisfaction.com/tradingview/topics/using-pine-script-to-retrieve-previous-days-close-from-within-intraday-chart中描述的close[1]的安全功能。

但是,我不清楚在指标计算中是否使用相同的概念。 在https://www.tradingview.com/wiki/Context_Switching,The%E2%80%98security%E2%80%99_Function 的前瞻参数的讨论中提到了这一点,但我对自己的理解并不完全有信心..

请大家看看这段代码sn-p

在此示例中,ADX 指标是根据每日值计算的,然后在 30 分钟的时间范围内和第二天访问。如果 ADX 超过 25 并且看涨,我们进入多头头寸。如果 ADX 小于 25 或看跌,我们平仓。

作为一个具体示例,其意图如下:在周二早上交易的前 30 分钟结束时,我们将查看在周一晚上收盘价构建的 ADX。

为了实现这一点,我简单地将函数中对 high 和 low 的引用替换为 high[1] 和 low[1] 来计算 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")

【问题讨论】:

    标签: pine-script


    【解决方案1】:

    首先。在大多数情况下,尤其是在回测策略中,您应该使用前瞻参数的默认值。否则你的细菌测试会给你错误的结果。

    其次,您对“安全”功能的使用,例如

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

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

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

    谢谢!

    【讨论】:

      猜你喜欢
      • 2023-03-03
      • 2022-11-13
      • 2023-02-22
      • 1970-01-01
      • 2018-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多