Yoonsa 2021-02-23 16:01 采纳率: 0%
浏览 272

计算m只股票n年每年的日收益率标准差的Python编程代码。

计算m只股票n年每年的日收益率标准差的Python编程代码。

  • 写回答

1条回答 默认 最新

  • 木心爱编程 2025-11-10 10:48
    关注

    这是计算m只股票n年每年日收益率标准差的Python代码,基于pandas库实现,可以参考参考,适用于多股票多年度的收益率标准差计算:

    import pandas as pd
    import numpy as np
    
    def calculate_annual_std(stock_data_path):
        """
        计算多只股票每年的日收益率标准差
        
        参数:
            stock_data_path: 股票数据CSV文件路径,需包含以下列:
                            - date: 交易日期(字符串格式,如'2020-01-02')
                            - code: 股票代码(如'000001')
                            - close: 当日收盘价
        
        返回:
            DataFrame: 包含股票代码、年份、对应年份日收益率标准差的结果
        """
        # 1. 加载数据并预处理日期格式
        df = pd.read_csv(stock_data_path)
        df['date'] = pd.to_datetime(df['date'])  # 转换为datetime类型,方便提取年份
        
        # 2. 按股票代码和日期排序(确保时间顺序正确)
        df = df.sort_values(by=['code', 'date'])
        
        # 3. 计算日收益率(两种方式可选,默认用简单收益率)
        # 方式1:简单收益率 = (今日收盘价 - 昨日收盘价) / 昨日收盘价
        df['daily_return'] = df.groupby('code')['close'].pct_change()
        
        # 方式2:对数收益率 = ln(今日收盘价 / 昨日收盘价)(如需使用可替换上面一行)
        # df['daily_return'] = np.log(df.groupby('code')['close'].shift(-1) / df['close'])
        
        # 4. 提取年份(从日期中提取年份)
        df['year'] = df['date'].dt.year
        
        # 5. 按股票代码和年份分组,计算每组日收益率的标准差
        # 注:pandas的std()默认计算样本标准差(ddof=1),符合金融分析习惯
        annual_std = df.groupby(['code', 'year'])['daily_return'].std().reset_index()
        
        # 重命名列名,增强可读性
        annual_std = annual_std.rename(columns={'daily_return': 'annual_daily_std'})
        
        return annual_std
    
    
    # 使用示例
    if __name__ == "__main__":
        # 假设数据文件名为'stock_data.csv',与代码同目录
        result = calculate_annual_std('stock_data.csv')
        
        # 打印结果(前10行)
        print("股票每年日收益率标准差结果:")
        print(result.head(10))
        
        # 可选:将结果保存为CSV
        result.to_csv('annual_std_result.csv', index=False)
        print("\n结果已保存至'annual_std_result.csv'")
    

    代码说明:

    1. 数据要求:输入的CSV文件需包含三列:date(交易日期)、code(股票代码)、close(收盘价),示例格式如下:

      date,code,close
      2020-01-02,000001,10.5
      2020-01-03,000001,10.8
      2020-01-02,000002,22.3
      ...
      
    2. 核心步骤

      • 加载数据并转换日期格式
      • 按股票代码和日期排序(确保时间序列连续性)
      • 计算日收益率(支持简单收益率或对数收益率,按需选择)
      • 按股票代码和年份分组,计算每组的标准差
      • 整理结果并返回
    3. 输出结果:返回一个DataFrame,包含三列:code(股票代码)、year(年份)、annual_daily_std(该年份的日收益率标准差)

    使用提示:

    • 若数据中存在缺失值(如停牌导致无交易),建议先通过df.dropna(subset=['close'])处理
    • 对数收益率和简单收益率的选择取决于具体分析场景,金融中两种方式均常用
    • 结果中的标准差是样本标准差(自由度为n-1),符合大多数统计分析需求

    运行代码前需确保安装pandas库(如未安装,可通过pip install pandas安装)。

    评论

报告相同问题?