import pandas as pd
import numpy as np
import statsmodels
from statsmodels.tsa.stattools import coint
import matplotlib.pyplot as plt
symbol_list = ['ABGB', 'ASTI', 'CSUN', 'DQ', 'FSLR','SPY']
securities_panel = get_pricing(symbol_list, fields=['price']
, start_date='2014-01-01', end_date='2015-01-01')
securities_panel.minor_axis = map(lambda x: x.symbol, securities_panel.minor_axis)
total_df = securities_panel.loc['price']
#percent variations:
daily_returns= total_df.pct_change()[1:]
#cumulative variations:
return_index= (1 + daily_returns).cumprod()
total_df.head()
def cointegration_finder(ticker_list):
'''
populate the dictionary 'result' with each symbol as keys
and the list of symbols with wich it is cointegrated as values
then convert it to a dataframe for printing
'''
result= {}
for ticker in symbol_list:
compare_ticker_to_this_list = [x for x in symbol_list if x != ticker]
cointegrated_tickers = [x for x in compare_ticker_to_this_list if coint(total_df[x],total_df[ticker])[1]<.05]
result[ticker]= cointegrated_tickers
return pd.DataFrame.from_dict(result, orient='index')
df = cointegration_finder(symbol_list)
print df
return_index[['ABGB','CSUN']].plot()
plt.show()
def zscore(series):
return (series - series.mean()) / np.std(series)
def visualize_spread(x, y):
score, pvalue, _= coint(x, y)
diff_series= x-y
zscore(diff_series).plot()
plt.axhline(zscore(diff_series).mean(), color='black')
plt.axhline(1.0, color='red', linestyle='--')
plt.axhline(-1.0, color='green', linestyle='--')
plt.figure(figsize=(15,8))
plt.show()
visualize_spread(total_df['ABGB'], total_df['CSUN'])