在进行股票市场的量化分析时,我们经常关注不同指数在不同月份的表现,尝试发现其中的规律,从而制定更加科学的投资策略。通过使用Python的统计分析工具,我对沪深300、上证50、中证500、创业板等多个指数在过去几年内的月度表现进行了详细分析,并得出了有趣的结论。
数据准备与处理
首先,获取了这些指数的历史数据,时间范围涵盖了从2014年到2023年的全部交易日。利用AkShare工具,我们提取了沪深300、上证50、中证500和创业板指数的每日收盘价。为了便于计算每月的涨跌幅,我们对数据进行了如下处理:
将每日收盘价转换为月度数据,即取每个月最后一个交易日的收盘价。
计算每个月的涨跌幅,具体方法是用本月最后一个交易日的收盘价除以上个月最后一个交易日的收盘价
对每年的同一月份的数据取平均值,得到每个指数在每个月的平均涨跌幅。
部分核心代码如下:
```
def calculate_monthly_avg_change(index_code_list, start_year, end_year):
"""
计算给定指数列表在指定年份范围内每个月的平均涨跌情况。
:param index_code_list: 指数代码列表
:param start_year: 开始年份
:param end_year: 结束年份
:return: 包含每个指数每个月平均涨跌情况的DataFrame
"""
all_data = []
for index_code in index_code_list:
# 获取开始日期和结束日期
start_date_str = f"{start_year - 1}-01-01"
end_date_str = f"{end_year}-12-31"
# 获取指数历史数据
index_data = AkShareUtils.get_index_data(index_code, start_date_str, end_date_str)
省略部分代码。。。。
all_data.append(index_data)
# 合并所有指数的数据
combined_data = pd.concat(all_data)
# 计算每年每个月的平均涨跌幅
monthly_avg_change = combined_data.groupby(["index_code", '月'])['月度涨跌幅'].mean().reset_index()
monthly_avg_change.columns = ["指数代码", '月', '平均月度涨跌幅']
monthly_avg_change['平均月度涨跌幅'] = monthly_avg_change['平均月度涨跌幅'] * 100
return monthly_avg_change
```
输出结果:
数据准备与处理
首先,获取了这些指数的历史数据,时间范围涵盖了从2014年到2023年的全部交易日。利用AkShare工具,我们提取了沪深300、上证50、中证500和创业板指数的每日收盘价。为了便于计算每月的涨跌幅,我们对数据进行了如下处理:
将每日收盘价转换为月度数据,即取每个月最后一个交易日的收盘价。
计算每个月的涨跌幅,具体方法是用本月最后一个交易日的收盘价除以上个月最后一个交易日的收盘价
对每年的同一月份的数据取平均值,得到每个指数在每个月的平均涨跌幅。
部分核心代码如下:
```
def calculate_monthly_avg_change(index_code_list, start_year, end_year):
"""
计算给定指数列表在指定年份范围内每个月的平均涨跌情况。
:param index_code_list: 指数代码列表
:param start_year: 开始年份
:param end_year: 结束年份
:return: 包含每个指数每个月平均涨跌情况的DataFrame
"""
all_data = []
for index_code in index_code_list:
# 获取开始日期和结束日期
start_date_str = f"{start_year - 1}-01-01"
end_date_str = f"{end_year}-12-31"
# 获取指数历史数据
index_data = AkShareUtils.get_index_data(index_code, start_date_str, end_date_str)
省略部分代码。。。。
all_data.append(index_data)
# 合并所有指数的数据
combined_data = pd.concat(all_data)
# 计算每年每个月的平均涨跌幅
monthly_avg_change = combined_data.groupby(["index_code", '月'])['月度涨跌幅'].mean().reset_index()
monthly_avg_change.columns = ["指数代码", '月', '平均月度涨跌幅']
monthly_avg_change['平均月度涨跌幅'] = monthly_avg_change['平均月度涨跌幅'] * 100
return monthly_avg_change
```
输出结果: