事件函数
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
注意,我们策略中所有的回调函数,包括__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")
__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 | 
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 |