社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

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

元宵大师 • 6 年前 • 946 次点击  
阅读 63

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

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

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

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

首先使用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数据合成一分钟数据。如下所示:

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线图,如下图所示:

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

# 获取大单交易数据,默认为大于等于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流通市值。
复制代码

关于完整代码可以加入小册子交流群获取。更多的量化交易内容欢迎大家订阅小册子阅读

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/47183