커뮤니티

지표 변환 부탁드립니다.

프로필 이미지
고도산
2025-05-27 07:30:16
232
글번호 191192
답변완료
번번히 폐를 끼치네요. TradingView 지표 변환 부탁드립니다. /@version=6 indicator("Range Filtered Trend Signals [AlgoAlpha]", overlay=true) groupKalman = "Kalman Filter" kalmanAlpha = input.float(0.01, title="Kalman Alpha") kalmanBeta = input.float(0.1, title="Kalman Beta") kalmanPeriod = input.int(77, title="Kalman Period") dev = input.float(1.2, title="Deviation") groupSupertrend = "Supertrend" supertrendFactor = input.float(0.7, title="Supertrend Factor") supertrendAtrPeriod = input.int(7, title="ATR Period") groupColors = "Colors" green = input.color(#00ffbb, title="Bullish Color") red = input.color(#ff1100, title="Bearish Color") kalman(a, b, alpha, beta) => var float v1 = na var float v2 = 1.0 var float v3 = alpha * b var float v4 = 0.0 var float v5 = na if na(v1) v1 := a[1] v5 := v1 v4 := v2 / (v2 + v3) v1 := v5 + v4 * (a - v5) v2 := (1 - v4) * v2 + beta / b v1 pine_supertrend(k, factor, atrPeriod) => src = k atr = ta.atr(atrPeriod) upperBand = src + factor * atr lowerBand = src - factor * atr prevLowerBand = nz(lowerBand[1]) prevUpperBand = nz(upperBand[1]) lowerBand := lowerBand > prevLowerBand or k[1] < prevLowerBand ? lowerBand : prevLowerBand upperBand := upperBand < prevUpperBand or k[1] > prevUpperBand ? upperBand : prevUpperBand int _direction = na float superTrend = na prevSuperTrend = superTrend[1] if na(atr[1]) _direction := 1 else if prevSuperTrend == prevUpperBand _direction := k > upperBand ? -1 : 1 else _direction := k < lowerBand ? 1 : -1 superTrend := _direction == -1 ? lowerBand : upperBand [superTrend, _direction] k = kalman(close, kalmanPeriod, kalmanAlpha, kalmanBeta) [supertrend, direction] = pine_supertrend(k, supertrendFactor, supertrendAtrPeriod) vola = ta.wma(high-low, 200) upper = k+vola*dev lower = k-vola*dev midbody = math.avg(close, open) var trend = 0 if close > upper trend := 1 else if close < lower trend := -1 ktrend = 0 if direction < 0 ktrend := 1 else if direction > 0 ktrend := -1 t = 70 t_ = 20 p1 = plot(ktrend * trend == 1 ? k : na, color=color.gray, style = plot.style_linebr, linewidth = 3, title = 'k') m = plot(midbody, color=color.gray, display = display.none, title = 'midbody') up = plot(trend == -1 or ktrend * trend == -1 ? upper : na, color=ktrend * trend == -1 ? color.gray : ktrend == -1 ? color.new(red, t) : color.gray, style = plot.style_circles, title = 'upper') lo = plot(trend == 1 or ktrend * trend == -1 ? lower : na, color=ktrend * trend == -1 ? color.gray : ktrend == 1 ? color.new(green, t) : color.gray, style = plot.style_circles, title = 'lower') plotchar(ta.crossover(ktrend * trend, 0) ? k : na, location = location.absolute, color=trend == 1 ? green : red, char="&#9673;", size=size.tiny) x = color.new(chart.bg_color, 80) x_ = color.new(trend == -1 ? green:red, t) //fill(p1, m, k, midbody, x, x_) fill(p1, m, color = x_) //fill(up, lo, ktrend * trend == -1 ? color.new(color.gray, 90) : na, "Range") fill(up, lo, color = x_)
지표
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2025-05-27 11:19:05

안녕하세요 예스스탁입니다. input : kalmanAlpha(0.01); input : kalmanBeta(0.1); input : kalmanPeriod(77); input : dev(1.2); input : supertrendFactor(0.7); input : supertrendAtrPeriod(7); input : cgreen(Green); input : cred(Red); var: v1(nan),v2(1.0),v3(0),v4(0),v5(Nan),k(0); v3 = kalmanAlpha*kalmanPeriod; if IsNan(v1) == true Then v1 = close[1]; v5 = v1; v4 = v2 / (v2 + v3); v1 = v5 + v4 * (close - v5); v2 = (1 - v4) * v2 + kalmanBeta / kalmanPeriod; k = v1; #k = kalman(close, kalmanPeriod, kalmanlApha, kalmanBeta) var : src(0),alpha(0),A(0),upperBand(0),lowerBand(0),prevLowerBand(0),prevUpperBand(0); var : direction(Nan),superTrend(Nan),prevSuperTrend(0); src = k; alpha = 1 / supertrendAtrPeriod ; A = IFf(IsNan(A[1]) == true, ma(TrueRange,supertrendAtrPeriod) , alpha * TrueRange + (1 - alpha) * IFf(isnan(A[1])==true,0,A[1])); upperBand = src + supertrendFactor * A; lowerBand = src - supertrendFactor * A; prevLowerBand = IFF( IsNan(lowerBand[1]) ==true,0,lowerBand[1]); prevUpperBand = IFF( IsNan(upperBand[1]) ==true,0,upperBand[1]); lowerBand = iff(lowerBand > prevLowerBand or k[1] < prevLowerBand , lowerBand , prevLowerBand); upperBand = iff(upperBand < prevUpperBand or k[1] > prevUpperBand , upperBand , prevUpperBand); prevSuperTrend = superTrend[1]; if IsNan(a[1]) == true Then direction = 1; else if prevSuperTrend == prevUpperBand Then direction = iff(k > upperBand , -1 , 1); else direction = iff(k < lowerBand , 1 , -1); superTrend = iff(direction == -1 , lowerBand , upperBand); var : vola(0),upper(0),lower(0),trend(0),ktrend(0); var : midbody(0),tx(0); vola = wma(high-low, 200); upper = k+vola*dev; lower = k-vola*dev; midbody = avg(close, open); if close > upper Then trend = 1; else if close < lower Then trend = -1; if direction < 0 Then ktrend = 1; else if direction > 0 Then ktrend = -1; if ktrend * trend == 1 Then Plot1(k,"k",Gray); Else NoPlot(1); if trend == -1 or ktrend * trend == -1 Then plot2(upper,"upper",iff(ktrend * trend == -1 , gray , IFf(ktrend == -1 , red ,gray))); Else NoPlot(2); if trend == 1 or ktrend * trend == -1 Then plot3(lower,"lower",iff(ktrend * trend == -1 , gray,iff(ktrend == 1 , green , gray))); Else NoPlot(3); if CrossUp(ktrend * trend, 0) Then { tx = Text_New_Self(sdate,sTime,k,"●"); Text_SetStyle(tx,2,2); Text_SetColor(tx,iff(trend == 1 , green , red)); Text_SetSize(tx,12); } 즐거운 하루되세요 > 고도산 님이 쓴 글입니다. > 제목 : 지표 변환 부탁드립니다. > 번번히 폐를 끼치네요. TradingView 지표 변환 부탁드립니다. /@version=6 indicator("Range Filtered Trend Signals [AlgoAlpha]", overlay=true) groupKalman = "Kalman Filter" kalmanAlpha = input.float(0.01, title="Kalman Alpha") kalmanBeta = input.float(0.1, title="Kalman Beta") kalmanPeriod = input.int(77, title="Kalman Period") dev = input.float(1.2, title="Deviation") groupSupertrend = "Supertrend" supertrendFactor = input.float(0.7, title="Supertrend Factor") supertrendAtrPeriod = input.int(7, title="ATR Period") groupColors = "Colors" green = input.color(#00ffbb, title="Bullish Color") red = input.color(#ff1100, title="Bearish Color") kalman(a, b, alpha, beta) => var float v1 = na var float v2 = 1.0 var float v3 = alpha * b var float v4 = 0.0 var float v5 = na if na(v1) v1 := a[1] v5 := v1 v4 := v2 / (v2 + v3) v1 := v5 + v4 * (a - v5) v2 := (1 - v4) * v2 + beta / b v1 pine_supertrend(k, factor, atrPeriod) => src = k atr = ta.atr(atrPeriod) upperBand = src + factor * atr lowerBand = src - factor * atr prevLowerBand = nz(lowerBand[1]) prevUpperBand = nz(upperBand[1]) lowerBand := lowerBand > prevLowerBand or k[1] < prevLowerBand ? lowerBand : prevLowerBand upperBand := upperBand < prevUpperBand or k[1] > prevUpperBand ? upperBand : prevUpperBand int _direction = na float superTrend = na prevSuperTrend = superTrend[1] if na(atr[1]) _direction := 1 else if prevSuperTrend == prevUpperBand _direction := k > upperBand ? -1 : 1 else _direction := k < lowerBand ? 1 : -1 superTrend := _direction == -1 ? lowerBand : upperBand [superTrend, _direction] k = kalman(close, kalmanPeriod, kalmanAlpha, kalmanBeta) [supertrend, direction] = pine_supertrend(k, supertrendFactor, supertrendAtrPeriod) vola = ta.wma(high-low, 200) upper = k+vola*dev lower = k-vola*dev midbody = math.avg(close, open) var trend = 0 if close > upper trend := 1 else if close < lower trend := -1 ktrend = 0 if direction < 0 ktrend := 1 else if direction > 0 ktrend := -1 t = 70 t_ = 20 p1 = plot(ktrend * trend == 1 ? k : na, color=color.gray, style = plot.style_linebr, linewidth = 3, title = 'k') m = plot(midbody, color=color.gray, display = display.none, title = 'midbody') up = plot(trend == -1 or ktrend * trend == -1 ? upper : na, color=ktrend * trend == -1 ? color.gray : ktrend == -1 ? color.new(red, t) : color.gray, style = plot.style_circles, title = 'upper') lo = plot(trend == 1 or ktrend * trend == -1 ? lower : na, color=ktrend * trend == -1 ? color.gray : ktrend == 1 ? color.new(green, t) : color.gray, style = plot.style_circles, title = 'lower') plotchar(ta.crossover(ktrend * trend, 0) ? k : na, location = location.absolute, color=trend == 1 ? green : red, char="&#9673;", size=size.tiny) x = color.new(chart.bg_color, 80) x_ = color.new(trend == -1 ? green:red, t) //fill(p1, m, k, midbody, x, x_) fill(p1, m, color = x_) //fill(up, lo, ktrend * trend == -1 ? color.new(color.gray, 90) : na, "Range") fill(up, lo, color = x_)