首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >仅绘制最后2个连接的摆动高/低(重绘指示器)

仅绘制最后2个连接的摆动高/低(重绘指示器)
EN

Stack Overflow用户
提问于 2019-09-11 03:32:43
回答 1查看 1.3K关注 0票数 0

我编写了一个指示器,每当移动平均线交叉发生时,它会绘制最高的高位(和最低的低位)。

下面的代码运行得很好,但它有一个问题,那就是它保留了之前在交叉后被打破的高点。

我希望这些线只从一个最低点和一个最高点连接,因为十字架就像一个之字形指示器。

下面的图片更好地解释了这一点,绿线是指示器绘制的内容。黑线是它应该绘制的内容。

https://imgur.com/gcblrOA

有什么办法可以解决这个问题吗?谢谢

代码语言:javascript
运行
复制
//@version=4
study(title="MA Cross", overlay=true, max_bars_back=3000)

MA1 = sma(close, 20)
MA2 = sma(close, 100)

Highest(src, len) =>
    max = high
    for i = 1 to len
        if src[i] > max
            max := src[i]
    max

Lowest(src, len) =>
    min = src[0]
    for i = 1 to len
        if src[i] < min
            min := src[i]
    min


trend = 0
trend := na(trend[1]) ? 1 : trend[1]

LL = 0.0
HH = 0.0

HH := Highest(high, barssince(cross(MA1, MA2)))
LL := Lowest(low, barssince(cross(MA1, MA2)))

HighLow = 0.0

recent = 0

HL = 0.0

if(MA1 > MA2)

    recent := 1

    for i = 1 to 200
        if(MA1[i] < MA2[i])
            break

        if(high < high[i])
            recent := -1
            break

    HL := na
    if(recent < 0)
        HighLow := na

    else        
        HighLow := high
        HL := high


else
    recent := 1
    HL := na
    for i = 1 to 200
        if(MA1[i] > MA2[i])
            break

        if(low > low[i])
            recent := -1
            break

    if(recent < 0)
        HighLow := na

    else        
        HighLow := low
        HL := low


plot(series= HighLow, color = color.green, linewidth=3)
plot(series=MA1, color = color.aqua, linewidth=1)
plot(series=MA2, color = color.orange, linewidth=1)
EN

回答 1

Stack Overflow用户

发布于 2019-09-12 07:56:39

正如您所说,这不会在所有数据集上绘制线条,因为它使用了line.new()。不过,如果它能派上用场:

代码语言:javascript
运行
复制
//@version=4
study(title="MA Cross", overlay=true, max_bars_back=3000)

MA1 = sma(close, 20)
MA2 = sma(close, 100)

// Highest/lowest hi/lo during up/dn trend.
var hi = 0.
var lo = 10e20
// Bar index of highest/lowest hi/lo.
var hiBar = 0
var loBar = 0
// Crosses.
crossUp = crossover(MA1, MA2)
crossDn = crossunder(MA1, MA2)
upTrend = MA1 > MA2

// Draw line in past when a cross occurs.
if crossUp or crossDn
    line.new(bar_index[bar_index - hiBar], high[bar_index - hiBar], bar_index[bar_index - loBar], low[bar_index - loBar], xloc.bar_index, extend.none, color.black)

// Reset hi/lo and bar index on crosses.
if crossUp
    hi := high
    hiBar := bar_index
else
    if crossDn
        lo := low
        loBar := bar_index

// Update higher/lower hi/lo during trend.
if upTrend and high > hi
    hi := high
    hiBar := bar_index
else
    if not upTrend and low < lo
        lo := low
        loBar := bar_index

plot(series=MA1, color = color.aqua, linewidth=1)
plot(series=MA2, color = color.orange, linewidth=1)

// Debugging.        
// plot(hi, "High", color.green, 1, plot.style_circles)
// plot(lo, "Low", color.red, 1, plot.style_circles)
// plotchar(bar_index, "bar_index", "", location.top)
// plotchar(hiBar, "hiBar", "", location.top, color = color.green)
// plotchar(loBar, "loBar", "", location.top, color = color.red)
// bgcolor(upTrend ? color.green : color.red)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57877178

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档