Multi Oscillator Adaptive Kernel

Viewing 3 posts - 1 through 3 (of 3 total)
  • Author
    Posts
  • #245866 quote
    StenozarStenozar
    Participant
    Master

    Buon pomeriggio, è possibile tradurre questo indicatore?

    // @version=6
    indicator(“Multi-Oscillator Adaptive Kernel | Opus”, overlay = false, max_labels_count = 500)
    // Input Groups
    GRP1 = “Display Options”
    GRP2 = “Oscillator Selection”
    GRP3 = “Kernel Settings”
    // Indicator Sources
    src = input.source(close, “Source”, group = GRP2)
    // Oscillator Toggles
    use_RSI = input.bool(true, “RSI”, inline = “RSI”, group = GRP2)
    use_STOCH = input.bool(true, “Stochastic”, inline = “STOCH”, group = GRP2)
    use_MFI = input.bool(true, “MFI”, inline = “MFI”, group = GRP2)
    use_CCI = input.bool(false, “CCI”, inline = “CCI”, group = GRP2)
    // Oscillator Lengths
    len_RSI = input.int(14, “Length”, inline = “RSI”, group = GRP2)
    len_STOCH = input.int(14, “Length”, inline = “STOCH”, group = GRP2)
    len_MFI = input.int(14, “Length”, inline = “MFI”, group = GRP2)
    len_CCI = input.int(20, “Length”, inline = “CCI”, group = GRP2)
    // Kernel Settings
    kernel_type = input.string(“Exponential”, “Kernel Type”, options = [“Exponential”, “Linear”, “Gaussian”], group = GRP3)
    kernel_len = input.int(25, “Kernel Length”, group = GRP3)
    sensitivity = input.float(1.5, “Sensitivity”, minval = 0.1, maxval = 5.0, step = 0.1, group = GRP3)
    // Display Settings
    bar_coloring = input.bool(true, “Color Bars”, group = GRP1)
    
    // Updated colors to match Opus series
    bull_color = #00F1FF // Cyan
    bear_color = #FF019A // Magenta
    
    // Normalized Oscillators
    rsi_norm(src, len) =>
    r = ta.rsi(src, len)
    (r – 50) * 2
    stoch_norm(src, len) =>
    k = ta.sma(ta.stoch(src, high, low, len), 3)
    (k – 50) * 2
    mfi_norm(len) =>
    m = ta.mfi(hlc3, len)
    (m – 50) * 2
    cci_norm(src, len) =>
    c = ta.cci(src, len)
    c / 4
    // Calculate active oscillators
    var active_count = 0
    active_count := 0
    var rsi_val = 0.0
    var stoch_val = 0.0
    var mfi_val = 0.0
    var cci_val = 0.0
    if use_RSI
    rsi_val := rsi_norm(src, len_RSI)
    active_count := active_count + 1
    if use_STOCH
    stoch_val := stoch_norm(src, len_STOCH)
    active_count := active_count + 1
    if use_MFI
    mfi_val := mfi_norm(len_MFI)
    active_count := active_count + 1
    
    if use_CCI
    cci_val := cci_norm(src, len_CCI)
    active_count := active_count + 1
    // Combine indicators
    raw_value = (rsi_val + stoch_val + mfi_val + cci_val) / math.max(active_count, 1)
    // Kernel weighting function
    kernel_weight(i, len, type) =>
    float result = 0.0
    if type == “Exponential”
    result := math.exp(-5.0 * i / len)
    else if type == “Linear”
    result := 1.0 – (i / len)
    else if type == “Gaussian”
    result := math.exp(-0.5 * math.pow(3.0 * i / len, 2))
    result
    // Apply kernel smoothing
    smooth_value(src, len, type) =>
    float sum = 0.0
    float weight_sum = 0.0
    
    for i = 0 to math.min(len – 1, bar_index)
    w = kernel_weight(i, len, type)
    sum := sum + src[i] * w
    weight_sum := weight_sum + w
    
    sum / weight_sum
    // Calculate smoothed values
    signal = smooth_value(raw_value, kernel_len, kernel_type)
    signal2 = smooth_value(signal, kernel_len * 2, kernel_type)
    // Define trend conditions
    trend_up = signal2 > 0
    trend_down = signal2 < 0
    
    // Draw zero line
    var zeroLine = plot(0, “Zero Line”, color.new(color.gray, 50), 1)
    
    // Plot main signal line with reduced opacity
    var signalPlot = plot(signal, “Signal Line”, color.new(signal > 0 ? bull_color : bear_color, 70), 1)
    
    // REDUCED NUMBER OF LAYERS FOR GRADIENT – Using 10 layers instead of 20 for each side
    
    // Define positive layers with decreasing opacity as we approach zero
    var pos_layer1 = plot(signal2 > 0 ? signal2 : 0, “P1”, bull_color, 2)
    var pos_layer2 = plot(signal2 > 0 ? signal2 * 0.9 : 0, “P2”, color.new(bull_color, 10), 1)
    var pos_layer3 = plot(signal2 > 0 ? signal2 * 0.8 : 0, “P3”, color.new(bull_color, 20), 1)
    var pos_layer4 = plot(signal2 > 0 ? signal2 * 0.7 : 0, “P4”, color.new(bull_color, 30), 1)
    var pos_layer5 = plot(signal2 > 0 ? signal2 * 0.6 : 0, “P5”, color.new(bull_color, 40), 1)
    var pos_layer6 = plot(signal2 > 0 ? signal2 * 0.5 : 0, “P6”, color.new(bull_color, 50), 1)
    var pos_layer7 = plot(signal2 > 0 ? signal2 * 0.4 : 0, “P7”, color.new(bull_color, 60), 1)
    var pos_layer8 = plot(signal2 > 0 ? signal2 * 0.3 : 0, “P8”, color.new(bull_color, 70), 1)
    var pos_layer9 = plot(signal2 > 0 ? signal2 * 0.2 : 0, “P9”, color.new(bull_color, 80), 1)
    var pos_layer10 = plot(signal2 > 0 ? signal2 * 0.1 : 0, “P10”, color.new(bull_color, 90), 1)
    
    // Define negative layers with decreasing opacity as we approach zero
    var neg_layer1 = plot(signal2 < 0 ? signal2 : 0, “N1”, bear_color, 2)
    var neg_layer2 = plot(signal2 < 0 ? signal2 * 0.9 : 0, “N2”, color.new(bear_color, 10), 1)
    var neg_layer3 = plot(signal2 < 0 ? signal2 * 0.8 : 0, “N3”, color.new(bear_color, 20), 1)
    var neg_layer4 = plot(signal2 < 0 ? signal2 * 0.7 : 0, “N4”, color.new(bear_color, 30), 1)
    var neg_layer5 = plot(signal2 < 0 ? signal2 * 0.6 : 0, “N5”, color.new(bear_color, 40), 1)
    var neg_layer6 = plot(signal2 < 0 ? signal2 * 0.5 : 0, “N6”, color.new(bear_color, 50), 1)
    var neg_layer7 = plot(signal2 < 0 ? signal2 * 0.4 : 0, “N7”, color.new(bear_color, 60), 1)
    var neg_layer8 = plot(signal2 < 0 ? signal2 * 0.3 : 0, “N8”, color.new(bear_color, 70), 1)
    var neg_layer9 = plot(signal2 < 0 ? signal2 * 0.2 : 0, “N9”, color.new(bear_color, 80), 1)
    var neg_layer10 = plot(signal2 < 0 ? signal2 * 0.1 : 0, “N10”, color.new(bear_color, 90), 1)
    
    // Fill all the positive gradient layers
    fill(pos_layer1, pos_layer2, signal2 > 0 ? color.new(bull_color, 5) : na)
    fill(pos_layer2, pos_layer3, signal2 > 0 ? color.new(bull_color, 15) : na)
    fill(pos_layer3, pos_layer4, signal2 > 0 ? color.new(bull_color, 25) : na)
    fill(pos_layer4, pos_layer5, signal2 > 0 ? color.new(bull_color, 35) : na)
    fill(pos_layer5, pos_layer6, signal2 > 0 ? color.new(bull_color, 45) : na)
    fill(pos_layer6, pos_layer7, signal2 > 0 ? color.new(bull_color, 55) : na)
    fill(pos_layer7, pos_layer8, signal2 > 0 ? color.new(bull_color, 65) : na)
    fill(pos_layer8, pos_layer9, signal2 > 0 ? color.new(bull_color, 75) : na)
    fill(pos_layer9, pos_layer10, signal2 > 0 ? color.new(bull_color, 85) : na)
    fill(pos_layer10, zeroLine, signal2 > 0 ? color.new(bull_color, 95) : na)
    
    // Fill all the negative gradient layers
    fill(neg_layer1, neg_layer2, signal2 < 0 ? color.new(bear_color, 5) : na)
    fill(neg_layer2, neg_layer3, signal2 < 0 ? color.new(bear_color, 15) : na)
    fill(neg_layer3, neg_layer4, signal2 < 0 ? color.new(bear_color, 25) : na)
    fill(neg_layer4, neg_layer5, signal2 < 0 ? color.new(bear_color, 35) : na)
    fill(neg_layer5, neg_layer6, signal2 < 0 ? color.new(bear_color, 45) : na)
    fill(neg_layer6, neg_layer7, signal2 < 0 ? color.new(bear_color, 55) : na)
    fill(neg_layer7, neg_layer8, signal2 < 0 ? color.new(bear_color, 65) : na)
    fill(neg_layer8, neg_layer9, signal2 < 0 ? color.new(bear_color, 75) : na)
    fill(neg_layer9, neg_layer10, signal2 < 0 ? color.new(bear_color, 85) : na)
    fill(neg_layer10, zeroLine, signal2 < 0 ? color.new(bear_color, 95) : na)
    
    // Bar coloring
    barcolor(bar_coloring ? (signal2 > 0 ? bull_color : bear_color) : na)
    #246055 quote
    Iván GonzálezIván González
    Moderator
    Legend

    Ecco qui:

    //------------------------------------------------//
    //PRC_MultiOscillator Adaptative Kernel
    //version = 0
    //18.04.2025
    //Iván González @ www.prorealcode.com
    //Sharing ProRealTime knowledge
    //------------------------------------------------//
    // inputs
    //------------------------------------------------//
    src=close
    // Oscillator Toggles
    usersi=1
    usestoch=1
    usemfi=1
    usecci=0
    // Oscillator Lengths
    lenrsi=14
    lenstoch=14
    lenmfi=14
    lencci=20
    // Kernel Settings
    kerneltype = 1// options=[1"Exponential", 2"Linear", 3"Gaussian"]
    kernellen = 25//"Kernel Length"
    //------------------------------------------------//
    // Oscillators
    //------------------------------------------------//
    myrsi=rsi[lenrsi](src)
    k=Stochastic[lenSTOCH,3](src)
    m=MoneyFlowIndex[lenMFI]
    c=cci[lencci](src)
    //------------------------------------------------//
    // Calculate active oscillators and Normalize
    //------------------------------------------------//
    activecount=0
    // RSI
    if useRSI then
    rsival=(myrsi-50)*2
    activecount=activecount+1
    endif
    // Stochastic
    if useSTOCH then
    stochval=(k-50)*2
    activecount=activecount+1
    endif
    // Money flow index
    if useMFI then
    mfival=(m-50)*2
    activecount=activecount+1
    endif
    // CCI
    if useCCI then
    ccival=c/4
    activecount=activecount+1
    endif
    //------------------------------------------------//
    // Combine indicators
    //------------------------------------------------//
    rawvalue=(rsival+stochval+mfival+ccival)/max(activecount, 1)
    //------------------------------------------------//
    // Calculate smoothed values with Kernel function
    //------------------------------------------------//
    //signal 
    sum=0
    weightsum=0
    w=0
    for i = 0 to min(kernellen-1,barindex)
    if kerneltype=1 then//"Exponential"
    w=exp(-5.0 * i / kernellen)
    elsif kerneltype=2 then//"Linear"
    w=1.0-(i / kernellen)
    elsif kerneltype=3 then// "Gaussian"
    w=exp(-0.5*pow(3.0*i/kernellen, 2))
    endif
    sum=sum+rawvalue[i]*w
    weightsum=weightsum+w
    next
    signal=sum/weightsum
    //signal2 
    sum2=0
    weightsum2=0
    w2=0
    for i = 0 to min(kernellen*2-1,barindex)
    if kerneltype=1 then//"Exponential"
    w2=exp(-5.0*i/kernellen)
    elsif kerneltype=2 then//"Linear"
    w2=1.0-(i/kernellen)
    elsif kerneltype=3 then// "Gaussian"
    w2=exp(-0.5*pow(3.0*i/kernellen,2))
    endif
    sum2=sum2+signal[i]*w2
    weightsum2=weightsum2+w2
    next
    signal2=sum2/weightsum2
    //------------------------------------------------//
    // Define Trend conditions
    //------------------------------------------------//
    trendup = signal2 > 0
    trenddown = signal2 < 0
    //------------------------------------------------//
    // Plot and colors
    //------------------------------------------------//
    //Signal
    if signal>0 then
    rs=0
    gs=128
    bs=255
    else
    rs=204
    gs=51
    bs=204
    endif
    //Signal2
    layer1=signal2
    layer2=signal2*0.9
    layer3=signal2*0.8
    layer4=signal2*0.7
    layer5=signal2*0.6
    layer6=signal2*0.5
    layer7=signal2*0.4
    layer8=signal2*0.3
    layer9=signal2*0.2
    layer10=signal2*0.1
    
    colorbetween(layer1,layer2,rs,gs,bs,5)
    colorbetween(layer3,layer2,rs,gs,bs,15)
    colorbetween(layer3,layer4,rs,gs,bs,25)
    colorbetween(layer5,layer4,rs,gs,bs,35)
    colorbetween(layer5,layer6,rs,gs,bs,45)
    colorbetween(layer7,layer6,rs,gs,bs,55)
    colorbetween(layer7,layer8,rs,gs,bs,65)
    colorbetween(layer9,layer8,rs,gs,bs,75)
    colorbetween(layer9,layer10,rs,gs,bs,85)
    colorbetween(0,layer10,rs,gs,bs,95)
    //------------------------------------------------//
    return 0 as "Zero", signal as "Signal line" coloured(rs,gs,bs)style(line,3),signal2 coloured(rs,gs,bs,75)style(line,1)
    #246079 quote
    StenozarStenozar
    Participant
    Master

    Grazie Ivan, gentilissimo!

Viewing 3 posts - 1 through 3 (of 3 total)
  • You must be logged in to reply to this topic.
ProRealAI ProRealAI New

Stuck on this ProBuilder code?

Describe what this topic is trying to build, in plain English, and ProRealAI writes the ProRealTime™ indicator, screener or system for you.

Available in 7 languages
Try ProRealAI

Multi Oscillator Adaptive Kernel


ProBuilder: Indicatori & Strumenti Personalizzati

New Reply
Author
author-avatar
Stenozar @stenozar Participant
Summary

This topic contains 2 replies,
has 2 voices, and was last updated by StenozarStenozar
1 year, 5 months ago.

Topic Details
Forum: ProBuilder: Indicatori & Strumenti Personalizzati
Language: Italian
Started: 04/13/2025
Status: Active
Attachments: No files
ProRealCode ProRealCode
Loading...