def plot_return_vs_beta():
    Coef = ReadData.GetCoef(START_TRAIN, END_TRAIN, StockReturns, CarhartDaily,
                            SP500Returns, DataFolder)
    avaTickers = pd.merge(
        Coef[['ticker']],
        StockBeta[np.isnan(StockBeta.cqaBeta) == False][['ticker']])
    avaTickers = pd.merge(
        avaTickers,
        StockPrices[StockPrices.date == START_TRAIN][['ticker']],
        on='ticker')
    avaTickers = pd.merge(
        avaTickers,
        StockPrices[StockPrices.date == END_TRAIN][['ticker']],
        on='ticker')
    avaTickers = pd.merge(avaTickers,
                          StockPrices[StockPrices.date == START][['ticker']],
                          on='ticker')
    avaTickers = pd.merge(avaTickers,
                          StockPrices[StockPrices.date == END][['ticker']],
                          on='ticker')
    Coef = Coef.merge(avaTickers, on='ticker')

    stock_returns_sample = StockReturns[(StockReturns['endDate'] >= START)
                                        & (StockReturns['endDate'] <= END)]
    stock_annual_returns = stock_returns_sample.groupby(
        'ticker').sum().reset_index()
    stock_annual_returns['return'] = stock_annual_returns['return'].map(
        math.exp) - 1

    beta_return_comp = Coef[['ticker', 'Mkt-RF']].merge(stock_annual_returns)
    # plt.figure()
    fig = plt.figure()
    ax = fig.add_subplot(1, 1, 1)
    fmt = '%.0f%%'  # Format you want the ticks, e.g. '40%'
    yticks = mtick.FormatStrFormatter(fmt)
    ax.yaxis.set_major_formatter(yticks)
    # plt.scatter(beta_return_comp['Mkt-RF'], beta_return_comp[ 'return'], marker='x')
    ax.scatter(beta_return_comp['Mkt-RF'],
               beta_return_comp['return'] * 100,
               marker='o',
               s=40,
               color='#FF6E1E')
    matplotlib.rc('xtick', labelsize=36)
    matplotlib.rc('ytick', labelsize=36)
    plt.xlabel('Stock Beta', fontsize=36)
    plt.ylabel('Annual Return (in percentage)', fontsize=36)
    plt.grid()
    plt.title('Return vs Beta (Nov 2013-Oct 2014)', fontsize=36)
    plt.gcf().subplots_adjust(left=0.15, bottom=0.14)
    plt.show()
Пример #2
0
##beta_corr2 = np.corrcoef(aapl3y['return-RF'], aapl3y['SP500-RF'])[1,0]
##y = aapl3y['return-RF']
##X = aapl3y['SP500-RF']
##
##def fun1(y, X):
##    model = sm.OLS(y, X).fit()
##    print aaplModel.summary()
##fun1(y, X) # this returns 0.84, which is very close to beta_CQA = 0.83
##fun1(y, sm.add_constant(X))

##############################################################################
# Calculate or Read regression coefficients, depending on your own needs
# Coef = ReadData.ReadCoef(START_TRAIN, END_TRAIN, DataFolder)
# Coef2 = ReadData.ReadCoef(datetime.datetime(2011,11,1),
#                          datetime.datetime(2014,10,31), DataFolder)
Coef = ReadData.GetCoef(START_TRAIN, END_TRAIN, StockReturns, CarhartDaily,
                        SP500Returns, DataFolder)
# Coef2 = ReadData.GetCoef(datetime.datetime(2011,11,1),
#                          datetime.datetime(2014,10,31),
#                          StockReturns, CarhartDaily, SP500Returns, DataFolder)

avaTickers = pd.merge(
    Coef[['ticker']],
    StockBeta[np.isnan(StockBeta.cqaBeta) == False][['ticker']])
avaTickers = pd.merge(avaTickers,
                      StockPrices[StockPrices.date == START_TRAIN][['ticker']],
                      on='ticker')
avaTickers = pd.merge(avaTickers,
                      StockPrices[StockPrices.date == END_TRAIN][['ticker']],
                      on='ticker')
avaTickers = pd.merge(avaTickers,
                      StockPrices[StockPrices.date == START][['ticker']],