策略运行与撮合说明
由qxiao创建,最终由small_q 被浏览 480 用户
回测代码的编写和运行
策略逻辑编写完成后通过接口函数 M.hftrade (也是一个可视化模块的入口)来进行回测,如下是此函数的详细说明
M.hftrade.v2( #v2表示hftrade的版本号
start_date, #回测开始日期
end_date, #回测结束日期
instruments=None, #回测股票/基金/期货列表
initialize=None, #初始化函数初始化函数,initialize(context)
on_stop=None, #策略运行结束处理函数,on_stop(context)
before_trading_start=None, #在每个交易日开始前的处理函数,before_trading_start(context, data)
handle_bar=None, #每个bar更新时的处理函数, handle_bar(context, bar),不能和handle_data同时注册
handle_data=None, #数据更新时的处理函数, handle_data(context, data),不能和handle_bar同时注册
handle_tick=None, #在每个Tick快照行情更新时的处理函数,handle_tick(context, tick)
handle_l2trade=None, #在每个逐笔成交行情更新时的处理函数,handle_l2trade(context, l2trade)
handle_trade=None, #在成交回报更新时的处理函数,handle_trade(context, trade)
handle_order=None, #在委托回报更新时的处理函数,handle_order(context, order)
capital_base=1000000, #初始资金,默认为 1000000
slippage_type=SlippageType.FIXED, #指定滑点模式
slippage_value=0, #指定买卖双向的滑点
volume_limit=0.25, #执行下单时控制成交量参数,若设置为0时,不进行成交量检查;默认值是0.25,下单量如果超过该K线成交量的2.5%,多余的订单量会自动取消
product_type=None, #回测产品类型,如 stock/future/option等,一般不用指定,系统自动根据合约代码判断产品类型
price_type=None, #回测复权类型,如 真实价格[real],后复权[post]
frequency='1m', #回测频率,如 1d/1m/tick/
benchmark='000300.HIX', #benchmark:回测基准数据, 可以是DataSource,DataFrame,或者股票/指数代码如000300.
plot_charts=True, #是否画回测评估图
options=None, #其他参数从这里传入,可以在 handle_data 等函数里使用
disable_cache=0, #默认0,表示不启用数据缓存。设置为1,如果本次回测的数据范围之前已经读取过则不会重复读取,这样能加快回测速度
show_debug_info=False #默认False,表示是否打印回测框架的debug信息
)
在BigQuant平台上,新建一个空白的代码策略模板,把编写好的策略逻辑代码和回测代码拷贝进去(也可以建好模板后,直接在模板的notebook里面编写代码)。
点击”全部运行”按钮就可以进行回测了。
订单撮合处理
本章节主要介绍基于历史行情的模拟撮合介绍,主要包括基于Bar行情、快照行情、逐笔行情撮合。支持上交所和深交所两大交易所上市的A股股票、基金、债券、期权、期货等品种。不支持新股申购、市值配售、增发申购、配股等交易。股票交易费用买入按0.03%计算,卖出按0.13%计算(其中默认包含0.1%的印花税),期货则按对应的品种费率计算,实际费率也可在回测模拟中设置。
一些通用规则:
- 对于没有成交的委托,或者部分成交的委托,可以撒单。当天的委托如果没有成交,收市以后自动作废,不参加下一交易日的撮合。
- 对于市价委托,未成交部分会自动撤销(即成剩撤)。
一、基于Bar行情数据撮合规则
- 成交参考价格可指定为open/close
- 成交数量最大为当次bar的成交量,日线是一般还会加一个成交率比例
- 委托量过大时,可能出现模拟撮合结果与真实情况严重失真的情况。
二、基于快照行情数据的撮合规则
主要原则是基于行情中的最新价撮合,而不是买卖盘口的价格撮合,发出订单后,使用下一笔快照行情撮合。
买入:
- 如果最新成交价等于委托价,按照委托价成交
- 如果最新成交价低于委托价,按照最新价成交
- 注意,若成交价在买一价或涨停时,不能即时成交,委托会放入撮合等待队列,并且记录当时买一量,如果阶段成交量大于买一量,可成交数量是阶段成交量和当时的买一量的差,以这种方式模拟在真实交易市场排队的情形。但未及时考虑买一上的撤单量。
- 如果涨停板被打开,价格低于委托价,则按照现价成交。
卖出:
-
如果最新成交价等于委托价,按照委托价成交
-
如果最新价高于委托价,按照最新价撮合成交 注意,若成交价在卖一价或跌停时,不能即时成交,委托会放入撮合等待队列,并且记录当时卖一量,如果阶段成交量大于卖一量,可成交数量是阶段成交量和当时的卖一量的差,以这种方式模拟在真实交易市场排队的情形。但未及时考虑卖一上的撤单量。
-
如果跌停板被打开,价格高于委托价,则按照现价成交。 当次成交量按两个快照之间的真实成交量计算,若成交量为0,则不成交。如果真实成交数量小于委托未成交数量,则部分成交,仅撮合真实交易的成交数量,剩余的委托仍保留在撮合队列,等待新的成交明细。因此早上集合竞价期间的报单,会在 09:25:00 进行一次撮合,或 09:30:00开始进行连续竞价撮合。
例如:600804(鹏博士)上午开市后涨停,用户在10:10以涨停价委托买入1 00手,此时的成交量是51 000手, 涨停板上买一的单子是5000手,如果涨停板没有被打开,只有阶段成交量大于5000手时,用户的委托才等到 可以成交。如果成交量到了56010手,则用户成交10手(5601 0-51000-5000),剩下的部分等待更多的成量。
三、基于逐笔成交数据的撮合规则 主要原则是基于逐笔行情中的最新成交价撮合,发出订单后,使用下一笔逐笔行情撮合,需要配合当前快照盘口信息(会在收到委托时,获取当前盘口)。
买入委托:
- 市价委托:
- 当前在涨停版上,不成交,自动撤销
- 成交,即成剩余,成交量也依次从卖一到卖五档
- 不支持FOK
- 委托价格 > 最新价:
成交,成交价=最新价,成交量依次从卖一到卖十档,生成多笔成交信息,FIXME:如果超出卖十档的处理,其中价格触发到涨停板的处理。
- 委托价格 == 最新价:
- 成交类型主动卖,判断当前记录的排队数量,排队数量 <= 0,则成交,成交量为当次逐笔成交量,FIXME: 更逼真模式是取 逐笔成交-排队数量
- 成交类型主动买,不成交
- 撤单成交(仅适用于深交所)
-
撤单价格 == 买一价,对订单队列中的买入委托的排队数量做减少
-
其它撤单,不做处理
-
其它不成交
\
卖出委托:
- 市价委托:
- 当前在跌停版上,不成交,自动撤销
- 成交,即成剩余,成交量也依次从买一到买五档
- 不支持FOK
- 委托价格 < 最新价:
成交,成交价=最新价,成交量依次从买一到买十档,生成多笔成交信息,FIXME:如果超出买十档的处理,其中价格触发到跌停板的处理。
- 委托价格 == 最新价:
- 成交类型主动买,判断当前记录的排队数量,排队数量 <= 0,则成交,成交量为当次逐笔成交量,FIXME: 更逼真模式是取 逐笔成交-排队数量
- 成交类型主动卖,不成交
- 撤单成交(仅适用于深交所)
- 撤单价格 == 卖一价,对订单队列中的买入委托的排队数量做减少
- 其它撤单,不做处理 其它不成交
回测结果分析
当我们完成一个策略回测时,我们会得到如下的一个图形
上图为策略回测结果图,红色矩形标记部分包含了策略的主要信息,包括 收益概况、交易详情、每日持仓及收益、输出日志 。接下来,我们详细介绍这几个部分。
收益概况 收益概况以折线图的方式显示了策略在时间序列上的收益率,黄色曲线为策略收益率。同时也显示了沪深300收益率曲线作为比较基准,蓝色曲线为基准收益率。同时,最下面的绿色曲线为持仓占比,持仓占比即仓位,10%的持仓占比表示账户里股票价值只占10%。相对收益率的曲线并没有直接绘制在图上,点击图例 相对收益率,就可以将其绘制出来。
不仅如此,衡量一个策略好坏的关键指标在收益概览页面也得到展示。
\
- 收益率:策略整个回测时间段上的总收益率。比如,如果收益率为30%,表明起始时间是1万的本金,结束时间本金就变成1.3万了,一共赚了3000元。
- 年化收益率:该策略每一年的收益率。比如,如果回测时间段为2年,总收益率为30%,那么每年的年化收益率就在15附近(不考虑复利)。
- 基准收益率:策略需要有一个比较基准,比较基准为沪深300。若基准收益率为15%,表明在整个回测时间段,大盘本身就上涨了15%,如果策略收益率小于基准收益率,说明策略表现并不好,连大盘都没有跑赢。
- 阿尔法:衡量策略的一个重要指标,该值越大越好。
- 贝塔:衡量策略的一个重要指标,该值越小越好。
- 夏普比率:衡量策略最重要的一个指标,该指标的计算不仅考虑收益率,还考虑了风险,因此比较具有参考价值,可以理解为经过风险调整后的收益率。
- 胜率:衡量策略盈利一指标,胜率越大越好。比如10次投资中有8次获利,胜率就是80%。
- 盈亏比:衡量策略盈亏能力大小比较,盈亏比越大越好。比如投资盈利时,平均每次盈利4元,亏损时,平均每次亏损2元,那么此时的盈亏比为2。
- 收益波动率:收益率的标准差,是风险的一个指标。
- 最大回撤:策略在整个时间段上亏损最严重的时候相比净值最高值下跌的百分比。如果最大回撤为20%,表明策略在某个时间点上,相比之前的净值最高点下降了20%。最大回撤是策略评估时非常关键的一个指标,通常与风险承受能力相关。
- 信息比率:信息比率也是一个常用的策略评价指标
- 策略回测结果指标详解
交易详情 交易详情主要显示了策略在整个回测过程中每个交易日的买卖信息。包括买卖时间、股票代码、交易方向、交易数量、成交价格、交易成本。具体见下图:
每日持仓及收益 每日持仓及收益主要呈现每日持有股票代码、当日收盘价、持仓股票数量、持仓金额、收益等指标。具体见下图
关于回测结果和指标更详细的分析可参照链接:策略回测结果指标详解
\