0

有人可以帮助我;我对 pinescript 的经验很少,我试图在单个时间窗口中同时获取不同时间范围 1H、2H 和 4H 的 DI + DI- 和 ADX 值。我发现了一个类似的脚本,但它只显示了 4H 窗口中单个时间性的 ADX 值并删除了 4H ADX(例如,4 小时窗口中的 1 小时 ADX,但没有剩余 4H 数据)

`study("Average Directional Index", shorttitle="ADX LP", format=format.price, precision=2, 
resolution="")
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")

> Blockquote`
4

1 回答 1

0

已经有一个内置函数可以返回所有这三个变量,称为ta.dmi(). 因此,您无需自己进行计算。

要从不同的时间范围请求数据,您需要使用该request.security()函数。

因此,您需要先获取 DI+、DI- 和 ADX 值,然后使用该函数询问它们在不同时间范围内的值security()

//@version=5
indicator("ADX Multi Timeframe")
len = input.int(14, minval=1, title="DI Length")
lensig = input.int(14, title="ADX Smoothing", minval=1, maxval=50)

[diplus, diminus, adx] = ta.dmi(len, lensig)
[diplus_1h, diminus_1h, adx_1h] = request.security(syminfo.tickerid, "60", [diplus[1], diminus[1], adx[1]], lookahead = barmerge.lookahead_on)
[diplus_2h, diminus_2h, adx_2h] = request.security(syminfo.tickerid, "120", [diplus[1], diminus[1], adx[1]], lookahead = barmerge.lookahead_on)
[diplus_4h, diminus_4h, adx_4h] = request.security(syminfo.tickerid, "240", [diplus[1], diminus[1], adx[1]], lookahead = barmerge.lookahead_on)

plot(adx_1h, color=color.green)
plot(adx_2h, color=color.orange)
plot(adx_4h, color=color.red)

在此处输入图像描述

于 2021-11-23T07:22:57.810 回答