Opracować wskaźnik w Pine 6 dla tradingview.com
Składaj wniosek tylko jeśli masz doświadczenie w tworzeniu wskaźników i jesteś gotów omówić projekt na Zoomie
Konieczne jest opracowanie wskaźnika
Oto przybliżony przykład tego, co chcemy uzyskać w rezultacie
https://docs.google.com/document/d/1aJPD7W-6p5LP3NGwZsJcTr3AlZGPTYyvSbhhfEWzsLc/edit?tab=t.0
Bardziej szczegółowe wymagania i poprawki przekażę wykonawcy
Opinia zleceniodawcy o współpracy z Viktor N.
Opracować wskaźnik w Pine 6 dla tradingview.comDziękuję za dobrze wykonaną pracę.
Wszystko jasno i zgodnie z planem.
Komunikacja i realizacja były na wysokim poziomie.
Polecam jako rzetelnego freelancera.
Będziemy się jeszcze zwracać w celu realizacji nowych pomysłów.
Opinia freelancera o współpracy z Svyatoslav Kolomoyets
Opracować wskaźnik w Pine 6 dla tradingview.comMiło było współpracować. Jasne zlecenie, stały kontakt online i terminowa płatność. Polecam.
-
Dzień dobry. Jestem gotowy do realizacji wskaźnika. Mam duże doświadczenie w pisaniu wskaźników zarówno dla TV, jak i niestandardowych w Pythonie. W tej chwili zajmuję się identycznymi zadaniami - mogę pokazać w wiadomościach prywatnych lub podczas demonstracji ekranu podczas rozmowy.
-
159 Jestem architektem systemów i jestem zainteresowany realizacją tego projektu z wami. Moja propozycja: robię wszystko ściśle według waszego TŻ, ale dodatkowo wdrażam swój algorytm filtracji. Dla was to nie będzie kosztować ani grosza więcej, ale na wyjściu system będzie działał 2-3 razy efektywniej niż jakiekolwiek standardowe rozwiązanie. W zasadzie otrzymujecie to, co zamówiliście, plus "poduszkę bezpieczeństwa", która odcina fałszywe wejścia i chroni depozyt. Korzyść poczujecie od razu na dystansie.
-
592 5 0 Dzień dobry! Piszę wskaźniki, ekspertów handlowych w różnych językach. Proszę o kontakt, omówimy szczegóły.
-
Здравствуйте. С 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.
-
Aktualne zlecenia dla freelancerów w kategorii Kryptowaluty i blockchain
Potrzebny inżynier/mistrz kontraktów inteligentnych
29 484 PLN
Chcę znaleźć inżyniera/mentora kontraktów inteligentnych, który ma bogate doświadczenie w rozwoju kontraktów inteligentnych w Solidity. Kryptowaluty i blockchain, Doradztwo inżynieryjne ∙ 4 dni 11 godzin temu ∙ 11 ofert |