Python
凭借其在数据科学领域积累的丰富生态,已然成为专业「量化分析」中必不可少的技术手段。今天要给大家分享的例子,就展示了如何基于Python
中常用的numpy
、pandas
等常用数据分析处理框架,针对「沪深市场全量股票」,基于示例技术指标,示范「个股量化选择」的基本过程:
1 相关库的导入
分析过程需要用到的库如下,其中numpy
、pandas
等库用于实现分析过程的「数据处理」及「运算」,xtquant
用于快捷「获取」股票历史行情数据,matplotlib
则用于对策略过程及效果进行「可视化」:
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免费获取方式见文章末尾# 获取沪深全量股票代码
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'] ]
# 批量下载沪深全部股票近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 历史行情数据清洗转换
为了进行下一步的指标计算,我们需要对先前下载提取的日线历史行情数据进行「清洗转换」,通过下面的代码,即可将上一步的原始数据转换为标准的「数据框」格式:
# 转换为分析所需标准数据框格式
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」只个股:
# 计算个股年化波动率
(
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实现量化策略回测一文中示例的简单均线策略为例,其中相关参数设置如下,这里使用了较小的均线窗口大小,以尝试捕捉更小的波动周期:
# 回测模拟相关参数设置
initial_cash = 100000 # 初始资金
commission_rate = 0.0001 # 交易佣金率
min_commission = 5 # 交易最低佣金
short_window = 5 # 短期均线窗口大小
long_window = 20 # 长期均线窗口大小
针对301182.SZ
在过去一年内的回测结果如下,周期内回测收益率达到「45%」:
请备注:”昵称-学校/公司-研究方向“,例如:”张小明-浙大-CV“加群。
(也可以加入机器学习交流qq群772479961)