返回列表 发布新帖

《高效获取集合竞价tick数据的实用技巧》

1076 5
发表于 2024-3-20 09:39:16 | 显示全部楼层 阅读模式

前言

众所周知,集合竞价的数据可以通过subscribe_whle_quote回调接收,或者是通过get_full_tick获取的。

由于大家熟悉的handlebar是随着主图tick更新调用的,那么我们实际上需要解决的问题是如何在非handlebar驱动下,定时获取集合竞价的tick变化,这里我们推荐新版客户端用户使用【ContexInfo.schedule_run】,传统客户端用户使用【ContextInfo.run_time】两个定时器来实现。下面是具体的操作示例:

1710898669974.png

新版客户端端操作代码

# coding:gbk
import datetime as dt

# 获取当前日期
today = dt.datetime.now().date()

# 构造今天9:30:00的datetime对象
time_point1 = dt.datetime.combine(today, dt.datetime.strptime("09:15:00", "%H:%M:%S").time())

# 将datetime对象格式化为字符串
start_time = time_point1.strftime("%Y%m%d%H%M%S")

def on_timer(C):
    print("=" * 10 ,"集合竞价阶段" , "=" * 10)
    ticks = C.get_full_tick(["000001.SZ"])
    print(ticks)
    now = dt.datetime.now().strftime("%H%M%S")
    if now > "092500":
        print("集合竞价结束")
        C.cancel_schedule_run('my_timer') #取消my_timer任务组所有定时任务

def init(ContextInfo):
    today = dt.datetime.now().strftime("%Y%m%d%H%M%S")
    tid=ContextInfo.schedule_run(on_timer,start_time,-1,dt.timedelta(seconds=3),'my_timer')

def handlebar(ContextInfo):
    print("开始连续交易")
    pass

传统客户端操作代码

# coding:gbk
import datetime as dt
# 获取当前日期
today = dt.datetime.now().date()

# 构造今天9:30:00的datetime对象
time_point1 = dt.datetime.combine(today, dt.datetime.strptime("09:15:00", "%H:%M:%S").time())
# 将datetime对象格式化为字符串
start_time = time_point1.strftime("%Y-%m-%d %H:%M:%S")

def on_timer(C):
    now = dt.datetime.now().strftime("%H%M%S")
    if now > "092500":
        if now < "092504":
            print("集合竞价结束")
        return
    print("=" * 10 ,"集合竞价阶段" , "=" * 10)
    ticks = C.get_full_tick(["000001.SZ"])
    print(ticks)

def init(ContextInfo):
    ContextInfo.run_time("on_timer","3nSecond",start_time)

def handlebar(ContextInfo):
    print("开始连续交易")
    pass

不清楚的内容可添加下方助理微信咨询,有其他 QMT 小技巧想学习的吗?欢迎在下方留言,笔者将根据大家的留言持续更新哦!

欢迎和我一起加入迅投组建的 QMT 实战交流社群,交流群内有许多做量化交易的高手和大佬,具有良好的分享和互助氛围。且迅投官方会不定期为多次分享、乐于助人的群友申请送投研专业版的机会。

只需扫描下方的二维码,名额有限,限时加入。一起分享见解、交换信息、并共同进步,就像群友说的:“就算周末,晚上也有地方沟通交流!”

企业微信截图_17151655836859.png

评论5

*******5428
发表于 2024-4-25 16:52:04 | 显示全部楼层
我在代码中使用handlebar函数每3秒自动执行的方式,集合竞价期间自动执行get_full_tick,貌似获取到的数据中,我使用amount来获取撮合成交额。用于判断集合竞价每个tick撮合成交情况。
集合竞价期间返回的结果是amount是始终为空。
但是收盘后执行策略,get_full_tick又能正常返回amount成交金额。我不确定get_full_tick在集合竞价期间、连续竞价两个时间段返回的数据有何差别?
image.png
*******5428
发表于 2024-4-25 16:55:14 | 显示全部楼层
*******5428 发表于 2024-4-25 16:52
我在代码中使用handlebar函数每3秒自动执行的方式,集合竞价期间自动执行get_full_tick,貌似获取到的数据 ...

补充,集合竞价阶段,使用get_full_tick返回中,可以获取最新价,能计算涨幅,但是计算出的撮合成交量就是为0,很奇怪。
Willows楼主
发表于 2024-4-25 18:15:05 | 显示全部楼层
*******5428 发表于 2024-4-25 16:55
补充,集合竞价阶段,使用get_full_tick返回中,可以获取最新价,能计算涨幅,但是计算出的撮合成交量就 ...

集合竞价没有产生真实成交,就没有成交金额呀
*******5428
发表于 2024-4-25 19:15:01 | 显示全部楼层
Willows 发表于 2024-4-25 18:15
集合竞价没有产生真实成交,就没有成交金额呀

那请问,如何获取到集合竞价的已撮合量和未撮合量呢?
Willows楼主
发表于 2024-4-30 15:49:33 | 显示全部楼层
*******5428 发表于 2024-4-25 19:15
那请问,如何获取到集合竞价的已撮合量和未撮合量呢?

在092500之后取tick,此时的成交量就是匹配量,盘口挂单量就是未匹配量

回复

您需要登录后才可以回帖 登录 | 立即注册

主题

16

回帖

63

积分

0

客服专线

400-080-8112

用思考的速度交易,用真诚的态度合作,我们是认真的!
  • 关注公众号
  • 添加微信客服
Copyright © 2001-2024 迅投QMT社区 版权所有 All Rights Reserved. 蜀ICP备19002686号-2
关灯 快速发帖
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表