Code前端首页关于Code前端联系我们

Python量化交易高级讲座:详细数据处理与换算股票分时

terry 2年前 (2023-09-25) 阅读数 57 #后端开发

介绍了几种获取和处理日级市场数据的方法。其实最原始的数据是交易明细数据,行情软件通过明细数据跨周期转换形成各种周期数据和统计,比如分钟K线、每小时K线、日交易量、成交量、外部行情等。 、内部市场等指标。本节主要介绍如何解读和获取详细的股票交易数据,以及如何处理和修改详细的交易数据。

显示时间的详细数据解读

这里我们从自由市场软件中截取2020年1月23日某些股票交易的详细信息。我们看到交易详情包括时间、价格、当前交易量和交易金额。四个数据字段,如下图所示: Python量化交易进阶讲堂:股票分时明细数据的处理与转换

由于是自由行情软件,这里的“交易明细”数据每隔3-6秒记录一次(不同软件可能不同),显示的是匹配次数他们此时已经匹配了。总订单数,准确的说,是“分时交易”数据,即按照时间段统计的结果。交易数量栏显示本周期的交易总数。

这与“逐笔交易”数据不同。 “逐笔交易”数据记录了每笔交易的详细信息。该功能已包含在市场软件的收费范围内。例如图中显示如下数据: Python量化交易进阶讲堂:股票分时明细数据的处理与转换

我们看一下当前的成交量一栏。当前交易量是指当前股票时间的交易量,以手为单位。其中有红、绿、白三种颜色。红色代表活跃的买单,绿色代表活跃的卖单。此部分与“买卖明细五级”相关,如下图所示: Python量化交易进阶讲堂:股票分时明细数据的处理与转换

我们知道交易所交易规则是“价格优先、时间优先”,挂单价格高于当前价格。优先成交,因此活跃买单是指指定卖出价格的成交,即买卖窗口内“卖一”价格或以上的成交。主动卖单与主动买单相反。如果交易以“买一”或更低的价格完成,如果挂单价格低于当前价格,则交易将先完成。

买卖交易的情况可以从内部市场和外部市场来看,即外部市场代表活跃买单集合,内部市场代表活跃卖单集合。

当然,白色更容易理解,即表示活跃买单和活跃卖单相同的情况。

获取显示时间的详细数据

这里我们使用tushare库中的get_tick_data()接口来检索有关个股过去交易历史的详细数据。例如,我们获取股票“002372”在“2020-01-23”的历史数据如下:元)),交易类型类型[买入、卖出、中性]。我们通过市场软件交易明细验证该数据是否稳定。如下图所示: Python量化交易进阶讲堂:股票分时明细数据的处理与转换

然后使用小册子《差异化分析常用股票交易数据接口》部分的方法,将分割后的数据行索引转换为时间序列。转换后的数据如下所示:

"""
                         price  change  volume  amount type
time                                                   
2020-02-01 13:37:16  12.39   -0.01     126  156114   卖盘
2020-02-01 13:37:19  12.38   -0.01       1    1238   卖盘
2020-02-01 13:37:25  12.38    0.00      39   48322   卖盘
2020-02-01 13:37:28  12.39    0.01      25   30953   买盘
2020-02-01 13:37:37  12.38   -0.01       2    2476  中性盘
2020-02-01 13:37:40  12.36   -0.02      14   17345   卖盘
2020-02-01 13:37:43  12.40    0.04       1    1240   买盘
2020-02-01 13:37:46  12.40    0.00       1    1240   买盘
2020-02-01 13:37:49  12.40    0.00      63   77978   买盘
2020-02-01 13:37:58  12.39   -0.01       1    1239   买盘
"""

复制代码

对分时数据周期进行重新采样

Panda 提供了 resample() 方法来对时间序列进行重新采样。这里,将获取的tick数据合成为一分钟数据。关键代码如下:

df_min_ohlc = df_tick.price.resample('1min', closed='left', label='left').ohlc()
"""
                      open   high    low  close
time                                           
2020-02-01 09:25:00  12.78  12.78  12.78  12.78
2020-02-01 09:26:00    NaN    NaN    NaN    NaN
2020-02-01 09:27:00    NaN    NaN    NaN    NaN
2020-02-01 09:28:00    NaN    NaN    NaN    NaN
2020-02-01 09:29:00    NaN    NaN    NaN    NaN
2020-02-01 09:30:00  12.76  12.76  12.61  12.66
2020-02-01 09:31:00  12.66  12.66  12.64  12.64
2020-02-01 09:32:00  12.64  12.64  12.59  12.59
2020-02-01 09:33:00  12.63  12.68  12.61  12.67
2020-02-01 09:34:00  12.68  12.70  12.68  12.69
"""

复制代码

然后我们清理df_min_ohlc数据,最终数据如下:


"""
                      open   high    low  close
time                                           
2020-02-01 09:25:00  12.78  12.78  12.78  12.78
2020-02-01 09:30:00  12.76  12.76  12.61  12.66
2020-02-01 09:31:00  12.66  12.66  12.64  12.64
2020-02-01 09:32:00  12.64  12.64  12.59  12.59
2020-02-01 09:33:00  12.63  12.68  12.61  12.67
"""
复制代码

接下来就可以使用小册子《股票数据可视化:自定义Matplotlib版股票行情界面》中的代码来绘制1min K线图,如下图所示: Python量化交易进阶讲堂:股票分时明细数据的处理与转换

完整代码可在小册子《加推篇!股票分时明细数据的处理与转换》中找到。

计算资金流入和流出

接下来,我们使用显示时间的详细数据来粗略估计股票的资金流入和流出。

交易量的计算方式是价格*交易量,但是get_tick_data()接口返回的数据已经包含了交易量数据,确实比较方便。将全天所有股票的成交量相加后,得到日总成交量为9856.02万手。代码如下:

# 当天的成交额
print(df_tick.amount.sum())
复制代码

计算资金的流入和流出,可以使用Pandas的分组方法。我们来总结一下整个groupby的流程。 Groupby可以分为三个过程:split、apply、join。分区是指按照一定的规则对数据进行分组。应用程序显示对每组数据的统计操作,例如平均值、求和或特殊函数。最后是合并过程。合并是在操作后组合数据的过程。结果被重新分组以形成 DataFrame 数据或其他系列数据。

计算资金流入和流出的代码如下:

print(df_tick["amount"].groupby(df_tick["type"]).sum())
"""
type
中性盘     2110576
买盘     36741662
卖盘     59707926
Name: amount, dtype: int64
"""
复制代码

对于主要资金流入和流出的计算,主要是按照资金规模进行过滤,因为订单较大,有一个大量的。交易量需要匹配 对于大小资金来说,往往认为交易是由机构或大投资者完成的,也就是所谓的主力。

因此,我们可以设置主力交易量阈值。当日所有大于此阈值的买单成交量合计为主要资金流向。所有大于当日涨停板的卖单成交量之和为主力成交量。资金流出。代码如下:

print(df_tick[df_tick["amount"]>threshold].amount.groupby(df_tick["type"]).sum())
"""
type
中性盘     1119753
买盘     14042952
卖盘     33459052
Name: amount, dtype: int64
"""

复制代码

关于大单交易,我再补充一点。 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   买盘
"""
复制代码

这里我想解释一下,如果你想要更准确的统计的话。交易数据。

其实,即使使用“逐笔交易”数据,也只能作为寻找主力位置的参考指标。这是因为“逐笔交易”是建立在真实交易中买卖双方的小额投注基础上的。统计结果。我们可以把这个作为小册子讨论的主题。欢迎大家踊跃参与讨论!

另外,根据以往的经验,当我们在交易明细中识别大单和超大单时,可以关注常规订单。通常这些订单是使用自动交易软件批量下达的。大订单订单转换为多个小订单,仅使用大资金。看榜单可以作为判断大资金是否入市的信号。

总结

在本节中,我们了解了市场软件中显示时间的详细数据的含义,并掌握如何处理和修改数据。这有助于我们更灵活地提取和开采。引文信息。

作者:元宵大师
链接:https://juejin.im/post/5e3642ff6fb9a02fff07a8a2
来源:掘金
。商业转载请联系作者获取授权。非商业转载请注明出处。

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

热门