Switch to English?
Yes
Переключитись на українську?
Так
Переключиться на русскую?
Да
Przełączyć się na polską?
Tak
Post your project for free and start receiving proposals from freelancers within minutes after publication!

Develop an indicator in Pine 6 for tradingview.com

Translated72 USD

Client's review of cooperation with Viktor N.

Quality
Professionalism
Cost
Contactability
Deadlines

Thank you for the well-done work. Everything is clear and as planned. Communication and implementation were excellent. I recommend you as a decent freelancer. We will reach out again for the realization of new ideas.

Freelancer's review of cooperation with Svyatoslav Kolomoyets

Payment
Task setting
Clarity of requirements
Contactability

It was a pleasure to collaborate. Clear terms of reference, constant online communication, and timely payment. I recommend.

  1. 2509
     21  1

    Winning proposal1 day72 USD

    Good day. I am ready to implement the indicator.
    I have extensive experience in writing indicators for both TV and custom ones in Python.
    Right now, I am working on similar tasks - I can show them in private messages or during a screen demonstration in a call.

  2. 159  
    2 days89 USD

    I am a system architect and I am interested in implementing this project with you. My proposal: I will do everything strictly according to your technical specifications, but additionally I will implement my filtering algorithm. For you, this will not cost a penny extra, but in the end, the system will work 2-3 times more efficiently than any standard solution. Essentially, you get what you ordered, plus a "safety cushion" that filters out false inputs and preserves the deposit. You will feel the benefit immediately over time.

  3. 1 proposal concealed
  1. 592    5  0
    30 days445 USD

    Good day! I write indicators, trading experts in different languages. Contact me, we will discuss the details.

  • Pavel Shtemenko
    17 January, 12:13 |

    Здравствуйте. С v5 дел имел не мало. Потому вопрос, а криптой вы сможете оплатить? У вас в коде кстати не рассмотрен вариант когда нет ни одной выбранной биржи

  • Ruslan P.
    17 January, 15:41 |

    Скриптов открытого интереса вагон. Или что именно вы хотите отследить? Аномалию?

  • Holovatyi Mykola
    18 January, 8:22 |

    Пин ниже. Могу ускорить интеграцию в 3–5 раз, + устойчивость системы до х2 за счёт стандартизированного API и контроля режима. 


    //@version=6

    indicator("AIF-ilter — Guard Controller PRO v6", overlay=false, max_labels_count=500)


    // ======================================================

    // Add-on: AUTO profile (switches Conservative/Balanced/Aggressive by volatility)

    // - Volatility proxy: ATR% + |Z|

    // - Auto picks profile each bar (and shows it in banner/table)

    // ======================================================


    // ===================== INPUTS ======================

    grpMode  = "Mode"

    grpCore  = "Core"

    grpCtrl  = "Controller"

    grpGuard = "Guard / Kill-switch"

    grpAuto  = "Auto Profile"

    grpViz   = "Visual"


    mode = input.string("Guard", "Mode", options=["Basic","Pro","Guard"], group=grpMode)


    profileSel = input.string("Auto", "Profile", options=["Auto","Conservative","Balanced","Aggressive"], group=grpMode,

         tooltip="Auto: профиль выбирается по волатильности (ATR% + |Z|)")


    src      = input.source(close, "Source", group=grpCore)

    lenMA    = input.int(55, "Trend MA", minval=1, group=grpCore)


    lenMom   = input.int(10, "Momentum (ROC)", minval=1, group=grpCtrl)

    lenZ     = input.int(80, "Stability window", minval=20, group=grpCtrl)

    lenATR   = input.int(14, "ATR length", minval=1, group=grpCtrl)


    baseThr  = input.float(65.0, "Base threshold", minval=1, maxval=99, step=0.5, group=grpCtrl)

    adaptive = input.bool(true, "Adaptive threshold", group=grpCtrl)

    biasLong = input.float(0.0, "Long bias", step=0.5, group=grpCtrl)

    biasShort= input.float(0.0, "Short bias", step=0.5, group=grpCtrl)


    // Auto profile cutoffs (loose by default)

    atrLow   = input.float(0.8, "ATR% low", step=0.1, group=grpAuto, tooltip="Ниже — можно Aggressive")

    atrHigh  = input.float(1.8, "ATR% high", step=0.1, group=grpAuto, tooltip="Выше — Conservative")

    zHigh    = input.float(2.5, "|Z| high", step=0.1, group=grpAuto, tooltip="Если |Z| выше — Conservative")


    useGuard = input.bool(true, "Enable guard", group=grpGuard)

    gapPctIn = input.float(1.2, "Gap block (%)", step=0.1, group=grpGuard)

    spikeZIn = input.float(4.0, "Spike block (Z)", step=0.5, group=grpGuard)

    freezeIn = input.int(3, "Freeze bars after guard", minval=0, group=grpGuard)


    showBands  = input.bool(true, "Show thresholds", group=grpViz)

    showMarks  = input.bool(true, "Show marks", group=grpViz)

    showTable  = input.bool(true, "Show table", group=grpViz)

    showBanner = input.bool(true, "Show status banner", group=grpViz)

    heatmap    = input.bool(true, "Heatmap background", group=grpViz)

    heatStr    = input.int(85, "Heat intensity (0..100)", minval=0, maxval=100, group=grpViz)


    // ===================== HELPERS ======================

    clamp(x, lo, hi) => math.max(lo, math.min(hi, x))

    pct(x) => str.tostring(x, "#.00") + "%"


    // ===================== MODE FLAGS ======================

    isBasic = mode == "Basic"

    isGuard = mode == "Guard"

    guardEnabled = (isGuard and useGuard)


    // ===================== CORE =========================

    c  = src

    ma = ta.ema(c, lenMA)

    trendUp = c > ma

    trendDn = c < ma


    // ===================== VOL METRICS (for AUTO) =========

    atr    = ta.atr(lenATR)

    atrPct = c != 0 ? (atr / c) * 100.0 : 0.0


    // Z-score of 1-bar returns (stability)

    ret1 = nz(c[1]) != 0 ? (c - c[1]) / c[1] * 100.0 : 0.0

    mu   = ta.sma(ret1, lenZ)

    sd   = ta.stdev(ret1, lenZ)

    z    = sd != 0 ? (ret1 - mu) / sd : 0.0

    absZ = math.abs(z)


    // ===================== PICK PROFILE ===================

    // Auto logic:

    // - If very stable (ATR% low AND |Z| low): Aggressive

    // - If very unstable (ATR% high OR |Z| high): Conservative

    // - Else: Balanced

    string prof =

         profileSel != "Auto" ? profileSel :

         (atrPct <= atrLow and absZ <= (zHigh * 0.6)) ? "Aggressive" :

         (atrPct >= atrHigh or absZ >= zHigh) ? "Conservative" :

         "Balanced"


    // ===================== PROFILE PARAMS =================

    // Threshold, gains, guard sensitivity

    thrAdj =

         prof == "Conservative" ? 8.0 :

         prof == "Aggressive" ? -6.0 : 0.0


    momGain =

         prof == "Conservative" ? 5.0 :

         prof == "Aggressive" ? 7.5 : 6.0


    stabPenalty =

         prof == "Conservative" ? 14.0 :

         prof == "Aggressive" ? 9.0 : 12.0


    gapPct =

         prof == "Conservative" ? gapPctIn * 0.85 :

         prof == "Aggressive" ? gapPctIn * 1.25 : gapPctIn


    spikeZ =

         prof == "Conservative" ? spikeZIn * 0.85 :

         prof == "Aggressive" ? spikeZIn * 1.25 : spikeZIn


    freezeN =

         prof == "Conservative" ? freezeIn + 2 :

         prof == "Aggressive" ? math.max(freezeIn - 1, 0) : freezeIn


    // ===================== CONTROLLER ======================

    // Momentum

    mom = ta.roc(c, lenMom)

    scoreMom = clamp(50.0 + mom * momGain, 0.0, 100.0)


    // Stability score

    scoreStab = clamp(100.0 - absZ * stabPenalty, 0.0, 100.0)


    // Trend score

    scoreTrend = trendUp ? 100.0 : trendDn ? 0.0 : 50.0


    // Confidence fusion

    confBase = 0.45*scoreTrend + 0.35*scoreMom + 0.20*scoreStab

    confLong  = clamp(confBase + biasLong, 0.0, 100.0)

    confShort = clamp((100.0 - confBase) + biasShort, 0.0, 100.0)


    // Threshold (optional adaptive by |Z|)

    thrBase = clamp(baseThr + thrAdj, 50.0, 95.0)

    thr = adaptive ? clamp(thrBase + absZ * 3.0, 50.0, 95.0) : thrBase

    upper = thr

    lower = 100.0 - thr


    // ===================== GUARD / KILL SWITCH ==========

    gap = nz(c[1]) != 0 ? math.abs((open - c[1]) / c[1]) * 100.0 : 0.0

    gapBad   = gap > gapPct

    spikeBad = absZ > spikeZ

    naBad    = na(c) or na(open)


    guardHit = guardEnabled and (gapBad or spikeBad or naBad)


    var int freeze = 0

    if barstate.isnew

        freeze := math.max(freeze - 1, 0)

    if guardHit

        freeze := freezeN


    guardOK = (not guardEnabled) or (freeze == 0 and not guardHit)


    guardReason =

         not guardEnabled ? "OFF" :

         naBad ? "NA" :

         gapBad ? "GAP" :

         spikeBad ? "SPIKE" :

         guardHit ? "BLOCK" :

         (freeze > 0 ? "FREEZE" : "OK")


    // ===================== SIGNALS =======================

    longOk  = (not isBasic) and guardOK and trendUp and confLong >= upper

    shortOk = (not isBasic) and guardOK and trendDn and confShort >= upper


    longEdge  = longOk  and not longOk[1]

    shortEdge = shortOk and not shortOk[1]


    // ===================== HEATMAP =======================

    heatAlpha = clamp(100 - heatStr, 0, 100)

    isHotLong  = confLong  >= upper and trendUp

    isHotShort = confShort >= upper and trendDn


    bg =

        not heatmap ? na :

        not guardOK ? color.new(color.orange, 85) :

        isHotLong ? color.new(color.lime, heatAlpha) :

        isHotShort ? color.new(color.red, heatAlpha) :

        color.new(color.gray, 95)


    bgcolor(bg)


    // ===================== PLOTS =========================

    hline(50, "Mid", color=color.new(color.gray, 70))

    plot(confBase, "Confidence", linewidth=2)


    plot(showBands ? upper : na, "Thr (Long)",  color=color.new(color.lime, 0))

    plot(showBands ? lower : na, "Thr (Short)", color=color.new(color.red, 0))


    plotshape(showMarks and (not isBasic) and longEdge,  title="LONG",  style=shape.triangleup,   location=location.bottom, text="L", color=color.new(color.lime, 0), size=size.tiny)

    plotshape(showMarks and (not isBasic) and shortEdge, title="SHORT", style=shape.triangledown, location=location.top,    text="S", color=color.new(color.red, 0),  size=size.tiny)

    plotshape(showMarks and guardEnabled and guardHit,   title="GUARD", style=shape.circle,       location=location.top,    text="G", color=color.new(color.orange, 0), size=size.tiny)


    // Alerts

    alertcondition(longEdge,  title="AIF-ilter LONG",  message="AIF-ilter LONG on {{ticker}} (profile=" + prof + ")")

    alertcondition(shortEdge, title="AIF-ilter SHORT", message="AIF-ilter SHORT on {{ticker}} (profile=" + prof + ")")

    alertcondition(guardHit,  title="AIF-ilter GUARD", message="AIF-ilter GUARD (reason=" + guardReason + ", profile=" + prof + ") on {{ticker}}")


    // ===================== STATUS BANNER ==================

    var label banner = na

    if showBanner and barstate.islast

        label.delete(banner)


        status =

             guardEnabled and not guardOK ? "GUARD: " + guardReason :

             longOk ? "READY: LONG" :

             shortOk ? "READY: SHORT" :

             "STANDBY"


        statusColor =

             guardEnabled and not guardOK ? color.new(color.orange, 0) :

             longOk ? color.new(color.lime, 0) :

             shortOk ? color.new(color.red, 0) :

             color.new(color.silver, 0)


        banner := label.new(bar_index, confBase,

            "AIF-ilter PRO  •  " + mode + "  •  " + prof + "  •  " + status,

            style=label.style_label_left,

            textcolor=color.black,

            color=statusColor)


    // ===================== INFO TABLE ======================

    var table t = table.new(position.top_right, 2, 12, frame_width=2, border_width=1,

        bgcolor=color.new(color.black, 88))


    if showTable and barstate.islast

        table.cell(t, 0, 0, "Metric", text_color=color.white, bgcolor=color.new(color.blue, 70))

        table.cell(t, 1, 0, "Value",  text_color=color.white, bgcolor=color.new(color.blue, 70))


        table.cell(t, 0, 1, "Mode")

        table.cell(t, 1, 1, mode)


        table.cell(t, 0, 2, "Profile")

        table.cell(t, 1, 2, prof, text_color = prof == "Conservative" ? color.orange : prof == "Aggressive" ? color.lime : color.white)


        table.cell(t, 0, 3, "Confidence")

        table.cell(t, 1, 3, str.tostring(confBase, "#.0"))


        table.cell(t, 0, 4, "Threshold")

        table.cell(t, 1, 4, str.tostring(upper, "#.0") + (adaptive ? " (A)" : ""))


        table.cell(t, 0, 5, "Trend")

        tr = trendUp ? "UP" : trendDn ? "DOWN" : "FLAT"

        table.cell(t, 1, 5, tr, text_color = trendUp ? color.lime : trendDn ? color.red : color.silver)


        table.cell(t, 0, 6, "ATR%")

        table.cell(t, 1, 6, pct(atrPct), text_color = atrPct >= atrHigh ? color.orange : atrPct <= atrLow ? color.lime : color.white)


        table.cell(t, 0, 7, "ROC(" + str.tostring(lenMom) + ")")

        table.cell(t, 1, 7, pct(mom), text_color = mom >= 0 ? color.lime : color.red)


        table.cell(t, 0, 8, "|Z|")

        table.cell(t, 1, 8, str.tostring(absZ, "#.00"), text_color = absZ >= zHigh ? color.orange : color.white)


        table.cell(t, 0, 9, "Gap %")

        table.cell(t, 1, 9, pct(gap), text_color = gapBad ? color.orange : color.white)


        table.cell(t, 0, 10, "Guard")

        table.cell(t, 1, 10, guardReason,

            text_color = not guardEnabled ? color.gray : guardReason == "OK" ? color.lime : color.orange)


        sig = longEdge ? "LONG" : shortEdge ? "SHORT" : "NONE"

        table.cell(t, 0, 11, "Signal")

        table.cell(t, 1, 11, sig, text_color = longEdge ? color.lime : shortEdge ? color.red : color.gray)


  • Holovatyi Mykola
    18 January, 8:41 |

    Уже готово:

    Отдельный сервис с API вместо встраивания в код, корректную работу с временем (dt) при лагах и джиттере, правильное хранение истории данных без искажений, фильтрацию шума на входе, устойчивое управление выходом и явные метрики состояния системы — сложность, управляющий сигнал, стабильность и ошибку. Теперь это можно подключать к любому источнику данных и использовать в продакшене без переписывания логики.

    Могу доп: (патентная разработка)

    Авторизацию и лимиты, алерты и мониторинг, автонастройку параметров под режим, дополнительные метрики сложности, масштабирование и деплой под Docker/Kubernetes.

Current freelance projects in the category Cryptocurrency & Blockchain

Need Smart Contract Engineer/Mentor

8000 USD

I want to find the Smart Contract Engineer/Mentor who has rich experience in Solidity smart contract development.

Cryptocurrency & BlockchainEngineering ∙ 6 days 9 hours back ∙ 11 proposals

Client
Project published
4 months 28 days back
164 views
Tags
  • tradingview
  • pine script
  • Indicator