커뮤니티
수식 부탁드립니다
// ─────────────────────────────
// 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
예스스탁 예스스탁 답변
2026-02-25 19:03:50