前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >用Python实现量化个股选择

用Python实现量化个股选择

作者头像
朱卫军 AI Python
发布2025-01-08 10:57:59
发布2025-01-08 10:57:59
8600
代码可运行
举报
文章被收录于专栏:Python大数据分析
运行总次数:0
代码可运行

Python凭借其在数据科学领域积累的丰富生态,已然成为专业「量化分析」中必不可少的技术手段。今天要给大家分享的例子,就展示了如何基于Python中常用的numpypandas等常用数据分析处理框架,针对「沪深市场全量股票」,基于示例技术指标,示范「个股量化选择」的基本过程:

1 相关库的导入

分析过程需要用到的库如下,其中numpypandas等库用于实现分析过程的「数据处理」「运算」xtquant用于快捷「获取」股票历史行情数据,matplotlib则用于对策略过程及效果进行「可视化」

代码语言:javascript
代码运行次数:0
复制
import numpy as np
import pandas as pd
from tqdm import tqdm
from xtquant import xtdata # qmt行情数据模块
from datetime import datetime, timedelta
2 获取沪深市场全部股票历史行情数据

在导入相关库后,我们首先需要获取沪深市场「全量」股票的「历史行情数据」

我们基于xtquant中的行情数据模块,直接下载并提取沪深市场「近1年」的日线行情数据(xtquant调用股票行情数据使用需配合本机QMT程序):

QMT免费获取方式见文章末尾

代码语言:javascript
代码运行次数:0
复制
# 获取沪深全量股票代码
stock_codes = xtdata.get_stock_list_in_sector('沪深A股')

# 剔除上市晚于一年前的个股
start_time = (datetime.now() - timedelta(days=365)).strftime('%Y%m%d')
stock_codes = [
    stock_code for stock_code in stock_codes
    if xtdata.get_instrument_detail(stock_code)['OpenDate'] < start_time
]

# 批量下载沪深全部股票近1年历史日线行情数据
for target_stock in tqdm(stock_codes):
    xtdata.download_history_data(
        target_stock, 
        period='1d', 
        start_time=start_time
    )

# 提取数据,限定所需的字段为收盘价
raw_history = xtdata.get_market_data(
    stock_list=stock_codes, 
    period='1d', 
    start_time=start_time,
    field_list=['close']
)
3 历史行情数据清洗转换

为了进行下一步的指标计算,我们需要对先前下载提取的日线历史行情数据进行「清洗转换」,通过下面的代码,即可将上一步的原始数据转换为标准的「数据框」格式:

代码语言:javascript
代码运行次数:0
复制
# 转换为分析所需标准数据框格式
history_df = (
    raw_history['close']
    .T
    .reset_index(drop=False)
    .melt(id_vars='index', var_name='code', value_name='close')
    .rename(columns={'index': 'datetime'})
)
history_df.tail()
4 计算各股票年化波动率

以计算年化波动率为例,我们基于pandas的分组聚合运算,快捷统计出全部个股的年化波动率,进行降序排列后查看年化波动率最大的「前10」只个股:

代码语言:javascript
代码运行次数:0
复制
# 计算个股年化波动率

(
    history_df
    .groupby('code', as_index=False)
    .agg(
        年化波动率=pd.NamedAgg(
            column='close',
            aggfunc=lambda s: ((s / s.shift()) - 1).std() * np.sqrt(len(s))
        )
    )
    .sort_values('年化波动率', ascending=False, ignore_index=True)
    .head(10)
)
5 回测模拟

挑选年化波动率靠前的个股中「非st」的,譬如其中的301182.SZ,以用Python实现量化策略回测一文中示例的简单均线策略为例,其中相关参数设置如下,这里使用了较小的均线窗口大小,以尝试捕捉更小的波动周期:

代码语言:javascript
代码运行次数:0
复制
# 回测模拟相关参数设置

initial_cash = 100000  # 初始资金
commission_rate = 0.0001  # 交易佣金率
min_commission = 5  # 交易最低佣金
short_window = 5 # 短期均线窗口大小
long_window = 20 # 长期均线窗口大小

针对301182.SZ在过去一年内的回测结果如下,周期内回测收益率达到「45%」

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-01-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python大数据分析 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 相关库的导入
  • 2 获取沪深市场全部股票历史行情数据
  • 3 历史行情数据清洗转换
  • 4 计算各股票年化波动率
  • 5 回测模拟
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档