def groupPerformance(StockPrices, StockReturns, SP500Prices, StockBeta, betas, START): factor = betas.columns.values[1] betas = betas.sort(factor) pfValuesAll = pd.DataFrame() for n in range(10): wTickers = betas.head(N * (n + 1)).tail(N)[['ticker' ]].reset_index(drop=True) wTickers['weight'] = 1 / np.float64(N) (pfValues, pfRecord) = functions.testPortfolio(StockPrices, StockReturns, SP500Prices, StockBeta, wTickers, START) pfValues['group'] = n + 1 pfValuesAll = pfValuesAll.append(pfValues) color_cycle = [ 'b', 'g', 'r', 'c', 'm', 'y', 'k', 'lightblue', 'gold', 'pink' ] for n in range(10): pfValues = pfValuesAll[pfValuesAll['group'] == n + 1] tmpLabel = r'group %d' % (n + 1) plt.plot(pfValues['date'], pfValues['value'], label=tmpLabel, color=color_cycle[n], linewidth=3.0) # plt.legend('beta group %d' % (n+1)) plt.ylabel('Portfolio Value') plt.legend(bbox_to_anchor=(0.2, 1)) plt.show() return pfValuesAll
def groupPerformance(StockPrices, StockReturns, SP500Prices, StockBeta, betas, START): factor = betas.columns.values[1] betas = betas.sort(factor) pfValuesAll = pd.DataFrame() for n in range(10): wTickers = betas.head(N * (n+1)).tail(N)[['ticker']].reset_index(drop=True) wTickers['weight'] = 1/np.float64(N) (pfValues, pfRecord) = functions.testPortfolio(StockPrices, StockReturns, SP500Prices, StockBeta, wTickers, START) pfValues['group'] = n+1 pfValuesAll = pfValuesAll.append(pfValues) color_cycle = ['b', 'g', 'r', 'c', 'm', 'y', 'k', 'lightblue', 'gold', 'pink'] for n in range(10): pfValues = pfValuesAll[pfValuesAll['group'] == n+1 ] tmpLabel = r'group %d' % (n+1) plt.plot(pfValues['date'], pfValues['value'], label=tmpLabel, color=color_cycle[n], linewidth=3.0) # plt.legend('beta group %d' % (n+1)) plt.ylabel('Portfolio Value') plt.legend(bbox_to_anchor=(0.2, 1)) plt.show() return pfValuesAll
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) tmp_df = pfValues[['date', 'value']].rename(columns={'value': sector}) if sector_values.empty: sector_values = tmp_df else: sector_values = sector_values.merge(tmp_df) def plot_sector_returns(sector_values): color_cycle = [ 'b', 'g', 'r', 'c', 'm', 'y', 'k', 'lightblue', 'gold', 'pink' ] n = 0 font_size = 15 for sector in sector_list:
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) tmp_df = pfValues[['date', 'value']].rename(columns={'value': sector}) if sector_values.empty: sector_values = tmp_df else: sector_values = sector_values.merge(tmp_df) def plot_sector_returns(sector_values): color_cycle = ['b', 'g', 'r', 'c', 'm', 'y', 'k', 'lightblue', 'gold', 'pink'] n = 0 font_size = 15 for sector in sector_list: plt.plot(sector_values['date'], sector_values[sector], label=sector, color=color_cycle[n], linewidth=3.0) # plt.legend('beta group %d' % (n+1)) n += 1
import ReadData import functions # from dateutil import rrule # from datetime import datetime DataFolder = 'E:\Dropbox\CQA 2014\Data' CAPITAL = 1e7 BUILD_DATE = datetime.datetime(2004, 11, 2) (StockPrices, SP500Prices, CarhartDaily, StockBeta) = ReadData.ReadAll(DataFolder) StockReturns = ReadData.ReadReturn(DataFolder) minDate = StockPrices['date'].min() maxDate = StockPrices['date'].max() tickers = ReadData.ReadTickers(DataFolder) tickers = tickers[tickers['ticker'] != 'TDS'].reset_index(drop=True) wTickers = tickers wTickers['weight'] = 1/np.float64(wTickers.shape[0]) (pfValues, pfRecord) = functions.testPortfolio(StockPrices, StockReturns, SP500Prices, StockBeta, wTickers, BUILD_DATE) functions.summarize(pfValues, pfRecord, tickers, CAPITAL, BETA_BOUND=0.5) # findBug = pfRecord[pfRecord['date'] < datetime.datetime(2006,1,1)] # findBug = findBug[findBug['value']>500000] # # tds = pfRecord[(pfRecord['ticker'] == 'TDS') & # (pfRecord['date'] > datetime.datetime(2005,5,12)) & # (pfRecord['date'] < datetime.datetime(2005,5,20))] # # test = StockReturns[StockReturns['return'] > 1]