def get_bab_pf_values(StockReturns): first_date = StockPrices['date'].min() last_date = StockPrices['date'].max() stock_first = StockPrices[StockPrices['date'] == first_date][['ticker']].reset_index(drop=True) stock_last = StockPrices[StockPrices['date'] == last_date][['ticker']].reset_index(drop=True) stock_universe = stock_first.merge(stock_last).merge(StockBeta) tickers = stock_universe[['ticker']] # test_dates = np.sort(StockPrices['date'].astype(datetime.datetime).unique()) build_start_date = datetime.datetime(2011, 11, 1) build_end_date = datetime.datetime(2014, 11, 7) test_start_date = datetime.datetime(2014, 11, 10) test_end_date = datetime.datetime(2015, 1, 31) decay = 0.003 prices_build = StockPrices[StockPrices['date'] == build_end_date][['ticker', 'adj_close']] (Coef, Res) = functions.wReg(StockReturns, CarhartDaily, tickers, decay, build_start_date, build_end_date) 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 font_size = 20 # color_cycle = ['b', 'g', 'r', 'c', 'm', 'y', 'k', 'lightblue', 'gold', 'pink'] color_cycle = [] for n in range(10): color_cycle.append((n * 0.1, 1.0 - n * 0.1, 0.0)) pfValuesAll = pd.DataFrame() for n in range(10): tmpData = sortCoef.head(N * (n + 1)).tail(N) mean_beta = tmpData['beta'].mean() wTickers = tmpData[['ticker']].reset_index(drop=True) wTickers['weight'] = 1 / np.float64(N) portfolio = wTickers.merge(prices_build).rename(columns={'adj_close': 'price'}) portfolio['nShare'] = (CAPITAL * portfolio['weight'] / portfolio['price']).map(functions.intPart) pfValues = functions.testPortfolio_simple(StockPrices, StockReturns, SP500Prices, StockBeta, portfolio, test_start_date, test_end_date) pfValues['beta group'] = n pfValues['mean beta'] = mean_beta pfValues['value'] = pfValues['value'] + CAPITAL - pfValues['value'][0] plt.plot(pfValues['date'], pfValues['value'], linewidth=2.0, color=color_cycle[n], label='mean beta %0.2f' % mean_beta) pfValuesAll = pfValuesAll.append(pfValues) matplotlib.rc('xtick', labelsize=font_size) matplotlib.rc('ytick', labelsize=font_size) # plt.title('Performance of Beta Groups', size=font_size) plt.ylabel('Account Value', size=font_size) plt.xlabel('Date', size=font_size) plt.grid() plt.legend(loc=3) plt.show() return pfValuesAll
sol = solvers.lp(-mBeta, A, b) w_res = sol['x'] print 'cqaBeta = %.4f' % np.float64(w_res.trans() * mCqaBeta)[0,0] print 'beta = %.4f' % np.float64(w_res.trans() * mBeta)[0,0] wTickers = pfTickers wTickers['weight'] = w_res return wTickers font_size = 20 color_cycle = ['b', 'g', 'r', 'c', 'm', 'y', 'k', 'lightblue', 'gold', 'pink'] k = 0 for SECTOR_WEIGHT in [0.1, 0.05, 0.04, 0.03, 0.02, 0.01, 0.005, 0.001]: wTickers = pfOptimizer_sector(long_tickers, short_tickers, Coef, StockBeta, industry_data, BETA_BOUND, WEIGHT_BOUND, SECTOR_WEIGHT) wTickers = wTickers[abs(wTickers['weight']) > 0.002] portfolio = wTickers.merge(prices_build).rename(columns={'adj_close': 'price'}) portfolio['nShare'] = (portfolio['weight'] * CAPITAL / portfolio['price']).map(functions.intPart) pfValues = functions.testPortfolio_simple(StockPrices, StockReturns, SP500Prices, StockBeta, portfolio, test_start_date) pfValues['value'] = pfValues['value'] + CAPITAL - pfValues['value'][0] plt.plot(pfValues['date'], pfValues['value'], linewidth=2.0, color=color_cycle[k], label='max sector weight %s' % SECTOR_WEIGHT) k += 1 plt.title('Account Value vs Time', size=font_size) plt.ylabel('Account Value', size=font_size) plt.xlabel('Date', size=font_size) plt.grid() plt.legend(loc=2) plt.show()
def get_bab_pf_values(StockReturns): first_date = StockPrices['date'].min() last_date = StockPrices['date'].max() stock_first = StockPrices[StockPrices['date'] == first_date][[ 'ticker' ]].reset_index(drop=True) stock_last = StockPrices[StockPrices['date'] == last_date][[ 'ticker' ]].reset_index(drop=True) stock_universe = stock_first.merge(stock_last).merge(StockBeta) tickers = stock_universe[['ticker']] # test_dates = np.sort(StockPrices['date'].astype(datetime.datetime).unique()) build_start_date = datetime.datetime(2011, 11, 1) build_end_date = datetime.datetime(2014, 11, 7) test_start_date = datetime.datetime(2014, 11, 10) test_end_date = datetime.datetime(2015, 1, 31) decay = 0.003 prices_build = StockPrices[StockPrices['date'] == build_end_date][[ 'ticker', 'adj_close' ]] (Coef, Res) = functions.wReg(StockReturns, CarhartDaily, tickers, decay, build_start_date, build_end_date) 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 font_size = 20 # color_cycle = ['b', 'g', 'r', 'c', 'm', 'y', 'k', 'lightblue', 'gold', 'pink'] color_cycle = [] for n in range(10): color_cycle.append((n * 0.1, 1.0 - n * 0.1, 0.0)) pfValuesAll = pd.DataFrame() for n in range(10): tmpData = sortCoef.head(N * (n + 1)).tail(N) mean_beta = tmpData['beta'].mean() wTickers = tmpData[['ticker']].reset_index(drop=True) wTickers['weight'] = 1 / np.float64(N) portfolio = wTickers.merge(prices_build).rename( columns={'adj_close': 'price'}) portfolio['nShare'] = (CAPITAL * portfolio['weight'] / portfolio['price']).map(functions.intPart) pfValues = functions.testPortfolio_simple(StockPrices, StockReturns, SP500Prices, StockBeta, portfolio, test_start_date, test_end_date) pfValues['beta group'] = n pfValues['mean beta'] = mean_beta pfValues['value'] = pfValues['value'] + CAPITAL - pfValues['value'][0] plt.plot(pfValues['date'], pfValues['value'], linewidth=2.0, color=color_cycle[n], label='mean beta %0.2f' % mean_beta) pfValuesAll = pfValuesAll.append(pfValues) matplotlib.rc('xtick', labelsize=font_size) matplotlib.rc('ytick', labelsize=font_size) # plt.title('Performance of Beta Groups', size=font_size) plt.ylabel('Account Value', size=font_size) plt.xlabel('Date', size=font_size) plt.grid() plt.legend(loc=3) plt.show() return pfValuesAll
N = sortCoef.shape[0] / 10 font_size = 20 color_cycle = ['b', 'g', 'r', 'c', 'm', 'y', 'k', 'lightblue', 'gold', 'pink'] pfValuesAll = pd.DataFrame() for n in range(10): tmpData = sortCoef.head(N * (n + 1)).tail(N) mean_beta = tmpData['beta'].mean() wTickers = tmpData[['ticker']].reset_index(drop=True) wTickers['weight'] = 1 / np.float64(N) portfolio = wTickers.merge(prices_build).rename( columns={'adj_close': 'price'}) portfolio['nShare'] = (CAPITAL * portfolio['weight'] / portfolio['price']).map(functions.intPart) pfValues = functions.testPortfolio_simple(StockPrices, StockReturns, SP500Prices, StockBeta, portfolio, test_start_date) pfValues['beta group'] = n pfValues['mean beta'] = mean_beta pfValues['value'] = pfValues['value'] + CAPITAL - pfValues['value'][0] plt.plot(pfValues['date'], pfValues['value'], linewidth=2.0, color=color_cycle[n], label='mean beta %s' % mean_beta) pfValuesAll = pfValuesAll.append(pfValues) plt.title('Performance of Beta Groups', size=font_size) plt.ylabel('Account Value', size=font_size) plt.xlabel('Date', size=font_size) plt.grid()