Ejemplo n.º 1
0
 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
Ejemplo n.º 2
0
 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)
Ejemplo n.º 3
0
 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)
Ejemplo n.º 4
0
 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)
Ejemplo n.º 5
0
 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
Ejemplo n.º 6
0
 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
Ejemplo n.º 7
0
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)
Ejemplo n.º 8
0
 def __init__(self, params, randomstate=None):
     self.__params = params
     self.__randomstate = npu.getrandomstate() if randomstate is None else randomstate
Ejemplo n.º 9
0
 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)
Ejemplo n.º 10
0
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()
Ejemplo n.º 11
0
 def __init__(self, elements, randomstate=None):
     self.__elements = [e for e in elements]
     self.__randomstate = npu.getrandomstate(
     ) if randomstate is None else randomstate