Python量化交易进阶讲堂-股票分笔数据跨周期处理

《Python实战-构建基于股票的量化交易系统》小册子主要侧重于 Python 实战讲解,但在内容设计上提供了前置基础章节帮助读者快速掌握基础工具的使用。同时咱们会持续更新一些关于Python和量化相关扩展文章,帮助你们夯实基础和增值学习效果。目前已经推出以下文章: python

在小册子《股票数据分析:差别化分析经常使用股票交易数据接口》一节中介绍了获取日级别股票行情数据的方法,其实最原始的数据是分笔交易数据,行情软件的各类周期的数据都是经过分笔数据跨周期的转换造成的。bash

本次专栏篇咱们来介绍分笔交易数据的获取和处理方法。markdown

首先使用tushare库get_tick_data()接口获取浙大网新2019-08-08的历史分笔数据,以下所示:工具

df = ts.get_tick_data('600797',date='2019-08-08',src='tt')
print(df.head(10))
""" time price change volume amount type 0 09:25:05 7.89 0.09 385 303765 卖盘 1 09:30:03 7.90 0.01 591 466402 买盘 2 09:30:06 7.90 0.00 371 292885 卖盘 3 09:30:08 7.91 0.01 96 75837 买盘 4 09:30:12 7.92 0.01 43 34021 买盘 5 09:30:15 7.90 -0.02 1 790 卖盘 6 09:30:18 7.90 0.00 61 48143 买盘 7 09:30:21 7.91 0.01 15 11860 买盘 8 09:30:24 7.91 0.00 5 3955 买盘 9 09:30:27 7.90 -0.01 10 7900 卖盘 """
复制代码

返回值中time时间、price成交价格、change价格变更、volume成交手、amount成交金额(元)、type买卖类型【买盘、卖盘、中性盘】。性能

将分笔数据的行索引转换为时间序列,以下所示:学习

df_tick.index = pd.to_datetime(df_tick.time)
df_tick.drop(axis=1, columns='time', inplace=True)
print(df_tick.head(10))
""" price change volume amount type time 2019-08-10 09:25:05 7.89 0.09 385 303765 卖盘 2019-08-10 09:30:03 7.90 0.01 591 466402 买盘 2019-08-10 09:30:06 7.90 0.00 371 292885 卖盘 2019-08-10 09:30:08 7.91 0.01 96 75837 买盘 2019-08-10 09:30:12 7.92 0.01 43 34021 买盘 2019-08-10 09:30:15 7.90 -0.02 1 790 卖盘 2019-08-10 09:30:18 7.90 0.00 61 48143 买盘 2019-08-10 09:30:21 7.91 0.01 15 11860 买盘 2019-08-10 09:30:24 7.91 0.00 5 3955 买盘 2019-08-10 09:30:27 7.90 -0.01 10 7900 卖盘 """
复制代码

Pandas中提供了resample()方法对时间序列进行重采样,此处将获取到的tick数据合成一分钟数据。以下所示:spa

print(df_tick.price.resample('1min', closed='left', label='left').ohlc().head(20))
""" open high low close time 2019-08-10 09:25:00 7.89 7.89 7.89 7.89 2019-08-10 09:26:00 NaN NaN NaN NaN 2019-08-10 09:27:00 NaN NaN NaN NaN 2019-08-10 09:28:00 NaN NaN NaN NaN 2019-08-10 09:29:00 NaN NaN NaN NaN 2019-08-10 09:30:00 7.90 7.92 7.90 7.92 2019-08-10 09:31:00 7.91 7.92 7.90 7.91 2019-08-10 09:32:00 7.90 7.91 7.89 7.90 2019-08-10 09:33:00 7.89 7.91 7.89 7.90 2019-08-10 09:34:00 7.91 7.92 7.90 7.92 2019-08-10 09:35:00 7.92 7.94 7.91 7.93 2019-08-10 09:36:00 7.93 7.93 7.92 7.92 2019-08-10 09:37:00 7.93 7.93 7.91 7.91 2019-08-10 09:38:00 7.90 7.91 7.90 7.90 2019-08-10 09:39:00 7.90 7.90 7.89 7.90 2019-08-10 09:40:00 7.89 7.90 7.89 7.90 2019-08-10 09:41:00 7.90 7.90 7.89 7.89 2019-08-10 09:42:00 7.89 7.90 7.88 7.89 2019-08-10 09:43:00 7.89 7.89 7.88 7.89 2019-08-10 09:44:00 7.88 7.89 7.86 7.86 """

复制代码

处理非交易时间段的NaN数据, 将全部列都为NaN的行删除,以下所示:设计

df_min_ohlc = df_min_ohlc.dropna(axis=0,how='all') # NAN值删除 全部值都为缺失值时才删除该行
print(df_min_ohlc.head())
""" open high low close time 2019-08-10 09:25:00 7.89 7.89 7.89 7.89 2019-08-10 09:30:00 7.90 7.92 7.90 7.92 2019-08-10 09:31:00 7.91 7.92 7.90 7.91 2019-08-10 09:32:00 7.90 7.91 7.89 7.90 2019-08-10 09:33:00 7.89 7.91 7.89 7.90 """
复制代码

接下来咱们能够调用小册子《股票数据可视化:自定义Matplotlib版股票行情界面》的代码绘制K线图了,分别绘制1min和15min级别的K线图,以下图所示:code

另外tushare还提供了其余与分时交易数据相关的接口,好比: get_sina_dd()接口获取大单交易数据,默认为大于等于400手,也可经过vol参数指定返回具体成交量的交易数据,以下所示:orm

# 获取大单交易数据,默认为大于等于400手,数据来源于新浪财经。
data=ts.get_sina_dd('600797',date = '2019-08-08')
print(data.head(10))
""" code name time price volume preprice type 0 600797 浙大网新 15:00:00 8.01 253542 8.01 买盘 1 600797 浙大网新 14:56:18 8.01 45700 8.01 卖盘 2 600797 浙大网新 14:54:39 8.01 116400 8.01 买盘 3 600797 浙大网新 14:18:18 8.00 50000 8.00 买盘 4 600797 浙大网新 13:35:57 8.02 53100 8.01 卖盘 5 600797 浙大网新 13:33:57 8.03 42200 8.03 买盘 6 600797 浙大网新 13:25:18 8.01 64100 8.01 买盘 7 600797 浙大网新 13:25:15 8.01 41800 8.01 买盘 8 600797 浙大网新 13:22:57 8.04 135500 8.03 买盘 9 600797 浙大网新 13:22:00 8.01 44600 8.01 买盘 """

复制代码

get_today_ticks()接口获取当前交易日已经产生的分笔明细数据,不过要在交易进行中使用。

get_realtime_quotes()获取实时分笔数据,能够实时取得股票当前报价和成交信息,其中一种场景是,写一个python定时程序来调用本接口(可两三秒执行一次,性能与行情软件基本一致),而后经过DataFrame的矩阵计算实现交易监控,可实时监测交易量和价格的变化。

get_today_all()一次性获取当前交易全部股票的行情数据(若是是节假日,即为上一交易日,结果显示速度取决于网速)。以下所示:

data=ts.get_today_all()
print(data)
""" [Getting data:]############################################################ code name ... mktcap nmc 0 688388 嘉元科技 ... 1.470680e+06 3.365835e+05 1 688333 铂力特 ... 7.000000e+05 1.571451e+05 2 688188 柏楚电子 ... 2.425100e+06 5.555751e+05 3 688122 西部超导 ... 2.370954e+06 2.133204e+05 4 688099 晶晨股份 ... 6.166800e+06 5.598821e+05 5 688088 虹软科技 ... 2.791250e+06 2.612927e+05 6 688066 航天宏图 ... 1.011336e+06 2.293842e+05 7 688033 天宜上佳 ... 2.216313e+06 2.145303e+05 8 688029 南微医学 ... 1.628215e+06 3.735600e+05 ... ... ... ... ... ... 3743 600234 *ST山水 ... 1.447488e+05 1.447488e+05 3744 600228 ST昌九 ... 1.607191e+05 1.607191e+05 3745 600217 中再资环 ... 7.179371e+05 6.818769e+05 3746 600209 ST罗顿 ... 1.290693e+05 1.290693e+05 3747 600193 ST创兴 ... 1.552611e+05 1.552611e+05 3748 600186 *ST莲花 ... 1.741720e+05 1.741720e+05 3749 600179 ST安通 ... 3.836408e+05 1.737990e+05 3750 600163 中闽能源 ... 3.568091e+05 3.568091e+05 3751 600149 ST坊展 ... 1.927411e+05 1.927411e+05 [3752 rows x 15 columns] """
其中返回值包括code代码、name名称、changepercent涨跌幅、trade现价、open开盘价、high最高价、low最低价、settlement昨日收盘价、volume成交量、turnoverratio换手率、amount成交金额、per市盈率、pb市净率、mktcap总市值、nmc流通市值。
复制代码

关于完整代码能够加入小册子交流群获取。更多的量化交易内容欢迎你们订阅小册子阅读

相关文章
相关标签/搜索