커뮤니티

수식 부탁드립니다

프로필 이미지
사노소이
2026-02-24 05:14:02
97
글번호 230722
답변완료

// ─────────────────────────────

// Inputs

// ─────────────────────────────

length1 = input.int(200, "Curved Trend Length", minval=1)

multiplier = input.float(1.5, step=0.1, minval=0.01)


prd = input.int(20, minval=1, title="Period")

s1 = input.bool(true, title="Response")

resp = input.int(7, minval=1)


bull2 = input.color(color.lime, "Bull Line")

bear2 = input.color(color.red, "Bear Line")


// ─────────────────────────────

// Curved Bands

// ─────────────────────────────

var float upperBand = 0

var float lowerBand = 0

var int barsSinceUpperIncrease = 0

var int barsSinceLowerDecrease = 0


adaptiveSize = ta.atr(length1)

lengthSquared = math.pow(length1, 2)


maxcloseUpper = math.max(high, na(upperBand)?close:upperBand)

barsSinceUpperIncrease := close>upperBand?0:barsSinceUpperIncrease+1

upperAdjustmentFactor = adaptiveSize/lengthSquared*(barsSinceUpperIncrease+1)*multiplier

upperBand := maxcloseUpper - upperAdjustmentFactor


mincloseLower = math.min(low, na(lowerBand)?close:lowerBand)

barsSinceLowerDecrease := close<lowerBand?0:barsSinceLowerDecrease+1

lowerAdjustmentFactor = adaptiveSize/lengthSquared*(barsSinceLowerDecrease+1)*multiplier

lowerBand := mincloseLower + lowerAdjustmentFactor


// Pivot

Up = ta.highest(upperBand, prd)

Dn = ta.lowest(lowerBand, prd)


// ─────────────────────────────

// Variables

// ─────────────────────────────

b = bar_index

var int pos = 0

var int iUp = na

var int iDn = na


// ─────────────────────────────

// Functions

// ─────────────────────────────

CreateLine(x1,x2,y,col)=>

pts = array.new<chart.point>()

pts.push(chart.point.from_index(x1,x2))

pts.push(chart.point.from_index(b,y))

polyline.new(pts,false,false,line_color=col,line_width=4)


// ─────────────────────────────

// Structure Logic

// ─────────────────────────────

if Up > Up[1]

iUp := b

if pos <= 0

CreateLine(iUp[1],Up[b-iUp[1]],Up[1],bull2)

pos := 1

else if pos >= 1 and Up[1]==Up[s1?resp:prd]

CreateLine(iUp[1],Up[b-iUp[1]],Up[1],bull2)

pos += 1


else if Dn < Dn[1]

iDn := b

if pos >= 0

CreateLine(iDn[1],Dn[b-iDn[1]],Dn[1],bear2)

pos := -1

else if pos <= -1 and Dn[1]==Dn[s1?resp:prd]

CreateLine(iDn[1],Dn[b-iDn[1]],Dn[1],bear2)

pos -= 1


// ─────────────────────────────

// Curved Polyline

// ─────────────────────────────

var UpperRange = array.new<chart.point>()

var LowerRange = array.new<chart.point>()


polyline a1 = na

polyline a2 = na


if Up>Up[1]

UpperRange.clear()

if Dn<Dn[1]

LowerRange.clear()


UpperRange.unshift(chart.point.from_index(b,Up))

LowerRange.unshift(chart.point.from_index(b,Dn))


a1 := polyline.new(UpperRange,line_color=bear2,line_width=4)

a2 := polyline.new(LowerRange,line_color=bull2,line_width=4)


(a1[1]).delete()

(a2[1]).delete()


// ─────────────────────────────

// Marker

// ─────────────────────────────

bullChoCh = pos == 1 and pos[1] <= 0 and barstate.isconfirmed

bearChoCh = pos == -1 and pos[1] >= 0 and barstate.isconfirmed


plotchar(bullChoCh, char="🅑", location=location.belowbar, color=color.lime, size=size.small)

plotchar(bearChoCh, char="🅢", location=location.abovebar, color=color.red, size=size.small)

지표
답변 2
프로필 이미지

예스스탁 예스스탁 답변

2026-02-24 12:12:39

전화주시기 바랍니다. 02-3453-1060
프로필 이미지

예스스탁 예스스탁 답변

2026-02-25 19:03:50

안녕하세요 예스스탁입니다. input : length1(200); input : multiplier(1.5); input : prd(20); input : s1(true); input : resp(7); input : bull2(lime); input : bear2(red); var : upperBand(0),lowerBand(0),barsSinceUpperIncrease(0),barsSinceLowerDecrease(0); var : lengthSquared(0),maxcloseUpper(0); var : alpha(0),adaptiveSize(0), upperAdjustmentFactor(0); var : mincloseLower(0),lowerAdjustmentFactor(0); alpha = 1 / length1 ; adaptiveSize = IFf(IsNan(adaptiveSize[1]) == true, ma(TrueRange,length1) , alpha * TrueRange + (1 - alpha) * IFf(isnan(adaptiveSize[1])==true,0,adaptiveSize[1])); lengthSquared = pow(length1, 2); maxcloseUpper = max(high,IFf(IsNan(upperBand)==true,close,upperBand)); barsSinceUpperIncrease = iff(close>upperBand,0,barsSinceUpperIncrease+1); upperAdjustmentFactor = adaptiveSize/lengthSquared*(barsSinceUpperIncrease+1)*multiplier; upperBand = maxcloseUpper - upperAdjustmentFactor; mincloseLower = min(low,IFF(IsNan(lowerBand)==true,close,lowerBand)); barsSinceLowerDecrease = iff(close<lowerBand,0,barsSinceLowerDecrease+1); lowerAdjustmentFactor = adaptiveSize/lengthSquared*(barsSinceLowerDecrease+1)*multiplier; lowerBand = mincloseLower + lowerAdjustmentFactor; var : up(0),dn(0),b(0),bullChoCh(False),bearChoCh(False); var : pos(0),iUp(Nan),iDn(Nan),tx(0); Up = highest(upperBand, prd); Dn = lowest(lowerBand, prd); b = index; var : TL1(0),TL2(0),TL3(0),TL4(0),T(0); if Up > Up[1] Then { T = 1; iUp = b; if pos <= 0 Then { pos = 1; TL1 = TL_New(sDate[b-iUp[1]],sTime[b-iUp[1]],Up[b-iUp[1]],sDate,sTime,Up[1]); TL_SetSize(TL1,4); TL_SetColor(TL1,bull2); } else if pos >= 1 and Up[1]==Up[iff(s1,resp,prd)] Then { pos = pos+1; TL2 = TL_New(sDate[b-iUp[1]],sTime[b-iUp[1]],Up[b-iUp[1]],sDate,sTime,Up[1]); TL_SetSize(TL2,4); TL_SetColor(TL2,bull2); } } else if Dn < Dn[1] Then { T = -1; iDn = b; if pos >= 0 Then { pos = -1; TL3 = TL_New(sDate[b-iDn[1]],sTime[b-iDn[1]],Dn[b-iDn[1]],sDate,sTime,Dn[1]); TL_SetSize(TL3,4); TL_SetColor(TL3,bear2); } else if pos <= -1 and Dn[1]==Dn[iff(s1,resp,prd)] Then { pos = pos-1; TL4 = TL_New(sDate[b-iDn[1]],sTime[b-iDn[1]],Dn[b-iDn[1]],sDate,sTime,Dn[1]); TL_SetSize(TL4,4); TL_SetColor(TL4,bear2); } } Array : txx[500](0); var : cnt(0); if T == 1 Then { For cnt = 0 to 499 { Text_Delete(txx[cnt]); if T == 1 and cnt < (Index-idn)-1 Then { txx[cnt] = Text_New(sDate[cnt],sTime[cnt],Dn[cnt],"·"); Text_SetStyle(txx[cnt],2,2); Text_SetBold(txx[cnt],1); Text_SetSize(txx[cnt],20); Text_SetColor(txx[cnt],bull2); } if T == -1 and cnt < (Index-iup)-1 Then { txx[cnt] = Text_New(sDate[cnt],sTime[cnt],Up[cnt],"·"); Text_SetStyle(txx[cnt],2,2); Text_SetBold(txx[cnt],1); Text_SetSize(txx[cnt],20); Text_SetColor(txx[cnt],Bear2); } } } bullChoCh = pos == 1 and pos[1] <= 0; bearChoCh = pos == -1 and pos[1] >= 0; if bullChoCh Then { tx = Text_New(sDate,sTime,L,"B"); Text_SetStyle(tx,2,0); Text_SetColor(tx,Lime); Text_SetBold(tx,1); Text_SetSize(tx,20); } if bearChoCh Then { tx = Text_New(sDate,sTime,L,"S"); Text_SetStyle(tx,2,1); Text_SetColor(tx,Red); Text_SetBold(tx,1); Text_SetSize(tx,20); } 즐거운 하루되세요