事件函数

HFT引擎中的事件大多与CTA引擎中一致,为了保证文档的完整性,这里重复介绍,如果仅想看HFT特有的,请点击链接跳转HFT特有事件

__init__

学过Python的小伙伴都知道,Python中类在被创建时,会调用__init__函数,来接受类创建时传入的各个参数。WT中的策略其实是一个继承自BaseCtaStrategy类的子类。因此当他被创建时,便会触发__init__函数,用来传入参数等信息。

传入参数 含义 类型
name 策略名称 str
others 其他自己需要的参数 *

以demo中使用的DualThrust.py为例:

# 继承策略基类BaseCtaStrategy
class StraDualThrust(BaseHftStrategy):
    # 重写初始化代码,接受的参数可以自己决定
    def __init__(self, name:str, code:str, barCnt:int, period:str, days:int, k1:float, k2:float, isForStk:bool = False):
        # 初始化父类,name参数表示该策略的名称
        BaseHftStrategy.__init__(self, name)

        # 接受参数,并把它赋值给自己的成员
        self.__days__ = days
        self.__k1__ = k1
        self.__k2__ = k2

        self.__period__ = period
        self.__bar_cnt__ = barCnt
        self.__code__ = code

        self.__is_stk__ = isForStk
Tip

注意,我们策略中所有的回调函数,包括__init__,均是对父类的重写。包括接受的参数与内部逻辑在内,均可以自己重写,切勿被demo中的__init__误导,误以为wt中的策略必须要接受这些参数。__init__建议接收的参数只有name,其他的均可以自己决定。

on_init

在回测中,on_init是在数据回放器准备好回测数据后执行,而实盘中,则是连接到行情服务后执行。on_init的主要功能是订阅行情数据,加载外部数据等。

传入参数 含义 类型
context 策略运行上下文 HftContext
def on_init(self, context:CtaContext):
    code = self.__code__    #品种代码
    if self.__is_stk__:
        code = code + "Q"

    #这里演示了品种信息获取的接口
    pInfo = context.stra_get_comminfo(code)
    print(pInfo)

    # 订阅K线
    context.stra_get_bars(code, self.__period__, self.__bar_cnt__, isMain = True)
    # 订阅Tick
    context.stra_sub_ticks(code)

    context.stra_log_text("DualThrust inited")
Tip

__init__是策略初始化时触发的,是策略第一个被触发的函数。on_init是回测数据或行情服务准备好后触发的,是策略在接受数据前最后一个触发的函数。

on_session_begin

交易日开始事件

传入参数 含义 类型
context 策略运行上下文 HftContext
curTDate 当前交易日,格式为20210220 int

on_session_end

交易日结束事件

传入参数 含义 类型
context 策略运行上下文 HftContext
curTDate 当前交易日,格式为20210220 int

on_tick

逐笔数据进来时调用,生产环境中,每笔行情进来就直接调用,回测环境中,是模拟的逐笔数据

传入参数 含义 类型
context 策略运行上下文 HftContext
stdCode 合约代码 StdCode
newTick 最新逐笔 dict(tick结构)

on_bar

K线闭合时回调

传入参数 含义 类型
context 策略运行上下文 HftContext
stdCode 合约代码 StdCode
period K线周期 str(bar周期)
newBar 最新闭合的K线 dict(bar结构)

on_calculate

K线闭合时调用,一般作为策略的核心计算模块

传入参数 含义 类型
context 策略运行上下文 HftContext
Note

on_calculate与on_bar在仅仅订阅一个品种时效果相同,但当订阅了多个品种时,存在以下区别:on_bar在每个品种K线闭合时都会触发一次。on_calculate在所有订阅的品种都触发一次on_bar后才会触发。这样做的好处是在处理截面策略时,能够保证行情数据能够对齐。

on_calculate_done

强化学习中使用,因为强化学习需要现在on_calculate获取view然后传给框架,最后在on_calculate中发出信号,而一般策略只需要使用on_calculate即可。

传入参数 含义 类型
context 策略运行上下文 HftContext

下面为HFT引擎特有的事件,主要为订单或成交相关的事件,在CTA引擎中,订单的相关处理由引擎管理,而HFT引擎则将这些细节暴露给策略自行处理,用于满足不同策略开发的需求。

on_order_detail

逐笔委托数据进来时调用

传入参数 含义 类型
context 策略运行上下文 HftContext
stdCode 合约代码 StdCode
newOrdQue 最新逐笔委托 dict(逐笔委托结构)

on_order_queue

委托队列数据进来时调用

传入参数 含义 类型
context 策略运行上下文 HftContext
stdCode 合约代码 StdCode
newOrdQue 最新委托队列 dict(委托队列结构)

on_transaction

逐笔成交数据进来时调用

传入参数 含义 类型
context 策略运行上下文 HftContext
stdCode 合约代码 StdCode
newTrans 最新逐笔成交 dict(逐笔成交结构)

on_channel_ready

交易通道就绪通知

传入参数 含义 类型
context 策略运行上下文 HftContext

on_channel_lost

交易通道丢失通知

传入参数 含义 类型
context 策略运行上下文 HftContext

on_entrust

下单结果回报

传入参数 含义 类型
context 策略运行上下文 HftContext
localid 本地订单id int
stdCode 合约代码 StdCode
bSucc 下单结果 bool
mes 下单结果描述 str(不超过32个)
userTag 用户标签 str(不超过32个)

on_order

订单回报

传入参数 含义 类型
context 策略运行上下文 HftContext
localid 本地订单id int
stdCode 合约代码 StdCode
isBuy 是否买入 bool
totalQty 下单数量 float
leftQty 剩余数量 float
price 下单价格 float
isCanceled 是否已撤单 bool
userTag 用户标签 str(不超过32个)

on_trade

成交回报

传入参数 含义 类型
context 策略运行上下文 HftContext
stdCode 合约代码 StdCode
isBuy 是否买入 bool
qty 下单数量 float
leftQty 成交数量 float
price 成交价格 float
userTag 用户标签 str(不超过32个)

on_position

初始持仓回报,实盘可用, 回测的时候初始仓位都是空, 所以不需要,在实盘中,该回调函数也仅在策略启动时执行一次,如果需要本地记录持仓时,可以配合该函数初始化本地持仓池

传入参数 含义 类型
context 策略运行上下文 HftContext
stdCode 合约代码 StdCode
isLong 是否为多 bool
prevol 昨仓 float
preavail 可用昨仓 float
newvol 今仓 float
newavail 可用今仓 float