커뮤니티

문의드립니다.

프로필 이미지
해암
2025-12-16 01:17:46
99
글번호 229048
답변완료

아래의 트레이딩뷰수식을 변환부탁드립니다.   가능하다면 볼린저밴드의 기간값과 슈퍼트렌드1, 2, 3의 조건값 그리고 밴드선의 굵기 슈퍼트렌드3개의 선굵기는 변수로 따로 빼서 변경가능하게 부탁드립니다.    도와주시는 것에 항상 감사드립니다.    수고하세요 !!!

//@version=5 indicator("BB + Triple Supertrend Regime Signals", overlay=true)

// // ① Bollinger Bands // bb_len  = 2 bb_mult = 2.0 src_bb  = open

basis    = ta.sma(src_bb, bb_len) dev      = ta.stdev(src_bb, bb_len) upperBB  = basis + bb_mult * dev lowerBB  = basis - bb_mult * dev

plot(upperBB, "BB Upper", color=color.red) plot(basis,   "BB Basis", color=color.orange) plot(lowerBB, "BB Lower", color=color.blue)

sellBB = high >= upperBB buyBB  = low  <= lowerBB

// // ② Supertrend 계산 함수 // f_supertrend(_period, _mult) =>     _atr = ta.atr(_period)     _hl2 = hl2

    _up  = _hl2 - _mult * _atr     _dn  = _hl2 + _mult * _atr

    var float _finalUp = na     var float _finalDn = na     _finalUp := close[1] > nz(_finalUp[1]) ? math.max(_up, nz(_finalUp[1])) : _up     _finalDn := close[1] < nz(_finalDn[1]) ? math.min(_dn, nz(_finalDn[1])) : _dn

    var int _trend = 1     _trend := close > nz(_finalDn[1]) ? 1 : close < nz(_finalUp[1]) ? -1 : _trend

    [_finalUp, _finalDn, _trend]

// // ③ Supertrend 1, 2, 3 실행 // [up1, dn1, tr1] = f_supertrend(4, 0.2) [up2, dn2, tr2] = f_supertrend(6, 1.0) [up3, dn3, tr3] = f_supertrend(7, 1.4)

st1 = tr1 == 1 ? up1 : dn1 st2 = tr2 == 1 ? up2 : dn2 st3 = tr3 == 1 ? up3 : dn3

plot(st1, "ST1", color=tr1 == 1 ? color.green : color.red) plot(st2, "ST2", color=tr2 == 1 ? color.green : color.red) plot(st3, "ST3", color=tr3 == 1 ? color.green : color.red)

// // ④ Supertrend 기반의 추세 레짐 // allAbove = close > st1 and close > st2 and close > st3 allBelow = close < st1 and close < st2 and close < st3

var int regime = 0 var int prevRegime = 0     // (추가) 이전 레짐 저장

prevRegime := regime       // 레짐 변경 감지를 위해 저장

if allAbove     regime := 1 else if allBelow     regime := -1 // 유지 시 regime 변경 없음

// // 🔥 레짐 시작 시 표시 (bull / bear) // bullStart = regime == 1 and prevRegime != 1 bearStart = regime == -1 and prevRegime != -1

plotshape(bullStart, title="Bull Regime Start", text="bull",      style=shape.labelup, color=color.green, textcolor=color.white,      location=location.belowbar, size=size.tiny)

plotshape(bearStart, title="Bear Regime Start", text="bear",      style=shape.labeldown, color=color.red, textcolor=color.white,      location=location.abovebar, size=size.tiny)

// // ⑤ 최종 매수/매도 신호 // buySignal  = (regime ==  1) and buyBB sellSignal = (regime == -1) and sellBB

// // ⑥ 화살표 표시 // plotshape(buySignal,  title="BUY",  style=shape.arrowup,   color=color.green, location=location.belowbar, size=size.small, text="BUY") plotshape(sellSignal, title="SELL", style=shape.arrowdown, color=color.red,   location=location.abovebar, size=size.small, text="SELL")

// // ⑦ 알림 // alertcondition(buySignal,  "BUY",  "Regime Up + BB Lower Touch") alertcondition(sellSignal, "SELL", "Regime Down + BB Upper Touch")

지표
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2025-12-16 14:49:18

안녕하세요 예스스탁입니다. //@version=5 indicator("BB + Triple Supertrend Regime Signals", overlay=true) // // ① Bollinger Bands // bb_len ?= 2 bb_mult = 2.0 src_bb ?= open input : BB_len(2),BB_mult(2); input : BB상단굵기(1),BB중단굵기(1),BB하단굵기(1); var : src_bb(0),basis(0),dev(0),upperBB(0),lowerBB(0); var : sellBB(False),Buybb(False); sellBB = high >= upperBB; buyBB = low <= lowerBB; input : Period1(4),mult1(0.2),st1굵기(1); input : Period2(6),mult2(1.2),st2굵기(1); input : Period3(7),mult3(1.4),st3굵기(1); var : alpha1(0),a1(0),s1(0),u1(0),d1(0),up1(0),dn1(0),tr1(1); var : alpha2(0),a2(0),s2(0),u2(0),d2(0),up2(0),dn2(0),tr2(1); var : alpha3(0),a3(0),s3(0),u3(0),d3(0),up3(0),dn3(0),tr3(1); var : st1(0),st2(0),st3(0); src_bb = open; basis = ma(src_bb, bb_len); dev = std(src_bb, bb_len); upperBB = basis + bb_mult * dev; lowerBB = basis - bb_mult * dev; plot1(upperBB, "BB Upper", red,Def,BB상단굵기); plot2(basis, "BB Basis", orange,Def,BB중단굵기); plot3(lowerBB, "BB Lower", blue,Def,BB하단굵기); alpha1 = 1 / period1; a1 = IFf(IsNan(a1[1]) == true, ma(TrueRange,period1) , alpha1 * TrueRange + (1 - alpha1) * IFf(isnan(a1[1])==true,0,a1[1])); s1 = (h+l)/2; u1 = s1 - mult1 * a1; d1 = s1 + mult1 * a1; Up1 = iff(close[1] > iff(IsNan(Up1[1])==true,0,Up1[1]) , max(u1, iff(IsNan(Up1[1])==true,0,Up1[1])) , u1); Dn1 = iff(close[1] < iff(IsNan(Dn1[1])==true,0,Dn1[1]) , min(d1, iff(IsNan(Dn1[1])==true,0,Dn1[1])) , d1); tr1 = iff(close > iff(IsNan(Dn1[1])==true,0,Dn1[1]) , 1 ,IFf(close < iff(IsNan(Up1[1])==true,0,Up1[1]) , -1 , tr1)); alpha2 = 1 / period2; a2 = IFf(IsNan(a2[1]) == true, ma(TrueRange,period2) , alpha2 * TrueRange + (1 - alpha2) * IFf(isnan(a2[1])==true,0,a2[1])); s2 = (h+l)/2; u2 = s2 - mult2 * a2; d2 = s2 + mult2 * a2; Up2 = iff(close[1] > iff(IsNan(Up2[1])==true,0,Up2[1]) , max(u2, iff(IsNan(Up2[1])==true,0,Up2[1])) , u2); Dn2 = iff(close[1] < iff(IsNan(Dn2[1])==true,0,Dn2[1]) , min(d2, iff(IsNan(Dn2[1])==true,0,Dn2[1])) , d2); tr2 = iff(close > iff(IsNan(Dn2[1])==true,0,Dn2[1]) , 1 ,IFf(close < iff(IsNan(Up2[1])==true,0,Up2[1]) , -1 , tr2)); alpha3 = 1 / period3; a3 = IFf(IsNan(a3[1]) == true, ma(TrueRange,period3) , alpha3 * TrueRange + (1 - alpha3) * IFf(isnan(a3[1])==true,0,a3[1])); s3 = (h+l)/2; u3 = s3 - mult3 * a3; d3 = s3 + mult3 * a3; Up3 = iff(close[1] > iff(IsNan(Up3[1])==true,0,Up3[1]) , max(u3, iff(IsNan(Up3[1])==true,0,Up3[1])) , u3); Dn3 = iff(close[1] < iff(IsNan(Dn3[1])==true,0,Dn3[1]) , min(d3, iff(IsNan(Dn3[1])==true,0,Dn3[1])) , d3); tr3 = iff(close > iff(IsNan(Dn3[1])==true,0,Dn3[1]) , 1 ,IFf(close < iff(IsNan(Up3[1])==true,0,Up3[1]) , -1 , tr3)); st1 = iff(tr1 == 1 , up1 , dn1 ); st2 = iff(tr2 == 1 , up2 , dn2 ); st3 = iff(tr3 == 1 , up3 , dn3); plot4(st1, "ST1", iff(tr1 == 1 , green , red),Def,st1굵기); plot5(st2, "ST2", iff(tr2 == 1 , green , red),Def,st2굵기); plot6(st3, "ST3", iff(tr3 == 1 , green , red),Def,st3굵기); var : allAbove(False),allBelow(False); var : regime(0),prevRegime(0); var : bullStart(False),bearStart(False); var : buySignal(False),SellSignal(False); var : tx1(0),tx2(0); allAbove = close > st1 and close > st2 and close > st3; allBelow = close < st1 and close < st2 and close < st3; prevRegime = regime; if allAbove Then regime = 1; if allBelow Then regime = -1; bullStart = regime == 1 and prevRegime != 1 ; bearStart = regime == -1 and prevRegime != -1; if bullStart Then { tx1 = text_new(sDate,sTime,L,"Bull"); Text_SetStyle(tx1,2,0); Text_SetColor(tx1,Green); } if bearStart Then { tx1 = text_new(sDate,sTime,H,"Bear"); Text_SetStyle(tx1,2,1); Text_SetColor(tx1,Red); } buySignal = (regime == 1) and buyBB ; sellSignal = (regime == -1) and sellBB; if buySignal Then { tx2 = text_new(sDate,sTime,L,"▲"); Text_SetStyle(tx2,2,0); Text_SetColor(tx2,Green); } if sellSignal Then { tx2 = text_new(sDate,sTime,H,"▼"); Text_SetStyle(tx2,2,1); Text_SetColor(tx2,Red); } 즐거운 하루되세요