事件函数
__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 |