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/