← К каталогу
Исходный код · ID 4385

MATRIX 6.2 OACILLATOR

𝐌𝐀𝐓𝐑𝐈𝐗_𝟔_𝟐_𝐎𝐀𝐂𝐈𝐋𝐋𝐀𝐓𝐎𝐑.pine
Вы автор или правообладатель?

Сообщите нам, если считаете, что материал размещён без разрешения.

Краткий обзор

О программе

MATRIX 6.2 OACILLATOR — индикатор для TradingView на Pine Script v5, отображаемый в отдельном окне ниже графика. Рассчитывает комплексный осциллятор на основе кластера фильтрованных скользящих средних и вспомогательных компонентов: потока денежных потоков, гипер-волны и сигнальной линии. Поддерживает два режима отображения — анализ направленности и оценку волатильности кластера.

Настройки программы

НастройкаОписание
source Источник данных — Выбирает ценовой ряд или другой источник для расчётов осциллятора.
mode Режим кластера — Переключает между режимами отображения: направленность фильтра или волатильность кластера.
filter Фильтр кластера — Выбирает тип фильтра для построения скользящих средних в кластере.
phase Фаза PhiSmoother — Позволяет тонко настраивать фазовый сдвиг фильтра PhiSmoother.
spacing Разброс кластера — Определяет расстояние между скользящими средними в кластере.
upper_trim Обрезка кластера верх — Уменьшает количество краткосрочных периодов кластера, снижая чувствительность.
lower_trim Обрезка кластера низ — Уменьшает количество долгосрочных периодов кластера, повышая чувствительность.
post_smooth_filt Постфильтр сглаживания — Выбирает фильтр для дополнительного сглаживания итогового балла кластера.
post_smooth_len Длина постсглаживания — Период постфильтра сглаживания итогового балла.
signal_filter Фильтр сигнальной линии — Выбирает фильтр для построения сигнальной линии.
signal_length Длина сигнала — Период расчёта сигнальной линии.
signal_color Цвет сигнала — Задаёт цвет отображения сигнальной линии.
upperLevel Верхний порог — Верхний пороговый уровень осциллятора.
lowerLevel Нижний порог — Нижний пороговый уровень осциллятора.
transition_easing Плавность перехода — Регулирует чувствительность цветовой градиентной заливки при переходах между зонами.
fill_bg Заливка фона — Включает или отключает цветовую заливку фона осциллятора.
fill_alpha Прозрачность заливки — Степень прозрачности цветовой заливки фона.
rising_bullish Цвет бычьего роста — Цвет отображения при бычьем направлении осциллятора.
rising_transition Цвет перехода вверх — Цвет переходной зоны при движении в бычью сторону.
falling_bearish Цвет медвежьего падения — Цвет отображения при медвежьем направлении осциллятора.
price Источник для SS_WMA — Выбирает источник данных для расчёта линии простого взвешенного среднего.
alpha Общая сглаженность — Период сглаживания для линии SS_WMA.
ShowSig Сигналы разворота — Включает отображение стрелок при смене направления линии SS_WMA.
SigMulti Множитель сигнала — Множитель для определения уровня сигнала разворота линии SS_WMA.
Получить полный код

Поиск по коду файла

indicator(" ̶ ̶⫍̶𝐌𝐀𝐓𝐑𝐈𝐗 𝟔.𝟐 𝐎𝐀𝐂𝐈𝐋𝐋𝐀𝐓𝐎𝐑⫎̶̶̶̶ ̶ ̶", overlay = false, max_boxes_count=500,max_bars_back=5000, max_labels_count =500, max_lines_count =500)

dwTL = "Length of the hyper wave"
smTL = "[SMA] Smooth signal with a simple moving average\n[EMA] Smooth signal with an exponential moving average\n[Input] Length of the smooth"
dvTL = "Sensibility of the real time divergence : less sensibility = more short term divs; more sensibility = more long term divs"
cmTL = "Show confluence meter at the side of the oscillator"
caTL = "Show confluence area at the bottom/top of the oscillator"
rfTL = "More factor will return in less signals but in a stronger way, less factor will return more signal with less strength"

simple bool   Smf   = input.bool  (true                     , "Money Flow Length        ", inline = "mfi ", group = "SMART MONEY FLOW")
simple int    mfL   = input.int   (10                       , "                         ", inline = "mfi ", group = "SMART MONEY FLOW", minval = 1, maxval = 55)
simple int    mfS   = input.int   (4                        , "Smooth                   ", inline = "mfx ", group = "SMART MONEY FLOW", minval = 2 , maxval = 10)
simple color  mfBL  = input.color (#22ab94                , "Money Flow Colors        ", inline = "mfiC", group = "SMART MONEY FLOW")
simple color  mfBR  = input.color (#f7525f                , "                         ", inline = "mfiC", group = "SMART MONEY FLOW")
simple color  cnBL  = input.color (#22ab94                 , "Confluence Colors        ", inline = "cf  ", group = "CONFLUENCE")
simple color  cnBR  = input.color (#f7525f                , "                         ", inline = "cf  ", group = "CONFLUENCE")
simple int    tCSS  = input.int   (00                      , "                          ", inline = "css ", group = "HYPER WAVE", minval =  00, maxval = 100)
simple bool   sCNB  = input.bool  (true                     , "Show Confluence Areas    ", inline = "zx  ", group = "CONFLUENCE", tooltip = caTL)
simple bool   dW    = input.bool  (false                    , "Main Length               ", inline = "1   ", group = "HYPER WAVE"                          , tooltip  = dwTL)
simple int    mL    = input.int   (7                       , "                          ", inline = "1   ", group = "HYPER WAVE", minval = 5, maxval = 4999)
simple string sT    = input.string("SMA"                   , "Signal                    ", inline = "s   ", group = "HYPER WAVE", options = ["SMA", "EMA"], tooltip  = smTL)
simple int    sL    = input.int   (3                       , "                          ", inline = "s   ", group = "HYPER WAVE", minval = 0, maxval = 4999)
simple color  fCSS  =  input.color (#00000000               , "Colors                    ", inline = "css ", group = "HYPER WAVE")
simple color  sCSS  = input.color (#00000000               , "                          ", inline = "css ", group = "HYPER WAVE")
string common = "Common Controls"
float  source = input.source(           close,                 "Source", group=common)
string   mode = input.string("Trend Strength", "Composite Cluster Mode", group=common, options=["Trend Strength", "Volatility"], tooltip="Trend Strength visualizes the directionality of the filter cluster. Volatility weights the score to the bandwidth of the cluster.")
string filter = input.string(   "PhiSmoother",         "Cluster Filter", group=common, options=["PhiSmoother", "EMA", "DEMA", "TEMA", "WMA", "SMA"], tooltip="Choose a filter to build the moving average cluster with.")
float   phase = input.float (             3.7,   "PhiSmoother Phase", group=common,  minval=0.0, step=0.1, tooltip="This allows for subtle adjustment (tweaking) of the phase/lag for PhiSmoother")
string cluster = "Cluster Options"
int    spacing = input.int(4,    "Cluster Dispersion", group=cluster,                 minval=1, maxval=10, tooltip="Choose the separation between the moving averages in the cluster.")
int upper_trim = input.int(0, "Cluster Trim - Upper:", group=cluster, inline="trim",  minval=0, maxval=31)
int lower_trim = input.int(0,              "Lower:", group=cluster, inline="trim",  minval=0, maxval=31, tooltip="The 'Upper' parameter modifies the shortest period of the moving averages, whereas 'Lower' parameter adjusts the longest period. Increasing the upper value reduces sensitivity, while increasing the lower value heightens sensitivity.")
string output           = "Composite Post Smoothing"
string post_smooth_filt = input.string("PhiSmoother", "PostSmooth - Filter:", group=output, inline="post", options=["PhiSmoother", "EMA", "DEMA", "TEMA", "WMA", "SMA"])
int    post_smooth_len  = input.int   (            1,            "Length:", group=output, inline="post",  minval=1, tooltip="Period of the cluster's post smoothing.")
string signal        = "Composite Signal Settings"
string signal_filter = input.string("PhiSmoother", "Signal - Filter:", group=signal, inline="signal", options=["PhiSmoother", "EMA", "DEMA", "TEMA", "WMA", "SMA"])
int    signal_length = input.int   (           20,        "Length:", group=signal, inline="signal",  minval=1, tooltip="Period of the momentum signal plot.")
color  signal_color  = input.color (    color.white,     "Filter Color", group=signal)
string threshold = "Threshold Levels"
float upperLevel = input.float( 75.00, "Levels - Upper:", group=threshold, inline="level", minval=  1.0, maxval=99.0, step=2.0)
float lowerLevel = input.float(-75.00,        "Lower:", group=threshold, inline="level", minval=-99.0, maxval=-1.0, step=2.0, tooltip="Fine-tune the thresholds to your liking")
string colors            = "Coloring Preferences"

float transition_easing  = input.float(     50.0,    "Transition Easing", group=colors, maxval=  100.0, minval=0.0, step=5.0, tooltip="Adjust the sensitivity to ranging conditions.")
bool  fill_bg            = input.bool (     false, "Fill Background", group=colors, inline= "fill")
int   fill_alpha         = input.int  (       85,                     "", group=colors, inline= "fill", minval=0, maxval=100)
color rising_bullish     = input.color(#1848cc,     "Bullish Color", group=colors, inline= "bull")
color rising_transition  = input.color(#00000000,     "Transition Color", group=colors, inline="range")
color falling_bearish    = input.color(#1848cc,     "Bearish Color", group=colors, inline= "bear")

type oL
    float sig
    float sgD
    color cO

type dP
    int   n
    float src
    float p

type smf
    float mfi
    color mfc
    float blMFI
    float brMFI

type cnf
    color   up
    color   dn
    float[] blT
    float[] brT

var oL  osc = oL.new (na, na, na    )
var dP  div = dP.new (na, na, na    )
var smf mf  = smf.new(na, na, na, na)
var cnf cf  = cnf.new(
       color.rgb(54, 58, 69, 60)
     , color.rgb(54, 58, 69, 60)
     , array.new<float>(1, na)
     , array.new<float>(1, na)
     )
mfT() =>
    switch
        mf.mfi > 0 =>
            if cf.brT.size() > 1
                cf.brT.pop()
            if cf.blT.size() > mfL
                cf.blT.pop()
            if mf.mfi > cf.blT.avg()
                cf.blT.unshift(mf.mfi)
            else
                cf.blT.unshift(mf.mfi[mfL] > 0 
                     ? mf.mfi[mfL] 
                     : mf.mfi
                     )

        mf.mfi < 0 =>
            if cf.blT.size() > 1
                cf.blT.pop()
            if cf.brT.size() > mfL
                cf.brT.pop()
            if mf.mfi < cf.blT.avg()
                cf.brT.unshift(mf.mfi)
            else
                cf.brT.unshift(mf.mfi[mfL] < 0 
                     ? mf.mfi[mfL] 
                     : mf.mfi
                     )
method st(simple string src, float osc, simple int len) =>
    float o = switch src
        "SMA" => ta.sma(osc, len)
        "EMA" => ta.ema(osc, len)

method css(color x, int inv) =>
    color out = inv == 1 
         ? color.new(x, tCSS) 
         : color.new(x, 0   )
method transp(color x, int t) =>
    color.new(x, t)
osc(simple int len, simple int smt) =>
    float hi = ta.highest(     len)
    float lo = ta.lowest (     len)
    float av = ta.sma    (hl2, len)

    osc.sig := ta.ema(ta.linreg((close - math.avg(hi, lo, av)) / (hi - lo) * 100, len, 0), sL)
    osc.sgD := sT.st(osc.sig, 2)
    osc.cO  := osc.sig > osc.sgD ? fCSS.css(1) : sCSS.css(1)

mfi() =>
    mf.mfi := ta.sma(ta.mfi(hl2, mfL) - 50, mfS)

    mf.mfc := mf.mfi > 0 
         ? mfBL 
         : mfBR

    bL = mf.mfi - 10
    bR = mf.mfi + 10

    mf.blMFI := mf.mfi > 0 and mf.mfi > cf.blT.avg() 
         ? bL 
         : 0
    mf.brMFI := mf.mfi < 0 and mf.mfi < cf.brT.avg() 
         ? bR 
         : 0
cDiv() =>
    mx = math.max(osc.sig, osc.sgD, osc.sig[1], osc.sgD[1])
    mn = math.min(osc.sig, osc.sgD, osc.sig[1], osc.sgD[1])

    mxid = mx == osc.sig[1] or mx == osc.sgD[1] ? 1 : 0
    mnid = mn == osc.sig[1] or mn == osc.sgD[1] ? 1 : 0
osc(mL, sL)
mfi()
mfT()

pO = plot(dW ? osc.sig : na, color = osc.cO.css(0)                        , title = "Hyper Wave 1")
iO = plot(dW ? osc.sgD : na, color = osc.cO.css(0), display = display.none, title = "Hyper Wave 2")
bL = plot(0                , color = color.black                        )
fill(pO, iO, color = dW ? osc.cO : na)

pmf = plot(Smf                         ? mf.mfi   : na, color = mf.mfc                    )
blT = plot(mf.blMFI > 0 and mf.mfi > 0 ? mf.blMFI : 0 , color = na, display = display.none)
brT = plot(mf.brMFI < 0 and mf.mfi < 0 ? mf.brMFI : 0 , color = na, display = display.none)
fill(bL, pmf, mf.mfc.transp(Smf ? 50 : 100))
fill(bL, blT, mf.mfc.transp(Smf ?  0 : 100))
fill(bL, brT, mf.mfc.transp(Smf ?  0 : 100))
cf.up := color.rgb(54, 58, 69, 60)
cf.dn := color.rgb(54, 58, 69, 60)
switch
    osc.sig > 0 and mf.mfi > 0 => cf.up := cnBL
    osc.sig < 0 and mf.mfi < 0 => cf.dn := cnBR
    => 
        cf.dn := cnBR.transp(60)
        cf.up := cnBL.transp(60)
tLv = plot( 55, color = sCNB ? cf.up : na)
bLv = plot(-55, color = sCNB ? cf.dn : na)
tfL = plot( 50, display = display.none)
dfL = plot(-50, display = display.none)
fill(tLv, tfL, color = sCNB ? cf.up : na)
fill(bLv, dfL, color = sCNB ? cf.dn : na)

PhiSmoother(series float source, simple int length, simple float phase=3.7)=>
    var array<float> coefs = na
    var int length_1 = length - 1
    var float      W = 0.0
    if na(coefs)
        coefs := array.new<float>()
        const float SQRT_PIx2  = math.sqrt(2.0 * math.pi)
        const float MULTIPLIER = -0.5 / 0.93
        var float     length_2 = length * 0.52353
        for int i=0 to length_1
            float alpha = (i + phase - length_2) * MULTIPLIER
            float  beta = 1.0 / (0.2316419 * math.abs(alpha) + 1.0)
            float   phi = (math.exp(math.pow(alpha, 2) * -0.5)
                         *-0.398942280) * beta *
                         ( 0.

Показано первые 50% кода (символов: 15673)

Открыть по тарифу

Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.

Разовая покупка файла

На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.

Чтобы оформить заказ, введите email и перейдите к оплате.

Стоимость полного кода
1 567,30₽ ≈ $19.16