本页源码来自 TradingView 公开发布的开源脚本,版权归原作者所有, 请遵循其原始许可(Pine 脚本常见 CC BY-NC-SA / MPL-2.0 / MIT)。 本项目仅用于研究检索与许可范围内的移植。
// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © AlgoAlpha
//@version=5
indicator(title="Momentum Bias Index [AlgoAlpha]", timeframe="", timeframe_gaps=false)
source = input(close, title="Source")
momentumLength = input.int(10, minval=1, title="Momentum Length")
biasLength = input.int(5, minval=1, title="Bias Length")
smoothLength = input.int(10, minval=1, title="Smooth Length")
impulseBoundaryLength = input.int(30, minval=1, title="Impulse Boundary Length")
stdDevMultiplier = input.float(3.0, minval=1, title="Standard Deviation Multiplier")
smoothIndicator = input.bool(true, "Smooth Indicator")
overlayMode = input.bool(false, "Overlay Mode")
colorUp = input.color(#00ffbb, "Up Color")
colorSecondaryUp = input.color(#008461, "Secondary Up Color")
colorDown = input.color(#ff1100, "Down Color")
colorSecondaryDown = input.color(#840900, "Secondary Down Color")
momentum = source - source[momentumLength]
stdDev = momentum / (ta.ema(high - low, momentumLength)) * 100
momentumUp = math.max(stdDev, 0)
momentumDown = math.min(stdDev, 0)
momentumUpBias = smoothIndicator ? math.max(ta.hma(math.sum(momentumUp, biasLength), smoothLength), 0) : math.sum(momentumUp, biasLength)
momentumDownBias = smoothIndicator ? math.max(ta.hma(-math.sum(momentumDown, biasLength), smoothLength), 0) : -math.sum(momentumDown, biasLength)
averageBias = math.avg(momentumDownBias, momentumUpBias)
chg1 = momentumUpBias*0.80
chg2 = momentumUpBias*0.60
chg3 = momentumUpBias*0.40
chg4 = momentumUpBias*0.20
chg1a = momentumDownBias*0.80
chg2a = momentumDownBias*0.60
chg3a = momentumDownBias*0.40
chg4a = momentumDownBias*0.20
boundary = ta.ema(averageBias, impulseBoundaryLength) + ta.stdev(averageBias, impulseBoundaryLength) * stdDevMultiplier
bullishSignal = ta.crossunder(momentumDownBias, momentumDownBias[1]) and momentumDownBias > boundary and momentumDownBias > momentumUpBias
bearishSignal = ta.crossunder(momentumUpBias, momentumUpBias[1]) and momentumUpBias > boundary and momentumUpBias > momentumDownBias
candleColor = overlayMode ? (momentumUpBias > momentumDownBias ? colorUp : momentumUpBias < momentumDownBias ? colorDown : color.gray) : na
transp = 20
plot(momentumUpBias > momentumUpBias[1] ? momentumUpBias : na, color = momentumUpBias > momentumUpBias[1] ? colorUp : colorSecondaryUp, style = plot.style_columns, display = not overlayMode ? display.all : display.none)
plot(momentumDownBias > momentumDownBias[1] ? momentumDownBias : na, color = momentumDownBias > momentumDownBias[1] ? colorDown : colorSecondaryDown, style = plot.style_columns, display = not overlayMode ? display.all : display.none)
plot(momentumUpBias < momentumUpBias[1] ? momentumUpBias : na, color = color.new(colorSecondaryUp, transp+60), style = plot.style_columns, linewidth = 4, display = not overlayMode ? display.all : display.none)
plot(momentumUpBias < momentumUpBias[1] ? chg1 : na, color = color.new(colorSecondaryUp, transp+55), style = plot.style_columns, linewidth = 4, display = not overlayMode ? display.all : display.none)
plot(momentumUpBias < momentumUpBias[1] ? chg2 : na, color = color.new(colorSecondaryUp, transp+45), style = plot.style_columns, linewidth = 4, display = not overlayMode ? display.all : display.none)
plot(momentumUpBias < momentumUpBias[1] ? chg3 : na, color = color.new(colorSecondaryUp, transp+30), style = plot.style_columns, linewidth = 4, display = not overlayMode ? display.all : display.none)
plot(momentumUpBias < momentumUpBias[1] ? chg4 : na, color = color.new(colorSecondaryUp, transp+25), style = plot.style_columns, linewidth = 4, display = not overlayMode ? display.all : display.none)
plot(momentumUpBias < momentumUpBias[1] ? momentumUpBias : na, color = color.new(colorUp, transp), style = plot.style_linebr, display = not overlayMode ? display.all : display.none)
plot(momentumDownBias < momentumDownBias[1] ? momentumDownBias : na, color = color.new(colorSecondaryDown, transp+60), style = plot.style_columns, linewidth = 4, display = not overlayMode ? display.all : display.none)
plot(momentumDownBias < momentumDownBias[1] ? chg1a : na, color = color.new(colorSecondaryDown, transp+55), style = plot.style_columns, linewidth = 4, display = not overlayMode ? display.all : display.none)
plot(momentumDownBias < momentumDownBias[1] ? chg2a : na, color = color.new(colorSecondaryDown, transp+45), style = plot.style_columns, linewidth = 4, display = not overlayMode ? display.all : display.none)
plot(momentumDownBias < momentumDownBias[1] ? chg3a : na, color = color.new(colorSecondaryDown, transp+30), style = plot.style_columns, linewidth = 4, display = not overlayMode ? display.all : display.none)
plot(momentumDownBias < momentumDownBias[1] ? chg4a : na, color = color.new(colorSecondaryDown, transp+25), style = plot.style_columns, linewidth = 4, display = not overlayMode ? display.all : display.none)
plot(momentumDownBias < momentumDownBias[1] ? momentumDownBias : na, color = color.new(colorDown, transp), style = plot.style_linebr, display = not overlayMode ? display.all : display.none)
plot(boundary, style = plot.style_circles, color = color.gray, display = not overlayMode ? display.all : display.none)
plotshape(bullishSignal ? momentumDownBias * 1.2 : na, title = "Bullish TP Signal", color = color.new(colorUp, 30), textcolor = color.rgb(255, 255, 255), text = "TP", style = shape.labelup, location = location.belowbar, size = size.tiny, display = overlayMode ? display.all : display.none)
plotshape(bearishSignal ? momentumUpBias * 1.2 : na, title = "Bearish TP Signal", color = color.new(colorDown, 30), textcolor = color.rgb(255, 255, 255), text = "TP", style = shape.labeldown, location = location.abovebar, size = size.tiny, display = overlayMode ? display.all : display.none)
plotchar(bullishSignal ? momentumDownBias * 1.2 : na, "Bullish TP Signal", "X", location.absolute, color = color.new(colorUp, 30), size = size.tiny, display = not overlayMode ? display.all : display.none)
plotchar(bearishSignal ? momentumUpBias * 1.2 : na, "Bearish TP Signal", "X", location.absolute, color = color.new(colorDown, 30), size = size.tiny, display = not overlayMode ? display.all : display.none)
plotcandle(open, high, low, close, "Candle Color", candleColor, candleColor, bordercolor = candleColor, display = overlayMode ? display.all : display.none)