import datetime import ReadData import math import matplotlib.pyplot as plt DataFolder = 'E:\Dropbox\CQA 2014\Data' # BUILD_DATE = datetime.datetime(2013, 11, 1) START_TRAIN = datetime.datetime(2010, 11, 1) END_TRAIN = datetime.datetime(2013, 10, 31) START = datetime.datetime(2013, 11, 1) END = datetime.datetime(2014, 11, 5) BETA_BOUND = 0.45 WEIGHT_BOUND = 0.05 CAPITAL = 1e7 (StockPrices, SP500Prices, CarhartDaily, StockBeta) = ReadData.ReadAll(DataFolder) StockReturns = ReadData.ReadReturn(DataFolder) tickers = ReadData.ReadTickers(DataFolder) decay = 0.003 Coef = pd.read_csv(r'%s/Coef_%s_%s_%.4f.csv' % (DataFolder, START_TRAIN.date(), END_TRAIN.date(), decay)) Res = pd.read_csv(r'%s/Res_%s_%s_%.4f.csv' % (DataFolder, START_TRAIN.date(), END_TRAIN.date(), decay)) betas = Coef.merge(tickers).rename(columns={'Mkt-RF': 'beta'})[['ticker', 'beta']].reset_index(drop=True) sortCoef = betas.sort('beta').reset_index(drop=True) N = sortCoef.shape[0] / 10 longTickers = sortCoef.head(4*N).tail(3*N)[['ticker']].sort('ticker').reset_index(drop=True) shortTickers = sortCoef.tail(3*N)[['ticker']].sort('ticker').reset_index(drop=True) pfTickers = pd.concat((shortTickers[['ticker']], longTickers[['ticker']]), axis=0).sort('ticker').reset_index(drop=True) # def getCovMatrix(tickers):
plt.title('Long/Shoart Market Value for each Sector', size=font_size) plt.xticks(index + bar_width, sector_list, rotation=20) plt.legend() plt.tight_layout() plt.grid() plt.show() sector_bar_chart() print sector_summary[['sector', 'long_weight', 'short_weight', 'net_weight']] # Now let's look at sector returns since 11/10 (StockPrices, SP500Prices, CarhartDaily, StockBeta) = ReadData.ReadAll(data_folder) StockReturns = ReadData.ReadReturn(data_folder) build_date = datetime.datetime(2014, 11, 10) end_date = StockPrices['date'].max() end_tickers = pd.DataFrame({ 'ticker': StockPrices[StockPrices['date'] == end_date]['ticker'].unique() }) sector_values = pd.DataFrame() for sector in sector_list: # sector = sector_list[0] wTickers = ticker_sector[ticker_sector['sector'] == sector].merge( end_tickers) wTickers['weight'] = 1 / float(wTickers.shape[0]) (pfValues, pfRecord) = functions.testPortfolio(StockPrices, StockReturns, SP500Prices, StockBeta,
import numpy as np import pandas as pd import matplotlib.pyplot as plt DataFolder = 'E:\Dropbox\CQA 2014\Data' CAPITAL = 1e7 # BUILD_DATE = datetime.datetime(2013, 11, 1) START_TRAIN = datetime.datetime(2010, 11, 1) END_TRAIN = datetime.datetime(2013, 10, 31) START = datetime.datetime(2013, 11, 1) END = datetime.datetime(2014, 11, 5) BETA_BOUND = 0.45 WEIGHT_BOUND = 0.05 (StockPrices, SP500Prices, CarhartDaily, StockBeta) = ReadData.ReadAll(DataFolder) StockReturns = ReadData.ReadReturn(DataFolder) tickers = ReadData.ReadTickers(DataFolder) wTickers = tickers wTickers['weight'] = 1 / np.float64(wTickers.shape[0]) def testPortfolio2Test(): pfValues = functions.testPortfolio2(StockPrices, SP500Prices, StockBeta, wTickers, CAPITAL, START, END) plt.subplot(121) plt.title('Portfolio Value vs Date') plt.plot(pfValues['date'], pfValues['value'], label='Portfolio Value', color='b')
# import cvxopt # import pymatlab ##import pylab ##from statsmodels.sandbox.descstats import descstats ##from pylab import figure, show from scipy.optimize import minimize DISK = 'E' ## We need to register datetime64 as a recognizable format in matplotlib first matplotlib.units.registry[ np.datetime64] = pd.tseries.converter.DatetimeConverter() ## Read data (StockPrices, StockReturns, SP500Prices, CarhartDaily, StockBeta) = ReadData.ReadAll(DISK) print "Finished reading data..." SP500Returns = ReadData.GetSP500Return(SP500Prices) ## For training purpose we only use the data before 2013/11/01 (start date of testing period) START_TRAIN = datetime.datetime(2010, 11, 1) END_TRAIN = datetime.datetime(2013, 10, 31) START = datetime.datetime(2013, 11, 1) END = datetime.datetime(2014, 10, 31) CarhartDailyTrain = CarhartDaily[(CarhartDaily.date >= START_TRAIN) & (CarhartDaily.date < START)] ## Delete stock tickers without beta value ## We need to make sure all stocks exist on the whole testing period tickers = StockBeta[np.isnan(StockBeta.cqaBeta) == False][['ticker']] avaTickers = pd.merge(tickers,