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)

相关推荐

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

    2024-07-15 06:32:01       19 阅读
  2. 【ceph】ceph关于清洗数据scrub参数分析

    2024-07-15 06:32:01       59 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-15 06:32:01       70 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-15 06:32:01       74 阅读
  3. 在Django里面运行非项目文件

    2024-07-15 06:32:01       62 阅读
  4. Python语言-面向对象

    2024-07-15 06:32:01       72 阅读

热门阅读

  1. App测试自动化工具UIAutomator2的使用

    2024-07-15 06:32:01       26 阅读
  2. React@16.x(57)Redux@4.x(6)- 实现 bindActionCreators

    2024-07-15 06:32:01       29 阅读
  3. PyTorch构建一个肺部CT图像分类模型来分辨肺癌

    2024-07-15 06:32:01       19 阅读
  4. Python学生信息管理系统的设计与实现

    2024-07-15 06:32:01       29 阅读
  5. SQL优化

    SQL优化

    2024-07-15 06:32:01      34 阅读
  6. RocketMQ

    RocketMQ

    2024-07-15 06:32:01      24 阅读
  7. SpringBoot实战:定时任务

    2024-07-15 06:32:01       21 阅读
  8. .NET 开源库技术栈汇总

    2024-07-15 06:32:01       20 阅读
  9. UDP 报文结构与注意事项全解析

    2024-07-15 06:32:01       28 阅读
  10. 深入理解Symfony框架中的数据验证机制

    2024-07-15 06:32:01       22 阅读
  11. OpenCV——实现视频图像的来回摆动的效果

    2024-07-15 06:32:01       19 阅读