计算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'")代码说明:
数据要求:输入的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 ...核心步骤:
- 加载数据并转换日期格式
- 按股票代码和日期排序(确保时间序列连续性)
- 计算日收益率(支持简单收益率或对数收益率,按需选择)
- 按股票代码和年份分组,计算每组的标准差
- 整理结果并返回
输出结果:返回一个DataFrame,包含三列:
code(股票代码)、year(年份)、annual_daily_std(该年份的日收益率标准差)
使用提示:
- 若数据中存在缺失值(如停牌导致无交易),建议先通过
df.dropna(subset=['close'])处理 - 对数收益率和简单收益率的选择取决于具体分析场景,金融中两种方式均常用
- 结果中的标准差是样本标准差(自由度为n-1),符合大多数统计分析需求
运行代码前需确保安装pandas库(如未安装,可通过
pip install pandas安装)。解决 无用评论 打赏 举报