示例#1
0
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
示例#5
0
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]