예제 #1
0
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):

CarhartSample = CarhartDaily[(CarhartDaily['date'] >= START_TRAIN) &
    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,
                                                   wTickers, build_date)