Momentum Shift [Bigbeluga]

BigBeluga · study · 137 行 · 点赞 8,070 · TradingView 原页

本页源码来自 TradingView 公开发布的开源脚本,版权归原作者所有, 请遵循其原始许可(Pine 脚本常见 CC BY-NC-SA / MPL-2.0 / MIT)。 本项目仅用于研究检索与许可范围内的移植。

Pine Script

// This work is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International  
// https://creativecommons.org/licenses/by-nc-sa/4.0/
// © BigBeluga
 
//@version=6
indicator("Momentum Shift [Bigbeluga]", max_labels_count = 500, max_lines_count = 500)
 
var lines_up = array.new<line>()
var lines_dn = array.new<line>()
var labels   = array.new<label>()
 
// INPUTS ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――{
 
length = input.int(50, "Length", group = "Momentum", inline = "mom")
smooth = input.int(50, "Smooth", group = "Momentum", inline = "mom")
mult_dist = input.float(1, step = 0.1, title = "Shift Zone Size")
 
col_u = input.color(#3ad79b, "", inline = "ccc")
col_d = input.color(#fb6b2e, "", inline = "ccc")
 
// }
 
 
// CALCULATIONS――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――{
// Smoothed Momentum
mom = ta.hma(close - close[length], smooth)
high_ = ta.highest(mom, 150)
low_ = ta.lowest(mom, 150)
// MoM color
color colorM = color.from_gradient(mom, low_, high_, col_d, col_u)
 
// Signals
bool rising  = ta.crossover(mom, mom[2])
bool falling = ta.crossunder(mom, mom[2])
 
float dist = ta.sma(high-low, 100) * mult_dist
 
// Draw Label
draw_lbl(x, y, txt, col)=>
    var lbl = label(na)
 
    lbl := label.new(x, y, txt, color = color(na), style = label.style_label_right, textcolor = col, force_overlay = true)
 
    label.delete(lbl[1])
    labels.push(lbl)
 
 
// RISING ZONES
if rising
    label.new(bar_index, low, "▲", color = color(na), textcolor = color.new(col_u, 50), style = label.style_label_up, force_overlay = true)
 
 
    if mom < 0 
        label.new(bar_index, mom, "▲", color = color(na), textcolor = col_u, style = label.style_label_up, force_overlay = false)
        label.new(bar_index, low, "△", color = color(na), textcolor = col_u, style = label.style_label_up, force_overlay = true)
    
    if lines_dn.size() > 0
        for i = 0 to lines_dn.size() - 1
 
            line_id = lines_dn.get(i)
 
            line.delete(line_id)
 
    lines_dn.clear()
 
    for i = 0 to 5
        lines_up.push(line.new(bar_index+i*3, high + dist*i, bar_index + 15+i*3, high + dist*i, force_overlay = true, color = color.new(col_u, 60-10*i)))
 
        if i > 0
            draw_lbl(bar_index+i*3, high + dist*i, str.tostring(i), color.new(col_u, 60-10*i))
 
// FALLING ZONES
if falling
    label.new(bar_index, high, "▼", color = color(na), textcolor = color.new(col_d, 50), style = label.style_label_down, force_overlay = true)
 
    if mom > 0
        label.new(bar_index, mom, "▼", color = color(na), textcolor = col_d, style = label.style_label_down, force_overlay = false)
        label.new(bar_index, high, "▽", color = color(na), textcolor = col_d, style = label.style_label_down, force_overlay = true)
 
    if lines_up.size() > 0
        for i = 0 to lines_up.size() - 1
 
            line_id = lines_up.get(i)
 
            line.delete(line_id)
 
    lines_up.clear()
 
    for i = 0 to 5
        lines_dn.push(line.new(bar_index+ i * 3, low - dist * i, bar_index + 15 + i *3, low - dist*i, force_overlay = true, color = color.new(col_d, 60-10*i)))
        if i > 0
            draw_lbl(bar_index+i*3, low - dist*i, str.tostring(i), color.new(col_d, 60-10*i))
 
// Manage Lines and Labels
if lines_up.size() > 0
    for i = 0 to lines_up.size() - 1
 
        line_id = lines_up.get(i)
        line_id1 = lines_up.get(i < lines_up.size() - 1 ? i + 1 : i)
 
        line.set_x2(line_id, bar_index + +5 + i * 3)
 
        linefill.new(line_id, line_id1, color.new(col_u, 90 - i*5))
 
 
        if high >= line_id.get_y2()
            line.set_x2(line_id, bar_index)
            lines_up.set(i, line(na))
 
if lines_dn.size() > 0
    for i = 0 to lines_dn.size() - 1
 
        line_id = lines_dn.get(i)
        line_id1 = lines_dn.get(i < lines_dn.size() - 1 ? i + 1 : i)
 
        line.set_x2(line_id, bar_index + +5 + i * 3)
 
        linefill.new(line_id, line_id1, color.new(col_d, 90 - i*5))
 
        if low <= line_id.get_y2()
            line.set_x2(line_id, bar_index)
            lines_dn.set(i, line(na))
 
// Remove consecutive labels if the number exceeds 5
if labels.size() > 5
    label.delete(labels.shift())
// }
 
// PLOT ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――{
 
hline(0)
pm = plot(mom, color = chart.fg_color)
p0 = plot(0, display = display.none)
 
fill(pm, p0, high_, low_, mom > 0 ? colorM : na, na)
fill(pm, p0, high_, low_, na, mom < 0 ? colorM : na)
// }

← 返回列表