Multi Oscillator Adaptive Kernel

Viewing 3 posts - 1 through 3 (of 3 total)
  • Author
    Posts
  • #245866 quote
    Stenozar
    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ález
    Moderator
    Master

    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
    Stenozar
    Participant
    Master

    Grazie Ivan, gentilissimo!

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

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 Stenozar
10 months, 2 weeks ago.

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