Script in R statistical programming language to calculate realized volatility from 5 min intraday data using timeSeries package [155]. #p r o c e s s n a s d a q q u o t e s d o w n l o a d e d t h r o u g h d t n i q #a d d i t i o n a l f u n c t i o n s l i b r a r y ( ” t i m e S e r i e s ” ) rm( l i s t = l s ( ) ) source ( ” J : \ \ b r u n e l \\R\\ r . f u n c s \\ r . h f t . f u n c s . R” ) i n s t r<−”MSFTTS. mod . 1 . 5 min” fname . e x t<−” c s v ”
i n s t r . name<−paste ( i n s t r , ” . ” , fname . ext , s e p=” ” )
i n s t r . data . d i r<−” J : \ \ d t n i q \\ d t n i q . p r o g \\ d a t a . r . p r o c . m s f t \\ ” fname<−paste ( i n s t r . data . dir , i n s t r . name , s e p=” ” )
############################################################ ## o u t p u t
i n s t r . mod . name<−”MSFTTS. mod . 1 . 5 min . i n t r a v o l ”
i n s t r . mod . name . p a r t<−paste ( i n s t r . mod . name , ” . ” , fname . ext , s e p=” ” ) fname . mod . name . f u l l<−paste ( i n s t r . data . dir , i n s t r . mod . name . p a r t ,
s e p=” ” )
############################################################
dframe<−read . table ( fname , h e a d e r=TRUE, s e p=” , ” , s t r i n g s A s F a c t o r s=FALSE) names( dframe )<−c ( ” Date ” , ”Time” , ”Open” , ” High ” , ”Low” , ” C l o s e ” )
aux . tStamps<−paste ( dframe $Date , dframe $Time , s e p=” ” ) t S e r i e s<−t i m e S e r i e s ( data=dframe , c h a r v e c=aux . tStamps )
data . p r i c e s<−cbind ( Open=dframe $Open ,
High=dframe $High , Low=dframe $Low , C l o s e=dframe $ C l o s e ) t S e r i e s . p r i c e s<−t i m e S e r i e s ( data . p r i c e s , c h a r v e c=aux . tStamps )
t S e r i e s . p r i c e s . r e t u r n s<−r e t u r n s ( t S e r i e s . p r i c e s , method=” c o n t i n u o u s ” ) #a g g r e g a t e c a l c u l a t i n g d a i l y v o l a t i l i t y #a g g r e g a t i o n p a r a m e t e r s a g g r . s t a r t<−time ( t S e r i e s . p r i c e s . r e t u r n s ) [ 1 ] + 6∗ 3600 + 30∗60 a g g r . l e n<−length ( time ( t S e r i e s . p r i c e s . r e t u r n s ) ) a g g r . end<−time ( t S e r i e s . p r i c e s . r e t u r n s ) [ a g g r . l e n ] + 24∗ 3600 a g g r . by<−t i m e S e q u e n c e ( from=a g g r . s ta rt , t o=a g g r . end , by = ” day ” )
t S e r i e s . p r i c e s . r e t u r n s . day . v o l a t i l i t y<−aggregate ( t S e r i e s . p r i c e s . r e t u r n s , from=a g g r . st ar t ,
t o=a g g r . end , by=a g g r . by ,
s q . r e t ) t S e r i e s . p r i c e s . as . dframe<−as . data . frame ( t S e r i e s . p r i c e s )
t S e r i e s . p r i c e s . r e t u r n s . as . dframe<−as . data . frame ( t S e r i e s . p r i c e s . r e t u r n s )
t S e r i e s . p r i c e s . r e t u r n s . day . v o l a t i l i t y . as . dframe<−as . data . frame ( t S e r i e s . p r i c e s . r e t u r n s . day . v o l a t i l i t y ) names( t S e r i e s . p r i c e s . r e t u r n s . day . v o l a t i l i t y . as . dframe )<−c ( ”SdOpen” , ” SdHigh ” , ”SdLow” , ” S d C l o s e ” )
DateTime<−time ( t S e r i e s . p r i c e s . r e t u r n s . day . v o l a t i l i t y ) DateTime . c h r<−as . character ( DateTime )
DateTime . c h r . s p l i t<−s t r s p l i t ( DateTime . chr , ” ” )
DateTime . c h r . s p l i t . u n l i s t e d<−u n l i s t ( DateTime . c h r . s p l i t )
DateTime . c h r . s p l i t . u n l i s t e d . matrix<−matrix ( DateTime . c h r . s p l i t . u n l i s t e d , ncol =2 , byrow=T) Dates<−DateTime . c h r . s p l i t . u n l i s t e d . matrix [ , 1 ] Times<−DateTime . c h r . s p l i t . u n l i s t e d . matrix [ , 2 ] d e l t a t<−5 # m i n u t e s d e l t a t s c a l e<−24∗60 #m i n u t e s i n a day #s c a l i n g f a c t o r s c f a c t o r<−sqrt ( ( 2 4 ∗ 6 0 ) / ( 6 ∗ 60+30)) #s c f a c t o r<−1
t S e r i e s . p r i c e s . r e t u r n s . day . v o l a t i l i t y . as . dframe<−s c f a c t o r ∗ t S e r i e s . p r i c e s . r e t u r n s . day . v o l a t i l i t y . as . dframe
v o l a t i l i t y . dframe<−data . frame ( Date=Dates , Time=Times ,
SdOpen=t S e r i e s . p r i c e s . r e t u r n s . day . v o l a t i l i t y . as . dframe $SdOpen , SdHigh=t S e r i e s . p r i c e s . r e t u r n s . day . v o l a t i l i t y . as . dframe $SdHigh , SdLow=t S e r i e s . p r i c e s . r e t u r n s . day . v o l a t i l i t y . as . dframe $SdLow , S d C l o s e=t S e r i e s . p r i c e s . r e t u r n s . day . v o l a t i l i t y . as . dframe $ S d C l o s e ) write . table ( v o l a t i l i t y . dframe , f i l e=fname . mod . name . f u l l , quote=FALSE,
row . names=FALSE, c o l . names=TRUE, s e p=” , ” )