OPEN-SOURCE SCRIPT
내 스크립트

//version=5
indicator('RSI+BB+이격도', overlay=false)
// 매개변수 초기화
src = input(title='Source', defval=close) // 계산에 대한 가격 유형 설정
for_rsi = input(title='RSI_period', defval=14) // RSI 기간
for_ma = input(title='Basis_BB', defval=20) // BB 내 MA 기간
for_mult = input.float(title='Stdev', defval=2, minval=1, maxval=5) // BB의 표준 편차 수
for_sigma = input.float(title='Dispersion', defval=0.1, minval=0.01, maxval=1) // MA 주변 이격도
// 스크립트의 작업 조건
current_rsi = ta.rsi(src, for_rsi) // RSI 표시기의 현재 위치
basis = ta.ema(current_rsi, for_ma)
dev = for_mult * ta.stdev(current_rsi, for_ma)
upper = basis + dev
lower = basis - dev
disp_up = basis + (upper - lower) * for_sigma // RSI가 통과해야 하는 이동 영역의 최소 허용 임계값(상단)
disp_down = basis - (upper - lower) * for_sigma // RSI가 극복해야 하는 이동 영역의 최소 허용 임계값(하단)
color_rsi = current_rsi >= disp_up ? color.rgb(0, 255, 132) : current_rsi <= disp_down ? color.rgb(255, 0, 0) : #ffea00 // BB 내 위치에 따른 RSI의 현재 색상
short_l1 = input(5, title='Short - L1')
short_l2 = input(20, title='Short - L2')
short_l3 = input(15, title='Short - L3')
long_l1 = input(20, title='Long - L1')
long_l2 = input(15, title='Long - L2')
shortTermXtrender = ta.rsi(ta.ema(close, short_l1) - ta.ema(close, short_l2), short_l3) - 50
longTermXtrender = ta.rsi(ta.ema(close, long_l1), long_l2) - 50
shortXtrenderCol = shortTermXtrender > 0 ? shortTermXtrender > shortTermXtrender[1] ? color.lime : #228B22 : shortTermXtrender > shortTermXtrender[1] ? color.red : #8B0000
t3(src, len) =>
xe1_1 = ta.ema(src, len)
xe2_1 = ta.ema(xe1_1, len)
xe3_1 = ta.ema(xe2_1, len)
xe4_1 = ta.ema(xe3_1, len)
xe5_1 = ta.ema(xe4_1, len)
xe6_1 = ta.ema(xe5_1, len)
b_1 = 0.7
c1_1 = -b_1 * b_1 * b_1
c2_1 = 3 * b_1 * b_1 + 3 * b_1 * b_1 * b_1
c3_1 = -6 * b_1 * b_1 - 3 * b_1 - 3 * b_1 * b_1 * b_1
c4_1 = 1 + 3 * b_1 + b_1 * b_1 * b_1 + 3 * b_1 * b_1
nT3Average_1 = c1_1 * xe6_1 + c2_1 * xe5_1 + c3_1 * xe4_1 + c4_1 * xe3_1
nT3Average_1
maShortTermXtrender = t3(shortTermXtrender, 5)
colShortTermXtrender = maShortTermXtrender > maShortTermXtrender[1] ? color.lime : color.red
plotshape(maShortTermXtrender > maShortTermXtrender[1] and maShortTermXtrender[1] < maShortTermXtrender[2] ? maShortTermXtrender : na, location=location.bottom, style=shape.circle, color=color.new(color.lime, 10), size=size.tiny)
plotshape(maShortTermXtrender < maShortTermXtrender[1] and maShortTermXtrender[1] > maShortTermXtrender[2] ? maShortTermXtrender : na, location=location.top, style=shape.circle, color=color.new(color.red, 10), size=size.tiny)
longXtrenderCol = longTermXtrender > 0 ? longTermXtrender > longTermXtrender[1] ? color.lime : #228B22 : longTermXtrender > longTermXtrender[1] ? color.red : #8B0000
macollongXtrenderCol = longTermXtrender > longTermXtrender[1] ? color.lime : color.red
// 단기 추세 이동 평균을 기반으로 한 롱 및 숏 신호에 대한 경고 조건
alertcondition(maShortTermXtrender > maShortTermXtrender[1] and maShortTermXtrender[1] < maShortTermXtrender[2], title='매수추세감지', message='잠재적 매수 포지션 이격도 보고 진입.')
alertcondition(maShortTermXtrender < maShortTermXtrender[1] and maShortTermXtrender[1] > maShortTermXtrender[2], title='매도추세감지', message='잠재적 매도 포지션 이격도 보고 진입.')
left = input.int(5, "left")
right = input.int(5, "right")
// 1. 지표
osc = ta.rsi(close, 14)
plot(osc, linewidth = 2)
// 2. 피봇 찾기 (상승div-피봇로우, 하락div-피봇하이)
pivotlow = ta.pivotlow(osc, left, right)
pivothigh = ta.pivothigh(osc, left, right)
is_pivotlow = not na(pivotlow)
is_pivothigh = not na(pivothigh)
// 3. 다이버전스 찾기
// 상승 다이버전스
prev_pivotlow = ta.valuewhen(is_pivotlow, pivotlow, 1)
osc_higher_low = is_pivotlow ? pivotlow > prev_pivotlow : false
prev_low = ta.valuewhen(is_pivotlow, low[right], 1)
price_lower_low = is_pivotlow ? low[right] < prev_low : false
is_regular_bullish_divergence = osc_higher_low and price_lower_low
plotshape(is_regular_bullish_divergence ? is_pivotlow : na, offset = -right, title="상승 다이버전스", text = "Bull", style = shape.labelup, color = color.green, textcolor = color.white, location = location.bottom)
plot(is_pivotlow ? pivotlow : na, color = is_regular_bullish_divergence ? color.green : na, offset = -right, linewidth = 2)
// 히든 상승다이버전스
osc_lower_low = is_pivotlow ? pivotlow < prev_pivotlow : false
price_higher_low = is_pivotlow ? low[right] > prev_low : false
is_hidden_bullish_divergence = osc_lower_low and price_higher_low
plotshape(is_hidden_bullish_divergence ? is_pivotlow : na, offset = -right, title="히든 상승 다이버전스", text = "H Bull", style = shape.labelup, color = color.green, textcolor = color.white, location = location.bottom)
plot(is_pivotlow ? pivotlow : na, color = is_hidden_bullish_divergence ? color.green : na, offset = -right, linewidth = 2)
// 하락다이버전스
prev_pivothigh = ta.valuewhen(is_pivothigh, pivothigh, 1)
osc_lower_high = is_pivothigh ? pivothigh < prev_pivothigh : false
prev_high = ta.valuewhen(is_pivothigh, high[right], 1)
price_higher_high = is_pivothigh ? high[right] > prev_high : false
is_regular_bearish_divergence = osc_lower_high and price_higher_high
plotshape(is_regular_bearish_divergence ? is_pivothigh : na, offset = -right, title="하락 다이버전스", text = "Bear", style = shape.labeldown, color = color.red, textcolor = color.white, location = location.top)
plot(is_pivothigh ? pivothigh : na, color = is_regular_bearish_divergence ? color.red : na, offset = -right, linewidth = 2)
// 히든 하락 다이버전스
osc_higher_high = is_pivothigh ? pivothigh > prev_pivothigh : false
price_lower_high = is_pivothigh ? high[right] < prev_high : false
is_hidden_bearish_divergence = osc_higher_high and price_lower_high
plotshape(is_hidden_bearish_divergence ? is_pivothigh : na, offset = -right, title="히든 하락 다이버전스", text = "H Bear", style = shape.labeldown, color = color.red, textcolor = color.white, location = location.top)
plot(is_pivothigh ? pivothigh : na, color = is_hidden_bearish_divergence ? color.red : na, offset = -right, linewidth = 2)
// RSI 영역에 대한 추가 줄 및 채우기
h1 = hline(70, color=#d4d4d4, linestyle=hline.style_dotted, linewidth=1)
h2 = hline(50, color=#d4d4d4, linestyle=hline.style_dotted, linewidth=1)
h3 = hline(30, color=#d4d4d4, linestyle=hline.style_dotted, linewidth=1)
rsiPlot = plot(ta.rsi(close,14), "RSI", color=na, editable = false, display = display.none)
midLinePlot = plot(50, color = na, editable = false, display = display.none)
fill(rsiPlot, midLinePlot, 100, 70, top_color = color.new(#ff0000, 0), bottom_color = color.new(#ff0000, 100), title = "Overbought Gradient Fill")
fill(rsiPlot, midLinePlot, 30, 0, top_color = color.new(#48ff00, 100), bottom_color = color.new(#66ff00, 0), title = "Oversold Gradient Fill")
// 사용자 입력값
lengthBB1 = input.int(20, title='BB1', minval=1)
lengthBB2 = input.int(4, title='BB2', minval=1)
multBB1 = input.float(2, title='BB1', minval=0.1)
multBB2 = input.float(4, title='BB2', minval=0.1)
lengthMA = input.int(20, title='MA Length', minval=1)
// 볼린저 밴드 계산
basisBB1 = ta.sma(close, lengthBB1)
upperBB1 = basisBB1 + multBB1 * ta.stdev(close, lengthBB1)
lowerBB1 = basisBB1 - multBB1 * ta.stdev(close, lengthBB1)
basisBB2 = ta.sma(open, lengthBB2)
upperBB2 = basisBB2 + multBB2 * ta.stdev(open, lengthBB2)
lowerBB2 = basisBB2 - multBB2 * ta.stdev(open, lengthBB2)
// 이동평균선 추가
maClose = ta.sma(close, lengthMA)
// 표시할 조건 정의
showAboveTriangle = high >= upperBB1 and high >= upperBB2
showBelowTriangle = low <= lowerBB1 and low <= lowerBB2
showAboveTriangle1 = high >= upperBB2
showBelowTriangle1 = low <= lowerBB2
// 상단에 역삼각형 표시 (빨간색)
plotshape(series=showAboveTriangle, title='더블비 매도', color=color.rgb(255, 0, 0), style=shape.triangledown, text='DS', textcolor= color.white,size=size.small, location=location.top)
// 하단에 삼각형 표시 (초록색)
plotshape(series=showBelowTriangle, title='더블비 매수', color=color.rgb(4, 253, 12), style=shape.triangleup, text='DB', textcolor= color.white,size=size.small, location=location.bottom)
// 알림 및 트리거 조건
rsi_Green = ta.crossover(current_rsi, disp_up)
rsi_Red = ta.crossunder(current_rsi, disp_down)
alertcondition(condition=rsi_Green, title='이격도 밴드 매수', message='이격도 밴드 매수')
alertcondition(condition=rsi_Red, title='이격도 밴드 매도', message='이격도 밴드 매도')
rsi_Red1 = ta.crossover(current_rsi, lower)
rs9_Green1 = ta.crossunder(current_rsi, upper)
// 매수 매도 표시기
plotshape(rsi_Red1,color=color.green, style=shape.cross, location=location.bottom, size=size.small, title='(매수) signal')
plotshape(rs9_Green1,color= color.red, style=shape.cross, location=location.top, size=size.small, title='(매도) signal')
// 삼각형 표시된 위치에 알람 설정
alertcondition(showAboveTriangle, title='더블비 매도감지', message='더블비 매도감지')
alertcondition(showBelowTriangle, title='더블비 매수감지', message='더블비 매수감지')
// 결과 및 색상 지정
plot(basis, color=color.new(#080808, 0))
plot(upper, color=color.new(#00fff0, 0), linewidth=2)
plot(lower, color=color.new(#00fff0, 0), linewidth=2)
s1 = plot(disp_up, color=color.new(color.white, 0))
s2 = plot(disp_down, color=color.new(color.white, 0))
fill(s1, s2, color=color.new(color.white, 80))
plot(current_rsi, color=color_rsi, linewidth=2)
indicator('RSI+BB+이격도', overlay=false)
// 매개변수 초기화
src = input(title='Source', defval=close) // 계산에 대한 가격 유형 설정
for_rsi = input(title='RSI_period', defval=14) // RSI 기간
for_ma = input(title='Basis_BB', defval=20) // BB 내 MA 기간
for_mult = input.float(title='Stdev', defval=2, minval=1, maxval=5) // BB의 표준 편차 수
for_sigma = input.float(title='Dispersion', defval=0.1, minval=0.01, maxval=1) // MA 주변 이격도
// 스크립트의 작업 조건
current_rsi = ta.rsi(src, for_rsi) // RSI 표시기의 현재 위치
basis = ta.ema(current_rsi, for_ma)
dev = for_mult * ta.stdev(current_rsi, for_ma)
upper = basis + dev
lower = basis - dev
disp_up = basis + (upper - lower) * for_sigma // RSI가 통과해야 하는 이동 영역의 최소 허용 임계값(상단)
disp_down = basis - (upper - lower) * for_sigma // RSI가 극복해야 하는 이동 영역의 최소 허용 임계값(하단)
color_rsi = current_rsi >= disp_up ? color.rgb(0, 255, 132) : current_rsi <= disp_down ? color.rgb(255, 0, 0) : #ffea00 // BB 내 위치에 따른 RSI의 현재 색상
short_l1 = input(5, title='Short - L1')
short_l2 = input(20, title='Short - L2')
short_l3 = input(15, title='Short - L3')
long_l1 = input(20, title='Long - L1')
long_l2 = input(15, title='Long - L2')
shortTermXtrender = ta.rsi(ta.ema(close, short_l1) - ta.ema(close, short_l2), short_l3) - 50
longTermXtrender = ta.rsi(ta.ema(close, long_l1), long_l2) - 50
shortXtrenderCol = shortTermXtrender > 0 ? shortTermXtrender > shortTermXtrender[1] ? color.lime : #228B22 : shortTermXtrender > shortTermXtrender[1] ? color.red : #8B0000
t3(src, len) =>
xe1_1 = ta.ema(src, len)
xe2_1 = ta.ema(xe1_1, len)
xe3_1 = ta.ema(xe2_1, len)
xe4_1 = ta.ema(xe3_1, len)
xe5_1 = ta.ema(xe4_1, len)
xe6_1 = ta.ema(xe5_1, len)
b_1 = 0.7
c1_1 = -b_1 * b_1 * b_1
c2_1 = 3 * b_1 * b_1 + 3 * b_1 * b_1 * b_1
c3_1 = -6 * b_1 * b_1 - 3 * b_1 - 3 * b_1 * b_1 * b_1
c4_1 = 1 + 3 * b_1 + b_1 * b_1 * b_1 + 3 * b_1 * b_1
nT3Average_1 = c1_1 * xe6_1 + c2_1 * xe5_1 + c3_1 * xe4_1 + c4_1 * xe3_1
nT3Average_1
maShortTermXtrender = t3(shortTermXtrender, 5)
colShortTermXtrender = maShortTermXtrender > maShortTermXtrender[1] ? color.lime : color.red
plotshape(maShortTermXtrender > maShortTermXtrender[1] and maShortTermXtrender[1] < maShortTermXtrender[2] ? maShortTermXtrender : na, location=location.bottom, style=shape.circle, color=color.new(color.lime, 10), size=size.tiny)
plotshape(maShortTermXtrender < maShortTermXtrender[1] and maShortTermXtrender[1] > maShortTermXtrender[2] ? maShortTermXtrender : na, location=location.top, style=shape.circle, color=color.new(color.red, 10), size=size.tiny)
longXtrenderCol = longTermXtrender > 0 ? longTermXtrender > longTermXtrender[1] ? color.lime : #228B22 : longTermXtrender > longTermXtrender[1] ? color.red : #8B0000
macollongXtrenderCol = longTermXtrender > longTermXtrender[1] ? color.lime : color.red
// 단기 추세 이동 평균을 기반으로 한 롱 및 숏 신호에 대한 경고 조건
alertcondition(maShortTermXtrender > maShortTermXtrender[1] and maShortTermXtrender[1] < maShortTermXtrender[2], title='매수추세감지', message='잠재적 매수 포지션 이격도 보고 진입.')
alertcondition(maShortTermXtrender < maShortTermXtrender[1] and maShortTermXtrender[1] > maShortTermXtrender[2], title='매도추세감지', message='잠재적 매도 포지션 이격도 보고 진입.')
left = input.int(5, "left")
right = input.int(5, "right")
// 1. 지표
osc = ta.rsi(close, 14)
plot(osc, linewidth = 2)
// 2. 피봇 찾기 (상승div-피봇로우, 하락div-피봇하이)
pivotlow = ta.pivotlow(osc, left, right)
pivothigh = ta.pivothigh(osc, left, right)
is_pivotlow = not na(pivotlow)
is_pivothigh = not na(pivothigh)
// 3. 다이버전스 찾기
// 상승 다이버전스
prev_pivotlow = ta.valuewhen(is_pivotlow, pivotlow, 1)
osc_higher_low = is_pivotlow ? pivotlow > prev_pivotlow : false
prev_low = ta.valuewhen(is_pivotlow, low[right], 1)
price_lower_low = is_pivotlow ? low[right] < prev_low : false
is_regular_bullish_divergence = osc_higher_low and price_lower_low
plotshape(is_regular_bullish_divergence ? is_pivotlow : na, offset = -right, title="상승 다이버전스", text = "Bull", style = shape.labelup, color = color.green, textcolor = color.white, location = location.bottom)
plot(is_pivotlow ? pivotlow : na, color = is_regular_bullish_divergence ? color.green : na, offset = -right, linewidth = 2)
// 히든 상승다이버전스
osc_lower_low = is_pivotlow ? pivotlow < prev_pivotlow : false
price_higher_low = is_pivotlow ? low[right] > prev_low : false
is_hidden_bullish_divergence = osc_lower_low and price_higher_low
plotshape(is_hidden_bullish_divergence ? is_pivotlow : na, offset = -right, title="히든 상승 다이버전스", text = "H Bull", style = shape.labelup, color = color.green, textcolor = color.white, location = location.bottom)
plot(is_pivotlow ? pivotlow : na, color = is_hidden_bullish_divergence ? color.green : na, offset = -right, linewidth = 2)
// 하락다이버전스
prev_pivothigh = ta.valuewhen(is_pivothigh, pivothigh, 1)
osc_lower_high = is_pivothigh ? pivothigh < prev_pivothigh : false
prev_high = ta.valuewhen(is_pivothigh, high[right], 1)
price_higher_high = is_pivothigh ? high[right] > prev_high : false
is_regular_bearish_divergence = osc_lower_high and price_higher_high
plotshape(is_regular_bearish_divergence ? is_pivothigh : na, offset = -right, title="하락 다이버전스", text = "Bear", style = shape.labeldown, color = color.red, textcolor = color.white, location = location.top)
plot(is_pivothigh ? pivothigh : na, color = is_regular_bearish_divergence ? color.red : na, offset = -right, linewidth = 2)
// 히든 하락 다이버전스
osc_higher_high = is_pivothigh ? pivothigh > prev_pivothigh : false
price_lower_high = is_pivothigh ? high[right] < prev_high : false
is_hidden_bearish_divergence = osc_higher_high and price_lower_high
plotshape(is_hidden_bearish_divergence ? is_pivothigh : na, offset = -right, title="히든 하락 다이버전스", text = "H Bear", style = shape.labeldown, color = color.red, textcolor = color.white, location = location.top)
plot(is_pivothigh ? pivothigh : na, color = is_hidden_bearish_divergence ? color.red : na, offset = -right, linewidth = 2)
// RSI 영역에 대한 추가 줄 및 채우기
h1 = hline(70, color=#d4d4d4, linestyle=hline.style_dotted, linewidth=1)
h2 = hline(50, color=#d4d4d4, linestyle=hline.style_dotted, linewidth=1)
h3 = hline(30, color=#d4d4d4, linestyle=hline.style_dotted, linewidth=1)
rsiPlot = plot(ta.rsi(close,14), "RSI", color=na, editable = false, display = display.none)
midLinePlot = plot(50, color = na, editable = false, display = display.none)
fill(rsiPlot, midLinePlot, 100, 70, top_color = color.new(#ff0000, 0), bottom_color = color.new(#ff0000, 100), title = "Overbought Gradient Fill")
fill(rsiPlot, midLinePlot, 30, 0, top_color = color.new(#48ff00, 100), bottom_color = color.new(#66ff00, 0), title = "Oversold Gradient Fill")
// 사용자 입력값
lengthBB1 = input.int(20, title='BB1', minval=1)
lengthBB2 = input.int(4, title='BB2', minval=1)
multBB1 = input.float(2, title='BB1', minval=0.1)
multBB2 = input.float(4, title='BB2', minval=0.1)
lengthMA = input.int(20, title='MA Length', minval=1)
// 볼린저 밴드 계산
basisBB1 = ta.sma(close, lengthBB1)
upperBB1 = basisBB1 + multBB1 * ta.stdev(close, lengthBB1)
lowerBB1 = basisBB1 - multBB1 * ta.stdev(close, lengthBB1)
basisBB2 = ta.sma(open, lengthBB2)
upperBB2 = basisBB2 + multBB2 * ta.stdev(open, lengthBB2)
lowerBB2 = basisBB2 - multBB2 * ta.stdev(open, lengthBB2)
// 이동평균선 추가
maClose = ta.sma(close, lengthMA)
// 표시할 조건 정의
showAboveTriangle = high >= upperBB1 and high >= upperBB2
showBelowTriangle = low <= lowerBB1 and low <= lowerBB2
showAboveTriangle1 = high >= upperBB2
showBelowTriangle1 = low <= lowerBB2
// 상단에 역삼각형 표시 (빨간색)
plotshape(series=showAboveTriangle, title='더블비 매도', color=color.rgb(255, 0, 0), style=shape.triangledown, text='DS', textcolor= color.white,size=size.small, location=location.top)
// 하단에 삼각형 표시 (초록색)
plotshape(series=showBelowTriangle, title='더블비 매수', color=color.rgb(4, 253, 12), style=shape.triangleup, text='DB', textcolor= color.white,size=size.small, location=location.bottom)
// 알림 및 트리거 조건
rsi_Green = ta.crossover(current_rsi, disp_up)
rsi_Red = ta.crossunder(current_rsi, disp_down)
alertcondition(condition=rsi_Green, title='이격도 밴드 매수', message='이격도 밴드 매수')
alertcondition(condition=rsi_Red, title='이격도 밴드 매도', message='이격도 밴드 매도')
rsi_Red1 = ta.crossover(current_rsi, lower)
rs9_Green1 = ta.crossunder(current_rsi, upper)
// 매수 매도 표시기
plotshape(rsi_Red1,color=color.green, style=shape.cross, location=location.bottom, size=size.small, title='(매수) signal')
plotshape(rs9_Green1,color= color.red, style=shape.cross, location=location.top, size=size.small, title='(매도) signal')
// 삼각형 표시된 위치에 알람 설정
alertcondition(showAboveTriangle, title='더블비 매도감지', message='더블비 매도감지')
alertcondition(showBelowTriangle, title='더블비 매수감지', message='더블비 매수감지')
// 결과 및 색상 지정
plot(basis, color=color.new(#080808, 0))
plot(upper, color=color.new(#00fff0, 0), linewidth=2)
plot(lower, color=color.new(#00fff0, 0), linewidth=2)
s1 = plot(disp_up, color=color.new(color.white, 0))
s2 = plot(disp_down, color=color.new(color.white, 0))
fill(s1, s2, color=color.new(color.white, 80))
plot(current_rsi, color=color_rsi, linewidth=2)
Open-source script
In true TradingView spirit, the creator of this script has made it open-source, so that traders can review and verify its functionality. Kudos to the author! While you can use it for free, remember that republishing the code is subject to our House Rules.
Disclaimer
The information and publications are not meant to be, and do not constitute, financial, investment, trading, or other types of advice or recommendations supplied or endorsed by TradingView. Read more in the Terms of Use.
Open-source script
In true TradingView spirit, the creator of this script has made it open-source, so that traders can review and verify its functionality. Kudos to the author! While you can use it for free, remember that republishing the code is subject to our House Rules.
Disclaimer
The information and publications are not meant to be, and do not constitute, financial, investment, trading, or other types of advice or recommendations supplied or endorsed by TradingView. Read more in the Terms of Use.