예제 #1
0
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,
예제 #3
0
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,