Python计算股票收益率问题

在这个代码中,我们首先使用yfinance库获取股票价格数据,指定了股票代码、开始日期和结束日期。然后,我们将日期列转换为DatetimeIndex,以便在后面的计算中使用日期索引。接着,我们使用resample()函数将股票数据按月重采样,并使用ffill()函数来填充缺失值。最后,我们使用pct_change()函数计算每月的收益率,并输出结果。需要注意的是,这个示例代码中只是基本的计算方法,实际应用中可能需要针对不同的股票和时间段进行调整。

img

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答来自chatgpt:

    回答:

    首先,为了对不同的股票和时间段进行调整,我们需要定义一个函数,让其可以接受股票代码、开始日期和结束日期作为输入。这个函数可以被称为calculate_returns(),它的实现步骤如下:

    1. 引入yfinance库,并使用yfinance.Ticker()函数获取股票数据
    import yfinance as yf
    ticker_data = yf.Ticker("AAPL")
    
    1. 使用yfinance里的history()函数,指定起始日期和结束日期,获取历史股票价格数据。
    ticker_price = ticker_data.history(start='2019-01-01', end='2021-12-31')
    
    1. 使用resample函数按月重采样数据,并使用ffill()函数填充缺失值
    ticker_price_monthly = ticker_price.resample('M').ffill()
    
    1. 使用pct_change()函数计算每月股票价格的收益率
    ticker_returns = ticker_price_monthly.pct_change()
    
    1. 针对多个股票和时间段,定义一个函数calculate_returns(),让其可以循环遍历多个股票和时间段,并按照以上步骤获取每个股票对应时间段内的收益率。返回的结果可以是一个带有多个标签的DataFrame,每个标签表示一个股票对应的收益率数据。
    def calculate_returns(ticker_list, start_date_list, end_date_list):
        """
        计算多个股票在不同时间段下的收益率
        :param ticker_list: 股票代码列表
        :param start_date_list: 开始日期列表
        :param end_date_list: 结束日期列表
        :return: 收益率DataFrame
        """
        result_df = pd.DataFrame()
        for i in range(len(ticker_list)):
            # 获取股票价格数据
            ticker_data = yf.Ticker(ticker_list[i])
            ticker_price = ticker_data.history(start=start_date_list[i], end=end_date_list[i])
    
            # 月度重采样和填充缺失值
            ticker_price_monthly = ticker_price.resample('M').ffill()
    
            # 计算收益率
            ticker_returns = ticker_price_monthly.pct_change()
    
            # 将收益率添加到结果DataFrame中
            result_df[ticker_list[i]] = ticker_returns['Close']
        return result_df
    

    这样,我们就可以通过calculate_returns()函数计算多个股票在不同时间段下的收益率。例如,我们可以调用这个函数查看"AAPL"股票在2019年到2021年的收益率:

    ticker_list = ['AAPL']
    start_date_list = ['2019-01-01']
    end_date_list = ['2021-12-31']
    
    calculate_returns(ticker_list, start_date_list, end_date_list)
    

    输出结果如下:

    此外,我们还可以多次调用calculate_returns()函数来计算不同股票和时间段的收益率,并将结果DataFrame合并在一起。例如,我们可以调用以下代码来计算"AAPL"、"TSLA"、"MSFT"三支股票在2019年到2021年的收益率,并将结果合并在一起:

    ticker_list = ['AAPL', 'TSLA', 'MSFT']
    start_date_list = ['2019-01-01', '2019-01-01', '2019-01-01']
    end_date_list = ['2021-12-31', '2021-12-31', '2021-12-31']
    
    result_df = calculate_returns(ticker_list, start_date_list, end_date_list)
    result_df.head()
    

    输出结果如下:

    最后,我们可以使用pandas的to_csv()函数将结果DataFrame保存到csv文件中,以便进一步分析和可视化:

    result_df.to_csv('stock_returns.csv')
    

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^