커뮤니티

수식 수정 요청 드려 봅니다.

프로필 이미지
졸던
2025-10-20 23:06:50
72
글번호 227076
답변완료









//@version=6
indicator("VWAP Rope", overlay = true)

/// Inputs


var params = "Parameters"
src = nz(input.source(close, title = "Source", group = params))
multi = input.float(1.5, title = "VWAP Band Multiplier", step = 0.25, minval = 0, group = params)
len = input.int(20, title = "StdDev Length", minval = 1, group = params)  //

var disp = "Display"
rng_tog = input.bool(true, title = "Consolidation Ranges", group = disp)

var cols = "Colors"
up_col = input.color(color.yellow, title = "Up Color", group = cols)
down_col = input.color(color.fuchsia, title = "Down Color", group = cols)
flat_col = input.color(#004d92, title = "Flat Color", inline = "3", group = cols)
rng_col = input.color(#004d9233, title = "", inline = "3", group = cols)

/// VWAP 기반 threshold
vwap = ta.vwap
threshold = ta.stdev(close - vwap, len) * multi  // 

/// Rope smoother
rope_smoother(float _src, float _threshold) =>
    var float _rope = _src
    _move = _src - _rope
    _rope += math.max(math.abs(_move) - nz(_threshold), 0) * math.sign(_move)
    [_rope, _rope + _threshold, _rope - _threshold]

// Rope 계산
[rope, upper, lower] = rope_smoother(src, threshold)

/// 방향성 감지
var dir = 0
dir := rope > rope[1] ? 1 : rope < rope[1] ? -1 : dir
if ta.cross(src, rope)
    dir := 0

col = dir > 0 ? up_col : dir < 0 ? down_col : flat_col

/// Consolidation Range
var float c_hi = na
var float c_lo = na
var float h_sum = 0
var float l_sum = 0
var int c_count = 0
var ff = 1

if dir == 0
    if dir[1] != 0
        h_sum := 0
        l_sum := 0
        c_count := 0
        ff := ff * -1
    h_sum += upper
    l_sum += lower
    c_count += 1
    c_hi := h_sum / c_count
    c_lo := l_sum / c_count

/// 시각화
plot(rope, linewidth = 3, color = col, title = "VWAP Rope")
plot(upper, color = col, title = "Upper Band", linewidth = 1)
plot(lower, color = col, title = "Lower Band", linewidth = 1)

h1 = plot(ff > 0 ? na : c_hi, style = plot.style_linebr, color = color.new(rng_col, 0), display = rng_tog ? display.all : display.none)
l1 = plot(ff > 0 ? na : c_lo, style = plot.style_linebr, color = color.new(rng_col, 0), display = rng_tog ? display.all : display.none)
h2 = plot(ff < 0 ? na : c_hi, style = plot.style_linebr, color = color.new(rng_col, 0), display = rng_tog ? display.all : display.none)
l2 = plot(ff < 0 ? na : c_lo, style = plot.style_linebr, color = color.new(rng_col, 0), display = rng_tog ? display.all : display.none)

fill(h1, l1, rng_col, title = "Range Fill 1", display = rng_tog ? display.all : display.none)
fill(h2, l2, rng_col, title = "Range Fill 2", display = rng_tog ? display.all : display.none)

VwapRopevwapsign
지표
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2025-10-21 10:44:37

안녕하세요 예스스탁입니다. input : multi(1.5); input : len(20); input : up_col(yellow); input : down_col(Magenta); input : flat_col(Green); input : rng_col(Black); var : src(0); var : value(0),sum1(0),sum2(0),vwap(0),threshold(0); var : move(0),rope(C),upper(0),lower(0); src = close; if Bdate != Bdate[1] Then { sum1 = 0; sum2 = 0; } value = (h+l+c)/3; sum1 = sum1 + (value*v); sum2 = sum2 + v; vwap = sum1/sum2; threshold = std(close - vwap, len) * multi; move = src - rope; rope = rope + max(abs(move) - IFf(IsNan(threshold)==true, 0,threshold),0) * IFf(move>0,1,IFf(move<0,-1,0)); upper = rope + threshold; lower = rope - threshold; var : dir(0),col(0); dir = iff(rope > rope[1] , 1 , iff(rope < rope[1] , -1 , dir)); if CrossUp(src, rope) or CrossDown(src,rope) Then dir = 0; col = iff(dir > 0 , up_col , IFf( dir < 0 , down_col , flat_col)); var : c_hi(Nan); var : c_lo(nan); var : h_sum(0); var : l_sum(0); var : c_count(0); var : ff(1); if dir == 0 Then { if dir[1] != 0 Then { h_sum = 0; l_sum = 0; c_count = 0; ff = ff * -1; } h_sum = h_sum + upper; l_sum = l_sum + lower; c_count = c_count+ 1; c_hi = h_sum / c_count; c_lo = l_sum / c_count; } /// 시각화 plot1(rope,"VWAP Rope",col); plot2(upper,"Upper Band", col); plot3(lower,"Lower Band", col); if ff > 0 Then { NoPlot(4); NoPlot(5); plot6(c_hi,"FF>0 rng",rng_col); plot7(c_lo,"FF>0 rng",rng_col); } Else { plot4(c_hi,"FF<0 rng",rng_col); plot5(c_lo,"FF<0 rng",rng_col); NoPlot(6); NoPlot(7); } 즐거운 하루되세요