커뮤니티

수식 부탁드립니다.

프로필 이미지
고도산
2025-11-20 21:09:36
145
글번호 228283
답변완료

수식 변환 부탁드립니다. 미리 감사 드립니다.


//@version=6

indicator("Breakout Boxes [ChartPrime]", overlay = true, max_boxes_count = 500, max_labels_count = 500, calc_bars_count = 5000)


type pivot

    float val

    int index


type Box

    box body

    box sell

    box buy


var Highs    = pivot.new()

var Lows     = pivot.new()

var upperBox = Box.new()

var lowerBox = Box.new()


// --------------------------------------------------------------------------------------------------------------------}

// 📌 𝙐𝙎𝙀𝙍 𝙄𝙉𝙋𝙐𝙏𝙎

// --------------------------------------------------------------------------------------------------------------------{

pivotLen  = input.int(5, "Pivot Detection Length")

boxWidth1 = input.int(5, "Upper Box Width", inline = "up")/10, boxUpCol = input.color(#ce1c7b, "", inline = "up")

boxWidth2 = input.int(5, "Lower Box Width", inline = "lw")/10, boxDnCol = input.color(#1ed87e, "", inline = "lw")


// --------------------------------------------------------------------------------------------------------------------}

// 📌 𝙄𝙉𝘿𝙄𝘾𝘼𝙏𝙊𝙍 𝘾𝘼𝙇𝘾𝙐𝙇𝘼𝙏𝙄𝙊𝙉𝙎

// --------------------------------------------------------------------------------------------------------------------{


ph = ta.pivothigh(pivotLen, pivotLen)

pl = ta.pivotlow(pivotLen, pivotLen)


aTr  = ta.atr(200)

atr0 = aTr * 0.2

atr1 = aTr * boxWidth1

atr2 = aTr * boxWidth2


// Upper Box Detection

if not na(ph)

    if math.abs(Highs.val-ph) < atr0

        if upperBox.body.get_right() > bar_index-pivotLen

            upperBox.buy.set_right(upperBox.body.get_left())

            upperBox.buy.set_border_color(color(na))

            upperBox.sell.set_right(upperBox.body.get_left())

            upperBox.sell.set_border_color(color(na))


            upperBox.body.set_right(upperBox.body.get_left())

            upperBox.body.set_border_color(color(na))


        upperBox.body := box.new(Highs.index, Highs.val+atr1, bar_index, Highs.val, bgcolor = color(na), border_color = boxUpCol, text_halign = text.align_right, border_width = 2)


        upperBox.buy := box.new(Highs.index, math.avg(Highs.val+atr1, Highs.val), Highs.index, Highs.val, border_color = boxUpCol, bgcolor = color.new(boxUpCol, 90), text_halign = text.align_left)

        upperBox.sell := box.new(Highs.index, math.avg(Highs.val+atr1, Highs.val), Highs.index, Highs.val+atr1, border_color = boxUpCol, bgcolor = color.new(boxUpCol, 90), text_halign = text.align_left)


    Highs.val := ph

    Highs.index :=bar_index[pivotLen]


// Lower Box Detection

if not na(pl)

    if math.abs(Lows.val-pl) < atr0

        if lowerBox.body.get_right() > bar_index-pivotLen

            lowerBox.buy.set_right(lowerBox.body.get_left())

            lowerBox.buy.set_border_color(color(na))

            lowerBox.sell.set_right(lowerBox.body.get_left())

            lowerBox.sell.set_border_color(color(na))


            lowerBox.body.set_right(lowerBox.body.get_left())

            lowerBox.body.set_border_color(color(na))


        lowerBox.body := box.new(Lows.index, Lows.val, bar_index, Lows.val-atr2, bgcolor = color(na), border_color = boxDnCol, text_halign = text.align_right, border_width = 2)


        lowerBox.buy  := box.new(Lows.index, math.avg(Lows.val-atr2, Lows.val), Lows.index, Lows.val-atr2, border_color = boxDnCol, bgcolor = color.new(boxDnCol, 90), text_halign = text.align_left)

        lowerBox.sell := box.new(Lows.index, math.avg(Lows.val-atr2, Lows.val), Lows.index, Lows.val, border_color = boxDnCol, bgcolor = color.new(boxDnCol, 90), text_halign = text.align_left)


    Lows.val := pl

    Lows.index :=bar_index[pivotLen]


// --------------------------------------------------------------------------------------------------------------------}

// 📌 𝙑𝙄𝙎𝙐𝘼𝙇𝙄𝙕𝘼𝙏𝙄𝙊𝙉

// --------------------------------------------------------------------------------------------------------------------{

// Upeer Box

if not na(upperBox.body)

    Buy = 0.

    Sell = 0.

    upperBox.body.set_right(bar_index)

    for i = 0 to bar_index - (upperBox.body.get_left() - 5)

        if close[i] > open[i]

            Buy += volume[i]

        else

            Sell += volume[i]

    tot = Buy + Sell


    upperBox.body.set_text("Total " + str.tostring(tot, format.volume))


    size = int((upperBox.body.get_right() - upperBox.body.get_left()))

    mid = math.avg(upperBox.body.get_bottom(), upperBox.body.get_top())


    upperBox.buy.set_right(upperBox.body.get_left()+int(size*(Buy/tot)))

    upperBox.buy.set_text("+Volume " + str.tostring(Buy/tot*100, format.percent) )


    upperBox.sell.set_right(upperBox.body.get_left()+int(size*(Sell/tot)))

    upperBox.sell.set_text("-Volume " + str.tostring(Sell/tot*100, format.percent) )


// Lower Box

if not na(lowerBox.body)

    Buy = 0.

    Sell = 0.

    lowerBox.body.set_right(bar_index)

    for i = 0 to bar_index - (lowerBox.body.get_left() - 5)

        if close[i] > open[i]

            Buy += volume[i]

        else

            Sell += volume[i]


    tot = Buy + Sell


    lowerBox.body.set_text("Total " + str.tostring(tot, format.volume))

    size = int((lowerBox.body.get_right() - lowerBox.body.get_left()))

    mid = math.avg(lowerBox.body.get_bottom(), lowerBox.body.get_top())


    lowerBox.buy.set_right(lowerBox.body.get_left()+int(size*(Buy/tot)))

    lowerBox.buy.set_text("+Volume " + str.tostring(Buy/tot*100, format.percent) )


    lowerBox.sell.set_right(lowerBox.body.get_left()+int(size*(Sell/tot)))

    lowerBox.sell.set_text("-Volume " + str.tostring(Sell/tot*100, format.percent) )


// Breakout signals

if barstate.isconfirmed

    if ta.crossover(close, upperBox.body.get_top())

        upperBox := Box.new(na, na, na)

        label.new(bar_index, low-aTr, "⯁\nBreakUp", textcolor = boxUpCol, style = label.style_label_up, color = color.new(boxUpCol, 80))


    if ta.crossunder(close, lowerBox.body.get_bottom())

        lowerBox := Box.new(na, na, na)

        label.new(bar_index, high+aTr, "BreakDn\n⯁", textcolor = boxDnCol, style = label.style_label_down, color = color.new(boxDnCol, 80))

// --------------------------------------------------------------------------------------------------------------------}



지표
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2025-11-21 14:55:43

안녕하세요 예스스탁입니다. 올려주신 내용은 작성해 보는데 시간이 많이 요구됩니다. 업무상 일정이상 시간이 요구되는 내용은 작성해 드리기 어렵습니다. 도움을 드리지 못해 죄송합니다. 즐거운 하루되세요