多股票投资组合回报与再平衡

时间:2019-05-13 12:56:43

标签: python pandas portfolio

因此,我有一个投资组合组成(投资组合中包含一些股票),并且在特定日期我需要重新平衡-这意味着投资组合的组成发生了变化。 数据框包含列['名称'; 'Date_rebalancing'; '重量']

然后我有了另一个大数据框,其中包含所有可能股票的每日收益。 我需要每天提取投资组合收益。

因此,当重新平衡日期发生时,Portfolio_return_next_day是sumproduct(weights; return_only_for_those_companies)。计算每日收益。

stock_return=prices.apply(lambda x: x/x.shift(1)-1)

我希望获得每日投资组合回报列表

2 个答案:

答案 0 :(得分:0)

在大数据框架上,您需要进行过滤以使其与投资组合匹配。因此,请使用.isin()

df_select = df_big.loc[df_big['name'].isin.[df_port['name'],:]

df_select现在是一个仅包含您的股票每日价值的数据框。为了获得每日收益,有一个内置函数pct_return()。 (#默认为一个周期)

假设您的收盘价栏称为“收盘价”。然后根据每日收益创建一个新列。

df_select['return'] = df['Close'].pct_return()  

这将为您提供带有库存和日收益率百分比的数据框。

答案 1 :(得分:0)

df_unique_dates是应进行重新平衡的日期。我已经完成了stock_return中每只股票的回报,但是在每个重新平衡日,我只需要选择出现在投资组合list_stocks中的那些股票

    for i in range(len(df_unique_dates)):
    list_stocks=dataset.Name.loc[df_unique_dates[i]]
    for j in range(len(stock_return)):
        if stock_return.index[j]>df_unique_dates[i] and stock_return.index[j]<=df_unique_dates[i+1]:
             stock_return['portfolio']=0.1*stock_return[list_stocks].sum(axis=1)
stock_return