返回介绍

开始入门

操作指引

SDK

数据文档

常见问题

量化工具

其他

其他

数据事件

发布于 2024-06-22 12:53:28 字数 5986 浏览 0 评论 0 收藏 0

数据事件是阻塞回调事件函数,通过 subscribe 函数订阅, 主动推送

on_tick - tick 数据推送事件

接收 tick 分笔数据, 通过 subscribe 订阅 tick 行情,行情服务主动推送 tick 数据

函数原型:

on_tick(context, tick)

参数:

参数名类型说明
contextcontext 对象上下文
ticktick 对象当前被推送的 tick

示例:

def init(context):
    # 订阅600519的tick数据
    subscribe(symbols='SHSE.600519', frequency='tick', count=2)


def on_tick(context,tick):
    print('收到tick行情---', tick)

输出:

{'symbol': 'SHSE.600519', 'created_at': datetime.datetime(2020, 9, 2, 14, 7, 23, 620000, tzinfo=tzfile('PRC')), 'price': 1798.8800048828125, 'open': 1825.0, 'high': 1828.0, 'low': 1770.0, 'cum_volume': 2651191, 'cum_amount': 4760586491.0, 'cum_position': 0, 'last_amount': 179888.0, 'last_volume': 100, 'trade_type': 0, 'receive_local_time': 1602751345.262745}

on_bar - bar 数据推送事件

接收固定周期 bar 数据, 通过 subscribe 订阅 bar 行情,行情服务主动推送 bar 数据

函数原型:

on_bar(context, bars)

参数:

参数名类型说明
contextcontext 对象上下文对象
barslist(bar)当前被推送的 bar 列表

示例:

# coding=utf-8
from __future__ import print_function, absolute_import
from gm.api import *
from datetime import datetime, timedelta


def init(context):
    # 订阅600519和000001的分钟数据
    subscribe(symbols='SHSE.600519,SZSE.000001', frequency='60s', count=2)


def on_bar(context,bars):
    print('收到bars行情---', bars)


if __name__ == '__main__':
    '''
        strategy_id策略ID, 由系统生成
        filename文件名, 请与本文件名保持一致
        mode运行模式, 实时模式:MODE_LIVE回测模式:MODE_BACKTEST
        token绑定计算机的ID, 可在系统设置-密钥管理中生成
        backtest_start_time回测开始时间
        backtest_end_time回测结束时间
        backtest_adjust股票复权方式, 不复权:ADJUST_NONE前复权:ADJUST_PREV后复权:ADJUST_POST
        backtest_initial_cash回测初始资金
        backtest_commission_ratio回测佣金比例
        backtest_slippage_ratio回测滑点比例
        backtest_match_mode市价撮合模式,以下一tick/bar开盘价撮合:0,以当前tick/bar收盘价撮合:1
    '''
    backtest_start_time = str(datetime.now() - timedelta(weeks=1))[:19]
    backtest_end_time = str(datetime.now())[:19]
    run(strategy_id='xxxxxx',
        filename='main.py',
        mode=MODE_BACKTEST,
        token='xxxxxxx',
        backtest_start_time=backtest_start_time,
        backtest_end_time=backtest_end_time,
        backtest_adjust=ADJUST_PREV,
        backtest_initial_cash=10000000,
        backtest_commission_ratio=0.0001,
        backtest_slippage_ratio=0.0001,
        backtest_match_mode=1)

输出:

收到bars行情--- [{'symbol': 'SHSE.600519', 'frequency': '60s', 'open': 1786.0, 'high': 1786.0, 'low': 1786.0, 'close': 1786.0, 'volume': 20200, 'amount': 36077200.0, 'pre_close': 0.0, 'position': 0, 'bob': datetime.datetime(2023, 11, 23, 14, 59, tzinfo=datetime.timezone(datetime.timedelta(seconds=28800), 'Asia/Shanghai')), 'eob': datetime.datetime(2023, 11, 23, 15, 0, tzinfo=datetime.timezone(datetime.timedelta(seconds=28800), 'Asia/Shanghai'))}]

注意:

1. 若在 subscribe 函数中订阅了多个标的的 bar,但 wait_group 参数值为 False,则多次触发 On_bar,每次返回只包含单个标的 list 长度为 1 的 bars;若参数值为 True,则只会触发一次 On_bar,返回包含多个标的的 bars。

2. bar 在本周期结束时间后才会推送,标的在这个周期内无交易则不推送 bar。

on_l2transaction - 逐笔成交事件

接收逐笔成交数据(L2 行情时有效) 仅特定券商付费提供 函数原型:

on_l2transaction(context, transaction)

参数:

参数名类型说明
contextcontext 对象上下文对象
transactionL2Transaction 对象收到的逐笔成交行情

示例:

def on_l2transaction(context, transaction):
    print(transaction)

输出:

{'symbol': 'SZSE.300003', 'volume': 300, 'created_at': datetime.datetime(2020, 11, 24, 9, 38, 16, 50, tzinfo=tzfile('PRC')), 'exec_type': '4', 'side': '', 'price': 0.0}

on_l2order - 逐笔委托事件

接收逐笔委托数据(深交所 L2 行情时有效) 仅特定券商付费提供 函数原型:

on_l2order(context, l2order)

参数:

参数名类型说明
contextcontext 对象上下文对象
l2orderL2Order 对象收到的逐笔委托行情

示例:

def on_l2order(context, l2order):
    print(l2order)

输出:

{'symbol': 'SZSE.300003', 'side': '1', 'price': 29.350000381469727, 'volume': 2400, 'created_at': datetime.datetime(2020, 11, 24, 9, 38, 16, 80, tzinfo=tzfile('PRC')), 'order_type': '2'}


如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文