0
function JurikMA(src, length, phase, power)
{
src = (High + Low + Close)/3;
phaseRatio = IIf(phase < -100, 0.5, IIf(phase > 100, 2.5, (phase / 100) + 1.5));
beta = 0.45 * (length - 1) / (0.45 * (length - 1) + 2);
alpha = beta ^ power;
jma = 0.0;
e0 = 0.0;
e1 = 0.0;
e2 = 0.0;
 
    for (i = 1; i < BarCount; i =i+1)
        {
           e0[i] = (1 - alpha[i]) * src[i] + alpha[i] * nz(e0[i-1]);
           e1[i] = (src[i] - e0[i]) * (1 - beta[i]) + beta[i] * nz(e1[i-1]);
           e2[i] = (e0[i] + phaseRatio[i] * e1[i] - nz(jma[i])) * ((1 alpha[i]) ^ 2) + (alpha[i] ^ 2) * nz(e2[i-1]);
           result[i] = e2[i] + nz(jma[i]);
        }
 
    return result;
}

This is my AFL code for Jurik Moving Average. It's neither giving any error nor any signal. How it can be fixed? Regards.

I coded it as best as I could.

There is a second code -

_SECTION_BEGIN("Jurik Moving Average New Version");
function jmapow( src, len )
{
    upperband = src;
    lowerband = src;

//Volatility
    del1 = src - Nz( Ref( upperband, -1 ), src );
    del2 = src - Nz( Ref( lowerband, -1 ), src );
    volty = IIf( abs( del1 ) == abs( del2 ), 0, Max( abs( del1 ), abs( del2 ) ) );

//Incremental Sum of Volty
    vSum = 0.0;

    for( i = 1; i < BarCount; i = i++ )
    {
        vSum[i] = Nz( vSum[i - 1] ) + 0.1 * ( volty[i] - Nz( volty[10], volty ) );
    }

//Jurik Research used 65
    avgLen = 65;
    avgVolty = MA( vSum, avglen );

//Relative Price Volatility
    alen = ( len - 1 ) / 2;
    len1 = Max( log( sqrt( alen ) ) / ( log( 2 ) + 2 ), 0 );
    pow1 = Max( len1 - 2, 0.5 );

    rVolty = IIf( avgVolty != 0, volty / avgVolty, 0 );
    pow2 = rVolty ^ pow1;

    return pow2;
}

function juma( src, length, phase )
{
    jma = 0.0;
    phaseRatio = IIf( phase < -100, 0.5, IIf( phase > 100, 2.5, ( phase / 100 ) + 1.5 ) );
    beta = 0.45 * ( length - 1 ) / ( 0.45 * ( length - 1 ) + 2 );
    power = jmapow( src, length );
    alpha = beta ^ power;

    e0 = 0.0;
    e1 = 0.0;
    e2 = 0.0;
    e3 = 0.0;
    
    for( i = 1; i < BarCount; i = i + 1 )
    {
        e0[i] = ( 1 - alpha[i] ) * src[i] + alpha[i] * Nz( e0[i-1] );
        e1[i] = ( 1 - beta[i] ) * src[i] + alpha[i] * Nz( ( e1[i-1] ) );
        e2[i] = e0[i] + phaseRatio[i] * e1[i];
        e3[i] = ( ( 1 - alpha[i] ) ^ 2 ) * ( e2[i] - Nz( jma[i] ) ) + ( alpha[i] ^ 2 ) * Nz(e3[i - 1]);
                                             result[i] = Nz( jma[i] ) + e3[i];
    }

                                         return result;
}

src = (High + Low + Close) / 3;
length = Param("Length", 14, 3, 200, 1);
phase = Param("Phase", 50, 2, 100, 1);

Plot(juma(src, length, phase), "Jurik Moving Average", colorBrown, styleThick|styleNoRescale|styleNoLabel);
_SECTION_END();

This is I am trying to write from a pine script as follow -

// Jurik MA // ---------- jmapow(src, len) =>
>     upperBand = src
>     lowerBand = src
>     
>     // Volatility
>     del1 = src - nz(upperBand[1], src)
>     del2 = src - nz(lowerBand[1], src)
>     volty = math.abs(del1) == math.abs(del2) ? 0 : math.max(math.abs(del1), math.abs(del2))
>     
>     **// Incremental sum of Volty
>     vSum = 0.0
>     vSum := nz(vSum[1]) + 0.1 * (volty - nz(volty[10], volty))**
> 
>     // Jurik used 65
>     avgLen = 65
>     avgVolty = ta.sma(vSum, avgLen)
>     
>     // Relative price volatility
>     alen = (len - 1) / 2
>     len1 = math.max(math.log(math.sqrt(alen)) / math.log(2) + 2, 0)
>     pow1 = math.max(len1 - 2, 0.5)
>     
>     **rVolty = avgVolty != 0 ? volty / avgVolty : 0
>     if (rVolty > math.pow(len1, 1 / pow1))
>         rVolty := math.pow(len1, 1 / pow1)
>     if rVolty < 1
>         rVolty := 1**
>     
>     // Jurik Bands
>     pow2 = math.pow(rVolty, pow1)
>     len2 = math.sqrt(alen) * len1
>     bet  = len2/(len2 + 1)
>     kv   = math.pow(bet, math.sqrt(pow2))
>     
>     upperBand := del1 > 0 ? src : src - kv * del1
>     lowerBand := del2 < 0 ? src : src - kv * del2
> 
>     pow2
> 
> jma(float src, int len, int phase = 50) =>
>     jma = 0.0
>     phaseRatio = phase < -100 ? 0.5 : phase > 100 ? 2.5 : phase / 100 +1.5
>     beta = 0.45 * (len - 1) / (0.45 * (len - 1) + 2)
>     power = jmapow(src, len)
>     alpha = math.pow(beta, power)
>     
>     // 1st stage - preliminary smoothing by adaptive EMA
>     ma1 = 0.0
>     ma1 := (1 - alpha) * src + alpha * nz(ma1[1])
>     
>     // 2nd stage - preliminary smoothing by Kalman filter
>     det0 = 0.0
>     det0 := (1 - beta) * (src - ma1) + beta * nz(det0[1])
>     ma2 = ma1 + phaseRatio * det0
>     
>     // 3rd stage - final smoothing by Jurik adaptive filter
>     det1 = 0.0
>     det1 := math.pow(1 - alpha, 2) * (ma2 - nz(jma[1])) + math.pow(alpha, 2) * nz(det1[1])
> 
>     jma := nz(jma[1]) + det1
>     jma

I need support to interpret the script from pine script to AFL. It is beyond my skill set, and mostly I am genuinely feeling exhausted right now. Regards. Pine script source - https://www.tradingview.com/script/kI6YjrIH-CommonFilters/

0 Answers0