Need Help with converting this Pinescript to AFL

#1
Need help with Converting this PineScript to Amibroker AFL. Code is for an indicator called RVOL (Relative Volume). Attempted to do it myself but its not the same. Posting both the codes below

PINESCRIPT CODE
Code:
var tooltip1 = "The more recent the data is, the more relevant it is.  Longer period baselines have lower volumes. This creates too much noise when we generate our results."
//@version=5
indicator("RVOL Relative Volume - Intraday", "RVOL", max_lines_count = 500, precision = 2)
period = input.int(defval = 5, title = "Number of Days", minval = 1, maxval = 55, tooltip = tooltip1)

// Chart time frame must be ">=1min" and less than 1Day to run the script
if not timeframe.isintraday or timeframe.isseconds
    runtime.error("Chart time frame must be less than 1 Day and greater/equal 1 minute")

hline(0.0, linestyle = hline.style_solid)
hline(0.5, linestyle = hline.style_dotted)
hline(1.0, linestyle = hline.style_dashed)
hline(1.5, linestyle = hline.style_dotted)
hline(2.0, linestyle = hline.style_dashed)

// get current bar time as hour/minute
int hour_ = math.floor(time / 3600000) % 24
int minute_ = math.floor(time / 60000) % 60

// *24*60 => 1 day, *2 is used to make the day 48 hours because session start time may change sometimes and also it may start (say) at 17:00 and ends at 02:00
// this method is used to calculate exact rvol, other methods may give false results
var rvols = array.new_float(24 * 60 * 2 * (period + 1), 0)
// new session started?
bool newday = ta.change(time('D')) != 0

// this is used to make the day 48 hours
var plus24 = 0
if newday
    plus24 := 0
    for x = 1 to 2880
        array.shift(rvols)
        array.push(rvols, 0)

// get bar time
int ctime_ = hour_ * 60 +  minute_
// calculate addition
if ctime_ < ctime_[1] and not newday
    plus24 := 1440

// convert bar time to index (48 hours)
int ctime = ctime_ + plus24

// draw vertical line at the beginning of the Session
if newday
    line.new(x1 = bar_index, y1 = 0, x2 = bar_index, y2 = 1, color = color.gray, style = line.style_dashed, extend = extend.right)

// keep the current cumulative volume at related element in the array
array.set(rvols, period * 2880 + ctime, newday ? volume : array.get(rvols, period * 2880 + ctime[1]) + volume)

// calculate relative volume
relativeVolume()=>
    float hvol = 0//array.sum(array.slice(rvols, x * 2880 + ctime)
    for x = 0 to period - 1
        svol = array.get(rvols, x * 2880 + ctime)
        // if it missing hour in last days, get sum from last hour(s)
        if svol == 0
            for y = x * 2880 + ctime to x * 2880
                svol := array.get(rvols, y)
                if svol != 0
                    break
        hvol +=  svol / period

    cvol = array.get(rvols, period * 2880 + ctime)
    rvol = hvol == 0 ? 0 : cvol / hvol

RVOL = relativeVolume()
// plot relative volume
plot(RVOL, style = plot.style_columns, color = close >= open ? color.rgb(0, math.max(math.min(RVOL * 130, 255), 130), 0, 0) : color.rgb(math.max(math.min(RVOL * 130, 255), 130), 0, 0, 0))

AFL Code Tried by me

Code:
_SECTION_BEGIN("RVOL Relative Volume - Intraday");

period = Param("Number of Days", 5, 1, 55);


Plot(1.0, "", colorDefault, styleDashed);
NewDay = Day() != Ref(Day(), -1);

period = Param("Number of Days", 5, 1, 55, 1);

hour_ = Hour();
minute_ = Minute();

ctime_ = hour_ * 60 + minute_;

cvol = SumSince( newDay, V);

for (i = 0; i < BarCount; i++)
{
    if (i < period)
    {
        rvols[i] = cvol[i];
    }
    else
    {
        rvols[i] = cvol[i] - cvol[i - period];
    }
}

rvol = IIf(rvols == 0, 0, cvol / rvols);

// Plot the RVOL
Plot(rvol, "RVOL", IIf(Close >= Open, colorGreen, colorRed), styleHistogram);
 

Similar threads