Разработать индикатор на Pine 6 для tradingview.com
Оставляйте заявку только если у вас есть опыт разработки индикаторов и вы готовы обсудить проект в зуме
Необходимо разработать индикатор
Вот приблизительный пример того что мы хотим получить в результате
https://docs.google.com/document/d/1aJPD7W-6p5LP3NGwZsJcTr3AlZGPTYyvSbhhfEWzsLc/edit?tab=t.0
Более детальное ТЗ и правки предоставлю исполнителю
Отзыв заказчика о сотрудничестве с Віктором Н.
Разработать индикатор на Pine 6 для tradingview.comСпасибо за хорошо выполненную работу.
Все четко и как планировали.
Коммуникация и реализация были на высоте.
Рекомендую как порядочного фрилансера.
Будем обращаться еще для реализации новых идей.
Отзыв фрилансера о сотрудничестве с Святославом Коломойцем
Разработать индикатор на Pine 6 для tradingview.comПриятно было сотрудничать. Четкое ТЗ, постоянный онлайн и своевременная оплата. Рекомендую.
-
Добрый день. Готов реализовать индикатор. Большой опыт написания индикаторов как для TV, так и кастомных на Python. Прямо сейчас занимаюсь идентичными задачами - могу показать в личных сообщениях или при демонстрации экрана во время звонка.
-
159 Я системный архитектор и мне интересно реализовать этот проект с вами.
Моё предложение: я делаю всё строго по вашему ТЗ, но дополнительно внедряю свой алгоритм фильтрации.
Для вас это не будет стоить ни копейки сверху, но на выходе система будет работать в 2-3 раза эффективнее любого стандартного решения.
По сути, вы получаете то, что заказывали, плюс "подушку безопасности", которая отсекает ложные входы и сохраняет депозит. Выгоду почувствуете сразу на дистанции.
-
592 5 0 Добрый день! Пишу индикаторы, торговые эксперты на разных языках. Обращайтесь, обсудим детали.
-
Здравствуйте. С v5 дел имел не мало. Потому вопрос, а криптой вы сможете оплатить? У вас в коде кстати не рассмотрен вариант когда нет ни одной выбранной биржи
-
Скриптов открытого интереса вагон. Или что именно вы хотите отследить? Аномалию?
-
Пин ниже. Могу ускорить интеграцию в 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)
-
Уже готово:
Отдельный сервис с API вместо встраивания в код, корректную работу с временем (dt) при лагах и джиттере, правильное хранение истории данных без искажений, фильтрацию шума на входе, устойчивое управление выходом и явные метрики состояния системы — сложность, управляющий сигнал, стабильность и ошибку. Теперь это можно подключать к любому источнику данных и использовать в продакшене без переписывания логики.
Могу доп: (патентная разработка)
Авторизацию и лимиты, алерты и мониторинг, автонастройку параметров под режим, дополнительные метрики сложности, масштабирование и деплой под Docker/Kubernetes.
-
Актуальные фриланс-проекты в категории Веб-программирование
Сервис авто-покупки/продажи ключей TF2 (Аналог tf2-keys.com)Суть проекта: Автоматический обменник ключей TF2 (Mann Co. Supply Crate Key) на реальные деньги и обратно. Логика: Юзер платит рубли/крипту → бот кидает трейд в Steam. Или: юзер отдает ключи боту → сайт выплачивает деньги на карту/крипту. Основные модули: Авторизация: Вход… Веб-программирование, Разработка ботов ∙ 1 час 15 минут назад ∙ 15 ставок |
Аудит, обновление и оптимизация сайта Joomla 5.3.3
8000 UAH
Аудит, обновление и оптимизация сайта Joomla 5.3.3.Нужен специалист по Joomla для комплексной проверки, обновления и настройки сайта.Необходимо:Провести технический аудит сайта на Joomla.Проверить текущую версию CMS и при наличии более новой стабильной версии выполнить… CMS, Веб-программирование ∙ 4 часа 57 минут назад ∙ 21 ставка |
Ищу программиста или вайб кодинг Автоматизация scraping данныхמחפש מתכנת או תומך בקידוד וייב. גירוד נתונים אוטומטי. https://drive.google.com/file/d/1Ogsx2iyahw79sleaDEUwMnSTPHhwF3Nu/view?usp=sharing HTML и CSS верстка, Веб-программирование ∙ 6 часов 2 минуты назад ∙ 31 ставка |
Лендинг сайт с анкетой
6094 UAH
Создание сайта с анкетой Задача 1. Заполнение анкеты 2. Получение результата в версии XLS / PDF Лаконичный дизайн Веб-программирование ∙ 9 часов 6 минут назад ∙ 125 ставок |
Создание дизайна Радио ПРИВОЗ ФМ
7313 UAH
Создание уникального логотипа для РАДИО ПРИФОЗ ФМ В стиле как во вложении Дополнительно заглушка на сайт в стиле СКОРО ЗДЕСЬ БУДЕТ ЗВУЧАТЬ РАДИО ПРИВОЗ ФМ с проигрышем итересного трека Логотипы, Веб-программирование ∙ 9 часов 20 минут назад ∙ 42 ставки |