Code:
//parameters
// n = 20
// averageP = 200
No = log( open ) - log( close[1] ) // normalized open
Nu = log( high ) - log( open ) // normalized high
Nd = log( low ) - log( open ) // normalized low
Nc = log( close ) - log( open ) // normalized close
Vrs = 1 / n * Summation[n]( Nu * ( Nu - Nc ) + Nd * ( Nd - Nc )) // RS volatility estimator
Noavg = 1 / n * Summation[n](No)
Vo = 1 / ( n - 1 ) * Summation[n]( SQUARE( No - Noavg ) )
Ncavg = 1 / n * Summation[n]( Nc )
Vc = 1 / ( n - 1 ) * Summation[n]( SQUARE( Nc - Ncavg ) )
k = 0.34 / ( 1.34 + ( n + 1 ) / ( n - 1 ) )
Vyangzhang = Vo + k * Vc + ( 1 - k ) * Vrs
avg = average[averageP](Vyangzhang)
return Vyangzhang, avg as "average volatiliy"