事件函数

__init__

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

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

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

# 继承策略基类BaseCtaStrategy
class StraDualThrust(BaseCtaStrategy):
    # 重写初始化代码,接受的参数可以自己决定
    def __init__(self, name:str, code:str, barCnt:int, period:str, days:int, k1:float, k2:float, isForStk:bool = False):
        # 初始化父类,name参数表示该策略的名称
        BaseCtaStrategy.__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 策略运行上下文 Context
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 策略运行上下文 Context
curTDate 当前交易日,格式为20210220 int

on_session_end

交易日结束事件

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

on_tick

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

传入参数 含义 类型
context 策略运行上下文 Context
stdCode 合约代码 StdCode
newTick 最新逐笔 WtTickRecords

on_bar

K线闭合时回调

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

on_calculate

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

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

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

on_calculate_done

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

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