查找绘图线的第一个值
Find the first value of a plot line
我有剧情:
//@version=4
study(title="Line", shorttitle="Line", overlay=true)
theline(src, len) => wma(2 * wma(src, len / 2) - wma(src, len), round(sqrt(len)))
Line = theline(close, 9)
plot(Line, title='Line', color=#0066ff, linewidth=3)
该线将根据收盘价向上或向下移动。
当新柱出现时,当第一个收盘==开盘时,我如何找到该线的第一个值。
我需要那个值来比较,看看当前行是高于还是低于第一个值。
谢谢你帮助我。
您可以使用varip
来冻结和保持实时值并有条件地更新它们。我为您编写了一个自定义函数,它将冻结 wma 行的实时打开值。请注意,这仅适用于实时或警报。如果您正在实时观看开盘,它只会冻结开盘,并且警报将在添加到图表后的第一个开盘时开始工作。
//@version=4
study(title="Line", shorttitle="Line", overlay=true)
theline(src, len) => wma(2 * wma(src, len / 2) - wma(src, len), round(sqrt(len)))
openVal(src) =>
varip float lineOpen = na
if barstate.isnew
lineOpen := src
result = barstate.islastconfirmedhistory[1] or barstate.isconfirmed ? src : lineOpen
Line = theline(close, 5)
Line2 = openVal(Line)
plot(Line, title='Line', color=#0066ff, linewidth=4)
plot(Line2, title='Alt Line', color=color.white)
干杯,祝你好运
答案与你上一个问题的原理相同,你必须重构wma方程才能正常获得前n-1个值的总和并替换使用计算的第n个值(当前柱的值)打开而不是关闭。
//@version=5
indicator("hull open", overlay = true)
len = input.int(9)
f_wma_open(_close, _open, _len) =>
float _wtd_sum = 0.0
int _denom = 0
for i = 1 to _len - 1
_wt = _len - i
_wtd_sum += _close[i] * _wt
_denom += _wt
_wtd_sum += _open * _len
_denom += _len
_wma_open = _wtd_sum / _denom
_wma_open
f_hull_open(_close, _open, _len) =>
_a = 2 * ta.wma(_close, _len / 2) - ta.wma(_close, _len)
_b = 2 * f_wma_open(_close, _open, _len / 2) - f_wma_open(_close, _open, _len)
_slen = math.round(math.sqrt(_len))
float _wtd_sum = 0.0
float _denom = 0.0
for i = 1 to _slen - 1
_wt = _slen - i
_wtd_sum += _a[i] * _wt
_denom += _wt
_wtd_sum += _b * _slen
_denom += _slen
_hull_open = _wtd_sum / _denom
_hull_open
f_hull(_src, _len) =>
ta.wma(2 * ta.wma(_src, _len / 2) - ta.wma(_src, _len), math.round(math.sqrt(_len)))
hull = f_hull(close, len)
hull_open = f_hull_open(close, open, len)
plot(hull, color = color.gray)
plot(hull_open, color = color.yellow)
我有剧情:
//@version=4
study(title="Line", shorttitle="Line", overlay=true)
theline(src, len) => wma(2 * wma(src, len / 2) - wma(src, len), round(sqrt(len)))
Line = theline(close, 9)
plot(Line, title='Line', color=#0066ff, linewidth=3)
该线将根据收盘价向上或向下移动。
当新柱出现时,当第一个收盘==开盘时,我如何找到该线的第一个值。
我需要那个值来比较,看看当前行是高于还是低于第一个值。
谢谢你帮助我。
您可以使用varip
来冻结和保持实时值并有条件地更新它们。我为您编写了一个自定义函数,它将冻结 wma 行的实时打开值。请注意,这仅适用于实时或警报。如果您正在实时观看开盘,它只会冻结开盘,并且警报将在添加到图表后的第一个开盘时开始工作。
//@version=4
study(title="Line", shorttitle="Line", overlay=true)
theline(src, len) => wma(2 * wma(src, len / 2) - wma(src, len), round(sqrt(len)))
openVal(src) =>
varip float lineOpen = na
if barstate.isnew
lineOpen := src
result = barstate.islastconfirmedhistory[1] or barstate.isconfirmed ? src : lineOpen
Line = theline(close, 5)
Line2 = openVal(Line)
plot(Line, title='Line', color=#0066ff, linewidth=4)
plot(Line2, title='Alt Line', color=color.white)
干杯,祝你好运
答案与你上一个问题的原理相同,你必须重构wma方程才能正常获得前n-1个值的总和并替换使用计算的第n个值(当前柱的值)打开而不是关闭。
//@version=5
indicator("hull open", overlay = true)
len = input.int(9)
f_wma_open(_close, _open, _len) =>
float _wtd_sum = 0.0
int _denom = 0
for i = 1 to _len - 1
_wt = _len - i
_wtd_sum += _close[i] * _wt
_denom += _wt
_wtd_sum += _open * _len
_denom += _len
_wma_open = _wtd_sum / _denom
_wma_open
f_hull_open(_close, _open, _len) =>
_a = 2 * ta.wma(_close, _len / 2) - ta.wma(_close, _len)
_b = 2 * f_wma_open(_close, _open, _len / 2) - f_wma_open(_close, _open, _len)
_slen = math.round(math.sqrt(_len))
float _wtd_sum = 0.0
float _denom = 0.0
for i = 1 to _slen - 1
_wt = _slen - i
_wtd_sum += _a[i] * _wt
_denom += _wt
_wtd_sum += _b * _slen
_denom += _slen
_hull_open = _wtd_sum / _denom
_hull_open
f_hull(_src, _len) =>
ta.wma(2 * ta.wma(_src, _len / 2) - ta.wma(_src, _len), math.round(math.sqrt(_len)))
hull = f_hull(close, len)
hull_open = f_hull_open(close, open, len)
plot(hull, color = color.gray)
plot(hull_open, color = color.yellow)