tick数据、盘口数据、成交明细数据详解

近期开始学习订单薄策略(order book strategy)、订单流策略(order flow strategy),理清数据是第一步。

一、成交明细数据

用各个软件进行看盘,除了分时、k线最常用外,盘口数据/成交明细也会显示出来,下图是螺纹主力shfe.rb2401 2023年10月24日,收盘前wind、multicharts推送的成交明细数据。
wind截图multicharts截图

碰到的第一个问题是如果我想使用这些数据进行分析,如何下载保存这部分数据呢?
之前使用wind比较多,但是没有找到wind上该如何下载这部分数据,通达信软件可以下载历史分时数据,但是是一天天下载,多天的数据手动下载很耗时。
仔细学习了解之后,才发现这部分数据直接可以从tick数据进行简单处理转换就可以,了解数据生成可以大大提高效率,也便于后续使用这一部分数据。

二、Tick数据

  • tick行情又称逐笔行情,是整个市场上的逐笔数据。例如投资者一笔新的委托会形成一笔行情,交易所撮合一笔新的成交也会形成一笔行情。tick行情记录了市场的每一个事件的数据,是最精细和完整的数据。

  • 快照行情又称切片(snapshot)行情,如其名,是对tick行情数据的某一个时刻的切片数据。例如现在常见的期货500ms一笔的行情,就是每500ms,在这时间段内的最高价、最低价、成交量等汇总成的一笔快照行情。

目前国内期货市场是没有真正意义上的tick逐笔数据的,这时候提到的tick数据指的是快照行情。
快照行情又可以分为level1、level2的数据,主要区分是报价深度。

  • level1行情又称1档行情或基本行情,字面意义上是指行情报单簿的档位只有一档,即买一价,卖一价。实际应用中一般用来指比较基础的一种行情,只包含最低层次的买卖,成交数据,更新频次也是最低。

  • level2行情又称多档行情或者深度行情,可以认为是level1行情的升级版,体现在报单簿档位会多,数据丰富,或者更新频次更快。这种行情一般是要单独收费的。

在这里插入图片描述

以rb2401为例,使用天勤下载了2023年10月24日(仅下载了日盘,没下载10.23夜盘,不影响后续分析)的tick数据(实际是快照数据,后续都以tick数据指快照行情数据)。

在这里插入图片描述

下载到的tick数据长这样,主要包含成交、报单两部分的数据。详细可以自行下载,可以发现软件提供的:现手、仓差、开平方向 都不是原始数据,是经过计算得到的,用last_price、volume、open_interst、bid_price1、ask_price1字段进行计算。

还可以发现,软件商成交明细和交易所返回数据相比,少了几条,仅在成交量volume发生变化时才进行推送,后续以交易量发生变化的最后两行数据(图中标黄的数据)为例,进行示例计算。

三、使用tick数据计算成交明细

1、现手

volume字段是累计成交量字段,现手数据很好计算,就是volume之差,即下一条数据volume-上一条数据volume,图上黄色标注数据计算就是1443112-1443011=101,和软件推送数据一致。

2、仓差

open_interest字段是持仓数量,仓差是open_interest之差,图上是1862177-1862180=-3,和软件推送数据一致。

3、开平

开平方向与现手、增仓、价格变动方向都有关系,具体可以看下面的几个表:

  • 开平方向
    使用现手与增仓判断目前的开平方向
  • 价格变动方向及内外盘方向
    价格变动方向
  • 汇总
    成交明细汇总

四、python实现

import pandas as pd
import numpy as np

# 读取数据
rb_data = pd.read_csv("RB2401_tick_1024.csv")
# 处理列名
cols = [i.replace("SHFE.rb2401.", "").strip() for i in rb_data.columns]
rb_data.columns = cols


def get_ticks_info(df):
    df_pre = df.copy().shift(1)
    df_pre["price_diff"] = df["last_price"] - df_pre["last_price"]
    df_pre["oi_diff"] = df["open_interest"] - df_pre["open_interest"]
    df_pre["vol_diff"] = df["volume"] - df_pre["volume"]
    
    df_pre["pc"] = np.where(
        df["last_price"] <= df_pre["bid_price1"], -1,
        np.where(df["last_price"] >= df_pre["ask_price1"], 1,
                 np.sign(df_pre["price_diff"])))
    pc_g = df_pre["pc"] > 0

    condition_buy = (df["last_price"] >= df_pre["ask_price1"]) | (df["last_price"] >= df["ask_price1"])
    condition_sell = (df['last_price'] <=df_pre['bid_price1']) |(df['last_price'] <= df['bid_price1'])
    direction_values = np.where(condition_buy, '主动买', np.where(condition_sell, '主动卖', '其他'))
    df_pre['direction'] = pd.Series(direction_values, index=df.index)

    df_pre["info"] = pd.Series(
        np.where(
            df_pre["oi_diff"] > 0, np.where(pc_g, "多开", "空开"),
            np.where(
                df_pre["oi_diff"] < 0, np.where(pc_g, "空平", "多平"),
                np.where(df_pre["oi_diff"] == 0, np.where(pc_g, "多换", "空换"),
                         ""))))
    df_pre.loc[df_pre["pc"] == 0, "info"] = "换手"
    df_pre.loc[(df_pre["oi_diff"] < 0) &
               (df_pre["oi_diff"] + df_pre["vol_diff"] == 0), "info"] = "双平"
    df_pre.loc[(df_pre["oi_diff"] > 0) &
               (df_pre["oi_diff"] == df_pre["vol_diff"]), "info"] = "双开"
    df_pre.loc[df_pre["vol_diff"] == 0, "info"] = ""

    return df_pre.shift(-1)

data = get_ticks_info(rb_data)

输出数据
tick示例数据及代码关注微信公众号:量化学习J(公众号微信号:quant_study_june),回复 tick数据处理 ,发送网盘链接

  • 10
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
### 回答1: Python语言具有丰富的数据分析和处理能力,可以用于下载历史分笔成交数据来进行数据分析和建模。通信达是国内一家提供股票行情数据的公司,在Python语言中可以使用tushare和pytdx等三方工具来下载通信达的历史分笔成交数据。 在使用tushare下载历史分笔成交数据时,需要先注册tushare账号,获取token,并引入tushare库。然后可以使用get_hist_data函数来获取历史分笔成交数据,其中需要传入参数code、start和end来指定股票代码、开始时间和结束时间。获取数据后可以进行筛选、转换、计算等处理。 在使用pytdx下载历史分笔成交数据时,需要先引入pytdx库,并设置相关信息如服务器IP和端口、股票市场等。然后可以使用PytdxHq_API类来获取历史分笔成交数据,其中需要传入参数code、start和end来指定股票代码、开始时间和结束时间。获取数据后可以进行转换、计算等处理。 无论使用tushare还是pytdx下载历史分笔成交数据,都需要先了解相关的API接口和参数设置,同时需要注意对数据的筛选和处理,以便获取相应的数据进行后续的分析建模。 ### 回答2: Python是一种流行的编程语言,由于它在数据分析、数据库管理、人工智能等领域具有广泛的应用,因此被认为是一种重要的编程语言。如果你想要通过Python实现从通信达下载历史分笔成交数据,可以借助Python的强大库,比如pandas和tushare。 首先,你需要在tushare上注册账户,获取token用于数据请求。然后,你可以使用tushare库中的get_tick_data()方法,输入股票代码、日期、指定数据来源,并设置token值。 下面是一个简单的代码示例: ``` import tushare as ts # 使用tushare获取历史成交数据 def get_tick_data(code, date): # 获取数据 df = ts.get_tick_data(code=code, date=date, src='tt', token='Your Token') # 对数据进行处理 df = df.drop(['type'],axis=1) # 删除无用列 df.insert(0,'code',code) # 添加股票代码列 df.insert(4,'date',date) # 添加日期列 return df ``` 以上代码将股票代码和日期作为参数,使用tushare库中的get_tick_data()函数获取给定日期股票的历史分笔成交数据。返回的DataFrame可以进一步处理并保存到本地文件中,以备后续分析使用。 需要注意的是,由于下载历史分笔成交数据需要较长时间,并且tushare的数据限制,建议进行分批下载并处理,以免请求过程中出现异常。 ### 回答3: 要从通达信下载历史分笔成交数据,可以使用Python编程语言。Python是一种强大的编程语言,广泛用于数据分析、科学计算、机器学习、自然语言处理等领域。 首先需要安装Python的相关库,包括tushare和pandas。Tushare是一个免费的金融数据接口库,提供了许多股票等金融数据的获取方式,pandas则是一个强大的数据分析工具,提供了丰富的数据处理和操作方法。 接着,通过tushare的接口,可以获取到历史分笔成交数据,参数包括股票代码和日期范围。数据格式是一个DataFrame,可以通过pandas将其转换成csv格式的文件。 在Python中,可以使用以下代码获取成交数据: ```python import tushare as ts import pandas as pd # 设置tushare的token ts.set_token('your_token_here') # 获取历史分笔成交数据,参数包括股票代码和日期范围 df = ts.get_tick_data('600519', date='20220104') # 将DataFrame保存为csv格式的文件 df.to_csv('tick_data.csv', index=False) ``` 这个例子中,我们获取了贵州茅台(股票代码:600519)在2022年1月4日的成交数据,并将其保存为一个csv文件。可以根据需要修改参数以及文件名和路径。 总的来说,Python是一个非常灵活和强大的编程语言,可以用来解决各种问题,包括数据获取、处理、分析和可视化等方面。与其他语言相比,Python的代码量相对较少,易于阅读和理解,因此是数据科学领域的热门工具之一。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值