Switch to English?
Yes
Переключитись на українську?
Так
Переключиться на русскую?
Да
Przełączyć się na polską?
Tak
Разместите свой проект бесплатно и начните получать предложения от фрилансеров-исполнителей уже спустя минуты после публикации!

Разработать индикатор на Pine 6 для tradingview.com

Translated3235 UAH

Отзыв заказчика о сотрудничестве с Віктором Н.

Качество
Профессионализм
Стоимость
Контактность
Сроки

Спасибо за хорошо выполненную работу.
Все четко и как планировали.
Коммуникация и реализация были на высоте.
Рекомендую как порядочного фрилансера.
Будем обращаться еще для реализации новых идей.

Отзыв фрилансера о сотрудничестве с Святославом Коломойцем

Оплата
Постановка задачи
Четкость требований
Контактность

Приятно было сотрудничать. Четкое ТЗ, постоянный онлайн и своевременная оплата. Рекомендую.

  1. 2485
     20  1

    Победившая ставка1 день3235 UAH

    Добрый день. Готов реализовать индикатор. Большой опыт написания индикаторов как для TV, так и кастомных на Python. Прямо сейчас занимаюсь идентичными задачами - могу показать в личных сообщениях или при демонстрации экрана во время звонка.

  2. 159  
    2 дня4000 UAH

    Я системный архитектор и мне интересно реализовать этот проект с вами.
    Моё предложение: я делаю всё строго по вашему ТЗ, но дополнительно внедряю свой алгоритм фильтрации.
    Для вас это не будет стоить ни копейки сверху, но на выходе система будет работать в 2-3 раза эффективнее любого стандартного решения.
    По сути, вы получаете то, что заказывали, плюс "подушку безопасности", которая отсекает ложные входы и сохраняет депозит. Выгоду почувствуете сразу на дистанции.

  3. 1 ставка скрыта
  1. 592    5  0
    30 дней20 000 UAH

    Добрый день! Пишу индикаторы, торговые эксперты на разных языках. Обращайтесь, обсудим детали.

  • Pavel Shtemenko
    17 января, 12:13 |

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

  • Руслан П.
    17 января, 15:41 |

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

  • Holovatyi Mykola
    18 января, 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 января, 8:41 |

    Уже готово:

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

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

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

Актуальные фриланс-проекты в категории Веб-программирование

Сервис авто-покупки/продажи ключей TF2 (Аналог tf2-keys.com)

Суть проекта: Автоматический обменник ключей TF2 (Mann Co. Supply Crate Key) на реальные деньги и обратно. Логика: Юзер платит рубли/крипту → бот кидает трейд в Steam. Или: юзер отдает ключи боту → сайт выплачивает деньги на карту/крипту. Основные модули: Авторизация: Вход…

Веб-программированиеРазработка ботов ∙ 9 минут назад ∙ 6 ставок

Аудит, обновление и оптимизация сайта Joomla 5.3.3

8000 UAH

Аудит, обновление и оптимизация сайта Joomla 5.3.3.Нужен специалист по Joomla для комплексной проверки, обновления и настройки сайта.Необходимо:Провести технический аудит сайта на Joomla.Проверить текущую версию CMS и при наличии более новой стабильной версии выполнить…

CMSВеб-программирование ∙ 3 часа 51 минута назад ∙ 18 ставок

Ищу программиста или вайб кодинг Автоматизация scraping данных

מחפש מתכנת או תומך בקידוד וייב. גירוד נתונים אוטומטי. https://drive.google.com/file/d/1Ogsx2iyahw79sleaDEUwMnSTPHhwF3Nu/view?usp=sharing

HTML и CSS версткаВеб-программирование ∙ 4 часа 55 минут назад ∙ 30 ставок

Лендинг сайт с анкетой

6094 UAH

Создание сайта с анкетой Задача 1. Заполнение анкеты 2. Получение результата в версии XLS / PDF Лаконичный дизайн

Веб-программирование ∙ 8 часов 41 секунда назад ∙ 120 ставок

Создание дизайна Радио ПРИВОЗ ФМ

7313 UAH

Создание уникального логотипа для РАДИО ПРИФОЗ ФМ В стиле как во вложении Дополнительно заглушка на сайт в стиле СКОРО ЗДЕСЬ БУДЕТ ЗВУЧАТЬ РАДИО ПРИВОЗ ФМ с проигрышем итересного трека

ЛоготипыВеб-программирование ∙ 8 часов 14 минут назад ∙ 42 ставки

Заказчик
Проект опубликован
4 месяца 25 дней назад
164 просмотра
Метки
  • tradingview
  • pine script
  • Indicator