index = TI.index TI.index = range(len(TI)) Turbulence = pd.DataFrame(index = TI.index) Turbulence['TI'] = np.NaN for i in xrange(20,len(TI)): mean = TI.ix[:i-1].mean().values cov = np.matrix(np.cov(TI.ix[:i-1].T)) rets = TI.ix[i].values d = rets - mean Turbulence.ix[i,'TI'] = d.dot(cov.I).dot(d.T) Turbulence.index = index Turbulence = Turbulence.dropna() Turbulence['MA'] = efa(Turbulence.TI,1,30) Turbulence.MA.ix[:29] = np.NaN def get_weight(interval, q, method = 'continuous'): if not q: return np.NaN pc = sum(interval <= q)/np.float64(len(interval)) if method == 'continuous': if pc <= 0.2: return 1.0 elif pc <= 0.4: return 0.8 elif pc <= 0.6: return 0.6 elif pc <= 0.8: return 0.4
import numpy as np import pandas as pd import scipy as stats import foundation as fd from functions import efa fxData=fd.getFxRates() fxData = fxData[fxData.Currency!='USD'] fxData = fxData.reset_index() fxData = fxData[['Date','Currency', 'SPOT']].set_index(['Currency','Date']) fxData = fxData.groupby(level = 0).apply(lambda x: x.fillna(method = 'ffill',limit = 30 )) emafxData = fxData.groupby(level = 0).SPOT.apply(lambda x: efa(x,0.97,300)) fxData = fxData.groupby(level = 0).SPOT.values signal = fxData - emafxData print signal