Indicator Conversion Volumatic Vidya

Viewing 2 posts - 1 through 2 (of 2 total)
  • Author
    Posts
  • #260321 quote
    AragornaAragorna
    Participant
    Average

    Hello, is it possible to convert this indicator? thank you very much in advance for your help.



    // This work is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International 

    // https://creativecommons.org/licenses/by-nc-sa/4.0/

    // © BigBeluga


    //@version=6

    indicator(‘Volumatic Variable Index Dynamic Average [BigBeluga]’, ‘Volumatic VIDYA [BigBeluga]’, overlay = true, max_lines_count = 500, max_labels_count = 500)



    // INPUTS ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――{

    // Input parameters for length, momentum, and source data

    int vidya_length = input.int(10, ‘VIDYA Length’) // Length of the VIDYA calculation

    int vidya_momentum = input.int(20, ‘VIDYA Momentum’) // Momentum length for VIDYA

    float band_distance = input.float(2, ‘Distance factor for upper/lower bands’, step = 0.1) // Distance factor for upper/lower bands

    // Define pivot parameters

    int pivot_left_bars = 3 // Left side pivot bars

    int pivot_right_bars = pivot_left_bars // Right side pivot bars


    float source = input.source(close, ‘Source’) // Source for VIDYA calculation


    // Define colors for up and down trends

    color up_trend_color = input(#17dfad, ‘+’, group = ‘Color’, inline = ‘c’) // Color for uptrend

    color down_trend_color = input(#dd326b, ‘-‘, group = ‘Color’, inline = ‘c’) // Color for downtrend

    bool shadow = input.bool(true, ‘Shadow’, group = ‘Color’, inline = ‘c’)


    // Initialize variables for line, volume, and trend state

    var line pivot_line = na // Variable for storing line references

    var float volume_value = na // Variable for storing volume data

    float smoothed_value = na // Smoothing variable for VIDYA trend levels

    var bool is_trend_up = false // Boolean variable for tracking trend direction


    // Initialize arrays for storing line and volume information

    var array<line> liquidity_lines_low = array.new<line>(500) // Array for storing lines for lows

    var array<line> liquidity_lines_high = array.new<line>(500) // Array for storing lines for highs


    var float up_trend_volume = na // Volume accumulated during uptrend

    var float down_trend_volume = na // Volume accumulated during downtrend

    // }



    // FUNCTIONS―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――{


    // Define VIDYA (Variable Index Dynamic Average) function

    vidya_calc(src, vidya_length, vidya_momentum) =>

      float momentum = ta.change(src)

      float sum_pos_momentum = math.sum(momentum >= 0 ? momentum : 0.0, vidya_momentum)

      float sum_neg_momentum = math.sum(momentum >= 0 ? 0.0 : -momentum, vidya_momentum)

      float abs_cmo = math.abs(100 * (sum_pos_momentum – sum_neg_momentum) / (sum_pos_momentum + sum_neg_momentum))

      float alpha = 2 / (vidya_length + 1)

      var float vidya_value = 0.0

      vidya_value := alpha * abs_cmo / 100 * src + (1 – alpha * abs_cmo / 100) * nz(vidya_value[1])


      ta.sma(vidya_value, 15)


    // Method to extend lines and add labels for liquidity levels

    method extend_liquidity_lines(array<line> line_array, float price_level, bool is_cross, volume_val) =>

      if line_array.size() > 0 and last_bar_index – bar_index < 5000

        for i = 0 to line_array.size() – 1 by 1

          if i < line_array.size()

            line liquidity_line = line_array.get(i)

            float current_line_level = line.get_y2(liquidity_line)

            bool price_cross = is_cross ? price_level < current_line_level and price_level[1] >= current_line_level : price_level > current_line_level and price_level[1] <= current_line_level


            bool is_short_line = bar_index – line.get_x1(liquidity_line) < 50


            if price_cross and is_short_line

              line.set_x2(liquidity_line, bar_index)

              line_array.remove(i)


              // Add volume label to the liquidity zone

              label.new(bar_index – 1, price_level[1], str.tostring(volume_val, format.volume), color = color.rgb(0, 0, 0, 99), style = is_cross ? label.style_label_lower_left : label.style_label_upper_left, textcolor = chart.fg_color, size = size.small)


              // Add a circle label to represent liquidity zone

              label.new(bar_index – 1, price_level[1], text = ‘◉’, color = #00000003, textcolor = is_cross ? down_trend_color : up_trend_color, style = label.style_label_center, size = size.normal)

              // }



    // CALCULATIONS――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――{

    // Calculate the Average True Range (ATR)

    float atr_value = ta.atr(200) // ATR calculation with length of 200


    // Calculate the VIDYA (Variable Index Dynamic Average)

    vidya_value = vidya_calc(source, vidya_length, vidya_momentum)


    // Calculate upper and lower bands based on VIDYA and ATR

    float upper_band = vidya_value + atr_value * band_distance

    float lower_band = vidya_value – atr_value * band_distance


    // Detect trend direction using crossovers of source with bands

    if ta.crossover(source, upper_band)

      is_trend_up := true

      is_trend_up

    if ta.crossunder(source, lower_band)

      is_trend_up := false

      is_trend_up


    // Set trend-based smoothing variable

    if is_trend_up

      smoothed_value := lower_band

      smoothed_value

    if not is_trend_up

      smoothed_value := upper_band

      smoothed_value

    if ta.change(is_trend_up)

      smoothed_value := na

      smoothed_value


    // Calculate pivot highs and lows for price action

    bool pivot_high = not na(ta.pivothigh(pivot_left_bars, pivot_right_bars))

    bool pivot_low = not na(ta.pivotlow(close, pivot_left_bars, pivot_right_bars))


    // Create and store lines for pivot lows (support zones)

    if low[pivot_right_bars] > smoothed_value and pivot_low

      pivot_line := line.new(bar_index[pivot_right_bars], low[pivot_right_bars], bar_index[pivot_right_bars] + 5, low[pivot_right_bars], color = color.new(up_trend_color, 50))


      liquidity_lines_low.push(pivot_line)

      volume_value := math.sum(volume, pivot_right_bars + pivot_left_bars) / (pivot_right_bars + pivot_left_bars)

      volume_value


    // Create and store lines for pivot highs (resistance zones)

    if high[pivot_right_bars] < smoothed_value and pivot_high

      pivot_line := line.new(bar_index[pivot_right_bars], high[pivot_right_bars], bar_index[pivot_right_bars] + 5, high[pivot_right_bars], color = color.new(down_trend_color, 50))


      liquidity_lines_high.push(pivot_line)

      volume_value := math.sum(-volume, pivot_right_bars + pivot_left_bars) / (pivot_right_bars + pivot_left_bars)

      volume_value


    // Extend lines to track price movements

    liquidity_lines_high.extend_liquidity_lines(smoothed_value, true, volume_value)

    liquidity_lines_low.extend_liquidity_lines(smoothed_value, false, volume_value)


    // Detect changes in the trend direction

    bool trend_cross_up = not is_trend_up[1] and is_trend_up

    bool trend_cross_down = not is_trend_up and is_trend_up[1]


    // Reset volume counters when trend changes

    if ta.change(trend_cross_up) or ta.change(trend_cross_down)

      up_trend_volume := 0

      down_trend_volume := 0

      down_trend_volume


    // Accumulate volume during trends

    if not(ta.change(trend_cross_up) or ta.change(trend_cross_down))

      up_trend_volume := up_trend_volume + (close > open ? volume : 0)

      down_trend_volume := down_trend_volume + (close < open ? volume : 0)

      down_trend_volume


    // Calculate average volume

    float avg_volume_delta = (up_trend_volume + down_trend_volume) / 2


    // Determine the color of the trend

    color trend_color = is_trend_up ? up_trend_color : not is_trend_up ? down_trend_color : chart.fg_color


    // Calculate delta volume percentage

    string delta_volume = str.tostring((up_trend_volume – down_trend_volume) / avg_volume_delta * 100, format.percent) == ‘NaN%’ ? ‘0%’ : str.tostring((up_trend_volume – down_trend_volume) / avg_volume_delta * 100, format.percent)


    // }



    // PLOT ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――{

    // Display labels for volume and trend statistics on the last bar

    if barstate.islast

      label.delete(label.new(bar_index, smoothed_value, ‘Buy: ‘ + str.tostring(up_trend_volume, format.volume) + ‘n Sell: ‘ + str.tostring(down_trend_volume, format.volume) + ‘nDelta Volume: ‘ + delta_volume, color = color.new(trend_color, 90), style = is_trend_up ? label.style_label_upper_left : label.style_label_lower_left, textcolor = chart.fg_color)[1])


      label.delete(label.new(bar_index, smoothed_value, text = ‘✪’, color = #00000003, textcolor = trend_color, style = label.style_label_center, size = size.large)[1])


    // Plot the VIDYA trend line

    p1 = plot(smoothed_value, color = trend_color, linewidth = 2, style = plot.style_linebr)

    p2 = plot(hl2, display = display.none)


    // Fill between the plot and the VIDYA line

    fill(p1, p2, smoothed_value, hl2, color.new(trend_color, shadow ? 80 : 100), na)


    // Plot trend change markers (up and down arrows)

    plotshape(series = trend_cross_up[1] ? smoothed_value[0] : na, title = ‘Trend Up’, style = shape.labelup, location = location.absolute, color = color.new(up_trend_color, 50), text = ‘▲’, textcolor = chart.fg_color)


    plotshape(series = trend_cross_down[1] ? smoothed_value[0] : na, title = ‘Trend Down’, style = shape.labeldown, location = location.absolute, color = color.new(down_trend_color, 50), text = ‘▼’, textcolor = chart.fg_color)

    // }

    #260323 quote
    NicolasNicolas
    Keymaster
    Legend

    This indicator is already converted, you can find it here:

    could you pleases covert this code from “Volumatic Variable Index Dynamic Aver

    Try to use the Search feature of the website, you’ll find many interesting things this way! 😉 https://www.prorealcode.com/?s=Volumatic+Vidya&search_post_type%5B%5D=forums


Viewing 2 posts - 1 through 2 (of 2 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

TradingView to ProRealTime Translation Center

New Reply
Author
author-avatar
Aragorna @aragorna Participant
Summary

This topic contains 1 reply,
has 2 voices, and was last updated by NicolasNicolas
5 months ago.

Topic Details
Forum: TradingView to ProRealTime Translation Center Forum
Started: 04/18/2026
Status: Active
Attachments: No files
ProRealCode ProRealCode
Loading...