Develop an indicator in Pine 6 for tradingview.com
Leave an application only if you have experience in developing indicators and are ready to discuss the project on Zoom
It is necessary to develop an indicator
Here is a rough example of what we want to achieve as a result
https://docs.google.com/document/d/1aJPD7W-6p5LP3NGwZsJcTr3AlZGPTYyvSbhhfEWzsLc/edit?tab=t.0
More detailed specifications and edits will be provided to the performer
Client's review of cooperation with Viktor N.
Develop an indicator in Pine 6 for tradingview.comThank 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
Develop an indicator in Pine 6 for tradingview.comIt was a pleasure to collaborate. Clear terms of reference, constant online communication, and timely payment. I recommend.
-
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.
-
159 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.
-
592 5 0 Good day! I write indicators, trading experts in different languages. Contact me, we will discuss the details.
-
Здравствуйте. С 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.
-
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 & Blockchain, Engineering ∙ 6 days 9 hours back ∙ 11 proposals |