Tick数据的清洗和1分钟K线合成

集合竞价观察

郑商所 无夜盘 AP410:
早盘tick数据 8:55开始,最终在8:59成交量变化,说明集合竞价结束。

郑商所 有夜盘 FG409:
夜盘tick数据 20:55开始,最终在20:59成交量变化,说明集合竞价结束。
早盘tick数据 8:55开始,最终在9:00成交量变化,说明集合竞价结束。
夜盘到早盘之间没有无效的tick数据。

上期所 有夜盘 rb2410:
夜盘tick数据20:59开始,就这一笔,也是当日开盘价。
早盘tick数据8:59开始,就这一笔。

总结:郑商所集合竞价早盘8:55开始,夜盘20:55开始。当日开盘价有夜盘品种20:59决定,无夜盘品种8:59决定。早盘第一个K线开盘价有夜盘品种9:00决定,无夜盘品种8:59决定。关键点是成交量变化。

无效数据

郑商所 无夜盘 AP410:
23点后有无效数据,很多品种23点后还是交易时间,所以只根据交易时间剔除无效数据是不行的。

上期所 有夜盘 au2410:
夜盘凌晨2:30结束,早上7:30后重新加载了1次夜盘数据,晚上19:30后又加载了1次数据,这些系统时间和tick时间差距很大的tick,都属于无效数据。

上期所 有夜盘 rb2410:
在夜盘结束到早盘开盘前没有多余的tick推送。但18点后也有无效tick推送。
最后1笔有效数据 15:16左右,价格和成交量没变化,合并到14:59开始的1分钟K线。

最后一根1分钟K线

10:15推送的tick是有效数据,其价格和成交量都有变化,合并为10:14开始的1分钟K线。
15:00推送的tick是有效数据,其价格和成交量都有变化,合并为14:59开始的1分钟K线。
有的品种如rb2410:15点后依然会推送有效数据,不过价格和成交量都不再变化,合并到最后的K线。

有的品种如rb2410:23点结束,所以23点推送的tick属于22:59开始的K线。
有的品种如sc2408:2:30结束,那么23点推送的K线属于23点开始的K线。
所以不能一概认为23点的tick就一定是22:59开始的K线。

有的品种如 AP410:最后1笔的tick时间是14:59:59秒。没有新的tick数据来触发K线结束。
所以要在收盘后有个K线整理的计划。

大总结

tick时间和系统时间相差超过3分钟为无效tick,需要过滤掉。

夜盘K线的整理:等到最晚的夜盘结束也就是2:30后,进行一次K线合并。如果最后一个K线是23点,就合并到22:59。

日盘K线的整理:
10:15的tick推送过来时改成10:14,这样就自动合并到前1分钟了。
11:30的tick推送过来时改成11:29
15点以及15点后推送的有效tick也会生成K线,比如15:16推送的tick,生成的K线没什么意义。
所以可以在15点30后进行一次整理,最后一个K线如果大于14:59,就合并到14:59

竞价K线的整理:8:55到9点之间推送的tick修改时间为9点,这样第1个K线就是9点开始。夜盘20:55到21点的tick改成21点。

Tick分析过程用到的代码

import pandas as pd

# pd.set_option('display.max_rows', None)
file = './md_data/tick_rb2410.csv'
# file = './md_data/tick_FG409.csv'
df = pd.read_csv(file, names=['TradingDay', 'UpdateTime', 'InstrumentID', 'LastPrice', 'Volume', 'OpenInterest', 'timestamp', 'currentTime'])
df['time_diff'] = abs(df['timestamp'] - df['currentTime'])
df['tTime'] = pd.to_datetime(df['timestamp'], unit='s', origin='1970-01-01 08:00:00')
df['cTime'] = pd.to_datetime(df['currentTime'], unit='s', origin='1970-01-01 08:00:00')
# df = df[df['time_diff'] < 60 * 3].head(20)  #tick时间和系统时间相差超过3分钟 无效tick

# df = df[df['TradingDay'] >= 20240712]
df = df[(df['UpdateTime'] >= '11:29:59') & (df['UpdateTime'] <= '20:59:59')]
# df = df[(df['cTime'].dt.time > pd.to_datetime('15:00').time()) & (df['tTime'].dt.time < pd.to_datetime('21:00').time())].head(20)
df.head(30)

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,根据您的要求,我会提供一份Python代码,使用Wind的Python接口订阅实时Tick数据,并将其合成分钟线数据。 首先,您需要安装Wind的Python接口,可以通过以下命令在命令行中安装: ``` pip install WindPy ``` 然后,您可以使用以下代码来连接Wind服务器并订阅实时Tick数据: ```python import time import numpy as np import pandas as pd import WindPy as wp # 连接Wind服务器 wp.start() # 订阅Tick数据 wp.wsq("000001.SH", "rt_time,rt_last", func=lambda x: print(x)) # 等待Tick数据 time.sleep(10) # 关闭连接 wp.stop() ``` 在上面的代码中,我们使用了Wind的`wsq`函数订阅了上证指数(000001.SH)的实时Tick数据,并将其打印到控制台上。`wsq`函数的第一个参数是证券代码,第二个参数是需要订阅的数据字段,这里我们订阅了实时时间和最新价。`func`参数指定了回调函数,当有新的Tick数据到达时,会自动调用该函数。 接下来,我们需要将实时Tick数据合成分钟线数据。我们可以使用Pandas库中的`resample`函数来实现: ```python import time import numpy as np import pandas as pd import WindPy as wp # 连接Wind服务器 wp.start() # 订阅Tick数据 tick_data = wp.wsq("000001.SH", "rt_time,rt_last").Data[0] # 将Tick数据转换为DataFrame df = pd.DataFrame({"time": tick_data[::2], "price": tick_data[1::2]}) df["time"] = pd.to_datetime(df["time"]) # 将DataFrame按分钟合并为分钟线数据 min_data = df.set_index("time").resample("1min").agg({"price": "ohlc"}) # 打印分钟线数据 print(min_data) # 关闭连接 wp.stop() ``` 在上面的代码中,我们首先订阅了上证指数的实时Tick数据,并将其转换为DataFrame格式。然后,我们使用`set_index`函数将时间列设置为索引,并使用`resample`函数按分钟合并数据。`agg`函数指定了每个分钟线数据的计算方法,这里我们使用了OHLC法,即开盘价、最高价、最低价和收盘价。最后,我们打印了合成后的分钟线数据。 当然,实际应用中,我们需要不断更新分钟线数据,并将其保存到数据库或文件中,以便后续分析和使用。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值