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()
Example #3
0
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
Example #4
0
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()