In [4]:
%matplotlib inline
from pymongo import MongoClient
import math
import datetime
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
sns.set(color_codes=True)
In [5]:
def divtd(td1, td2):
us1 = td1.microseconds + 1000000 * (td1.seconds + 86400 * td1.days)
us2 = td2.microseconds + 1000000 * (td2.seconds + 86400 * td2.days)
return float(us1) / us2
try:
import config
print('using local config file')
mongodb_uri = config.mongodb_uri
except:
print('using environment variable')
mongodb_uri = os.getenv('MONGODB_URI')
In [6]:
print("Analyzing Data")
success = True
if success:
try:
client = MongoClient(mongodb_uri)
db = client.get_database()
except Exception as e:
print('mongo login error ', str(e))
success = False
if success:
try:
dataCursor = db.percentageMoveTest.find(projection={'_id': False},sort=[("timestamp", 1)])
except Exception as e:
print('mongo data cursor error ', str(e))
success = False
if success:
try:
df = pd.DataFrame(list(dataCursor)).set_index(['timestamp'])
print(df)
increase = df+1
cumulative = increase.cumprod(axis=0)
cumulative = cumulative - cumulative.iloc[0]
print(cumulative)
except Exception as e:
print('mongo data cursor error ', str(e))
success = False
"""
if success:
try:
dataCursor = db.tracking.find(projection={'_id': False},sort=[("timestamp", 1)])
except Exception as e:
print('mongo data cursor error ', str(e))
success = False
if success:
try:
tracking = pd.DataFrame(list(dataCursor)).set_index(['timestamp'])
print(tracking)
except Exception as e:
print('mongo data cursor error ', str(e))
success = False
"""
Out[6]:
In [7]:
if success:
plt.figure()
plt.plot(df['portfolio'])
plt.plot(df['spy'])
plt.plot(df['tlt'])
plt.plot(df['90dayTreasury'])
plt.legend()
plt.figure()
sns.distplot(df['portfolio'],label="portfolio")
sns.distplot(df['spy'],label="spy")
sns.distplot(df['tlt'],label="tlt")
plt.legend()
plt.figure()
plt.plot(cumulative['portfolio'])
plt.plot(cumulative['spy'])
plt.plot(cumulative['tlt'])
plt.plot(cumulative['90dayTreasury'])
plt.legend()
"""
plt.figure()
plt.plot(tracking['spyTarget'])
plt.plot(tracking['tltTarget'])
plt.plot(tracking['spyActual'])
plt.plot(tracking['tltActual'])
plt.legend()
"""
Out[7]:
In [8]:
if success:
df['elapsed'] = df.index-df.index[0]
year = datetime.timedelta(days=365)
percentageOfYear = divtd((df['elapsed'])[-1], year)
df['spyExcess'] = df['spy']-df['90dayTreasury']
df['tltExcess'] = df['tlt']-df['90dayTreasury']
df['portfolioExcess'] = df['portfolio']-df['90dayTreasury']
df['spyInfoExcess'] = df['portfolio']-df['spy']
df['tltInfoExcess'] = df['portfolio']-df['tlt']
meanSpyExcess = df['spyExcess'].mean()
meanTltExcess = df['tltExcess'].mean()
meanPortfolioExcess = df['portfolioExcess'].mean()
meanSpyInfoExcess = df['spyInfoExcess'].mean()
meanTltInfoExcess = df['tltInfoExcess'].mean()
stdSpyExcess = df['spyExcess'].std()
stdTltExcess = df['tltExcess'].std()
stdPortfolioExcess = df['portfolioExcess'].std()
stdSpyInfoExcess = df['spyInfoExcess'].std()
stdTltInfoExcess = df['tltInfoExcess'].std()
rawSpySharpe = meanSpyExcess/stdSpyExcess
spySharpe = math.sqrt(len(df.index)/percentageOfYear)*rawSpySharpe
print('rawSpySharpe = ',rawSpySharpe)
print('spySharpe = ',spySharpe)
rawTltSharpe = meanTltExcess/stdTltExcess
tltSharpe = math.sqrt(len(df.index)/percentageOfYear)*rawTltSharpe
print('\nrawTltSharpe = ',rawTltSharpe)
print('tltSharpe = ',tltSharpe)
rawPortfolioSharpe = meanPortfolioExcess/stdPortfolioExcess
portfolioSharpe = math.sqrt(len(df.index)/percentageOfYear)*rawPortfolioSharpe
print('\nrawPortfolioSharpe = ',rawPortfolioSharpe)
print('portfolioSharpe = ',portfolioSharpe)
rawSpyInfo = meanSpyInfoExcess/stdSpyInfoExcess
spyInfo = math.sqrt(len(df.index)/percentageOfYear)*rawSpyInfo
print('\nrawSpyInfo = ',rawSpyInfo)
print('spyInfo = ',spyInfo)
rawTltInfo = meanTltInfoExcess/stdTltInfoExcess
tltInfo = math.sqrt(len(df.index)/percentageOfYear)*rawTltInfo
print('\nrawTltInfo = ',rawTltInfo)
print('tltInfo = ',tltInfo)