def __init__(self, params, randomstate=None): self.__params = params self.__randomstate = npu.getrandomstate() if randomstate is None else randomstate self.__oneminuspersistence = 1. - params.persistence self.__jumpvar = params.jumpvol * params.jumpvol self.__oneminusjumpintensity = 1. - params.jumpintensity
def __init__(self, params, randomstate=None): self.__scale = params.voloflogvar / np.sqrt(1. - params.persistence * params.persistence) randomstate = npu.getrandomstate( ) if randomstate is None else randomstate self.__normalvariatesgenerator = rnd.NormalVariatesGenerator( randomstate)
def __init__(self, params, randomstate=None): self.__params = params self.__randomstate = npu.getrandomstate() if randomstate is None else randomstate self.__oneminuspersistence = (1. - self.__params.persistence) self.__meanlogvartimesoneminuspersistence = self.__params.meanlogvar * self.__oneminuspersistence self.__vc = self.__params.voloflogvar * self.__params.cor self.__scalar = self.__params.voloflogvar * np.sqrt(1. - self.__params.cor * self.__params.cor)
def __init__(self, mean, covariance, randomstate=None): self.__mean = npu.immutablecopyof(npu.tondim1(mean)) self.__covariance = npu.immutablecopyof( npp.checkshapeissquare(npu.tondim2(covariance))) self.__randomstate = npu.getrandomstate( ) if randomstate is None else randomstate self.__impl = stats.multivariate_normal(self.__mean, self.__covariance)
def __init__(self, timecount, ar, ma, var=1., const=0., randomstate=None): self.__timecount = timecount self.__ar = npu.tondim1(npu.immutablecopyof(ar)) self.__ma = npu.tondim1(npu.immutablecopyof(ma)) self.__var = var self.__const = const self.__randomstate = npu.getrandomstate() if randomstate is None else randomstate
def __init__(self, timecount, params, cortiming, logreturnforward, logreturnscale, randomstate=None, usestratonovichcorrection=False): self.__timecount = timecount self.__params = params self.__cortiming = cortiming self.__logreturnforward = logreturnforward self.__logreturnscale = logreturnscale self.__randomstate = npu.getrandomstate( ) if randomstate is None else randomstate self.__logvarinitialdistribution = LogVarInitialDistribution( params, self.__randomstate) self.__usestratonovichcorrection = usestratonovichcorrection
kde = bc.kde(nodenames) print('KDE bandwidths for these parameters:', kde.bw) paramposterior = kde.pdf( [params.meanlogvar, params.persistence, params.cor, params.voloflogvar]) logparamposterior = np.log(paramposterior) print('Loading SV data...') svdata = sv.loading.loadSVDataFromBUGSDataset(observationsfile, logreturnforward=True, logreturnscale=100.) print(svdata) fig = plt.figure() sv.visualisation.makesvdataplot(fig, svdata) randomstate = npu.getrandomstate() if model == 'svl': filterrundata = runsvljparticlefilter(svdata, params, randomstate) elif model == 'svl2': filterrundata = runsvl2particlefilter(svdata, params, randomstate) print(filterrundata) fig = plt.figure() filtering.visualisation.makeparticlehistogram(fig, filterrundata.stochfilter) fig = plt.figure() filtering.visualisation.makefilterrunplot(fig, filterrundata.filterrundf) loglikelihood = filterrundata.summary()['log-likelihood'] print('log-likelihood:', loglikelihood) print('log of params posterior:', logparamposterior)
def __init__(self, params, randomstate=None): self.__params = params self.__randomstate = npu.getrandomstate() if randomstate is None else randomstate
def __init__(self, params, randomstate=None): self.__params = params self.__randomstate = npu.getrandomstate() if randomstate is None else randomstate self.__meanlogvartimesoneminuspersistence = self.__params.meanlogvar * (1. - self.__params.persistence)
def main(): np.seterr(divide='raise', invalid='raise') randomstate = npu.getrandomstate() params = sv.Params( meanlogvar=.65762, persistence=.96125, voloflogvar=np.sqrt(0.020053), # 0.1416 cor=-.19, #jumpintensity=0.01, jumpintensity=0., jumpvol=0.01) #params = sv.Params(meanlogvar=-0.2076, persistence=0.9745, cor=0.0, voloflogvar=0.0492, jumpintensity=0., jumpvol=1.) # SVL, ds1 -924.077823959 (600 particles) # params = sv.Params(meanlogvar=-0.5486, persistence=0.9861, cor=-0.1969, voloflogvar=0.149, jumpintensity=0., jumpvol=1.) # SVL, ds2 -2721.36910265 (600 particles) # params = sv.Params(meanlogvar=-0.1706, persistence=0.9755, cor=-0.2699, voloflogvar=0.1464, jumpintensity=0., jumpvol=1.) # SVL2, ds1 -923.050833581 (1000 particles) # params = sv.Params(meanlogvar=-0.5883, persistence=0.9853, cor=-0.1472, voloflogvar=0.1456, jumpintensity=0., jumpvol=1.) # SVL2, ds2 -2723.29157267 (1000 particles) # params = sv.Params(meanlogvar=-0.2076, persistence=0.9745, cor=-0.275, voloflogvar=0.1492 * 1.25, jumpintensity=0., jumpvol=1.) """ params = sv.Params( meanlogvar = 0.25, persistence = 0.975, #cor = -0.8, cor = -0.5, voloflogvar = np.sqrt(0.025), jumpintensity = 0.0, jumpvol = 10.) """ """ params = sv.Params( meanlogvar = 0.2048, persistence = 0.6726, #cor = -0.8, cor = 0.004101, voloflogvar = 17.62, jumpintensity = 0.0, jumpvol = 10.) """ params = sv.Params( meanlogvar=-3.971, persistence=0.2338, #cor = -0.8, cor=-0.9178, voloflogvar=0.01468, jumpintensity=0.0, jumpvol=10.) # Wrong! # params = sv.Params(meanlogvar=-5.2076, persistence=0.9745, cor=0.275, voloflogvar=1.1492, jumpintensity=0., jumpvol=1.) # params = sv.Params(meanlogvar=-0.2076, persistence=0.9745, cor=-0.275, voloflogvar=0.1492, jumpintensity=0.01, jumpvol=10.) initialprice = 100. timecount = 2001 # 0, 1, ..., 1000 print('Generating SV data...') svdata = generatesvdata(params, timecount, randomstate) print('Loading SV data...') # filepath = r"C:\Users\Paul\Documents\dev\alexandria\bilokon-msc\dissertation\code\winbugs\datasets\dataset-1_GBPUSD_1981-10-01_1985-06-28.txt" # filepath = r"C:\Users\Paul\Documents\dev\alexandria\bilokon-msc\dissertation\code\datasets\dataset-2_y.txt" filepath = r"C:\Users\Paul\Documents\dev\alexandria\bilokon-msc\dissertation\code\datasets\dataset-14-ESM16\dataset-14-ESM16_y.txt" dtfilepath = r"C:\Users\Paul\Documents\dev\alexandria\bilokon-msc\dissertation\code\datasets\dataset-14-ESM16\dataset-14-ESM16_dt.txt" svdata = sv.loading.loadSVDataFromBUGSDataset(filepath, logreturnforward=True, logreturnscale=100., dtfilepath=dtfilepath) enrichsvdata(svdata, initialprice) # action = 'examinesvdata' # action = 'analyseparamsneighbourhood' # action = 'optimiseparams' action = 'runsvljparticlefilteronceandanalyse' # action = 'runsvl2particlefilteronceandanalyse' # action = 'runwcsvlparticlefilteronceandanalyse' # action = 'runsvlgaussianfilteronceandanalyse' # action = 'runsvl2gaussianfilteronceandanalyse' # action = 'rununscentedkalmanfilterandanalyse' # action = 'runkalmanfilterandanalyse' print('Analysing SV data...') examinesvdata(svdata) print('Running action: %s...' % action) if action == 'examinesvdata': pass elif action == 'analyseparamsneighbourhood': analyseparamsneighbourhood(svdata, params, includejumps=False, randomstate=randomstate) elif action == 'optimiseparams': initialguessparams = sv.Params(meanlogvar=-.1, persistence=.975, voloflogvar=np.sqrt(.02), cor=-.8, jumpintensity=0., jumpvol=1.) optimiseparams(svdata, initialguessparams, params, runsvljparticlefilter, includejumps=False, randomstate=randomstate) else: if action == 'runsvljparticlefilteronceandanalyse': filterrundata = runsvljparticlefilter(svdata, params, randomstate) fig = plt.figure() filtering.visualisation.makeparticlehistogram( fig, filterrundata.stochfilter) elif action == 'runsvl2particlefilteronceandanalyse': filterrundata = runsvl2particlefilter(svdata, params, randomstate) fig = plt.figure() filtering.visualisation.makeparticlehistogram( fig, filterrundata.stochfilter) elif action == 'runwcsvlparticlefilteronceandanalyse': filterrundata = runwcsvlparticlefilter(svdata, params, randomstate) fig = plt.figure() filtering.visualisation.makeparticlehistogram( fig, filterrundata.stochfilter) elif action == 'runsvlgaussianfilteronceandanalyse': filterrundata = runsvlgaussianfilter(svdata, params) elif action == 'runsvl2gaussianfilteronceandanalyse': filterrundata = runsvl2gaussianfilter(svdata, params) elif action == 'rununscentedkalmanfilterandanalyse': filterrundata = rununscentedkalmanfilter(svdata, params) elif action == 'runkalmanfilterandanalyse': filterrundata = runkalmanfilter(svdata, params) else: raise RuntimeError('Invalid action') print(filterrundata) fig = plt.figure() filtering.visualisation.makefilterrunplot(fig, filterrundata.filterrundf) plt.show()
def __init__(self, elements, randomstate=None): self.__elements = [e for e in elements] self.__randomstate = npu.getrandomstate( ) if randomstate is None else randomstate