# 实时模拟交易
模拟交易的数据与实盘数据是同步的,并且我们会提供实时的模拟撮合服务,因此您可以进一步检验策略的有效性。另外您打开微信通知以后,也可以根据收到的实时通知来进行手动落单达到实盘交易的目的。
# 模拟交易的数据源
模拟交易使用的是实时更新的 Level-1 数据,大概会有 3-5 秒的延迟。米筐同时接入了 A 股、期货的 LEVEL1 实时行情, 根据市场行情快照实时进行分钟线合成。对于分钟级别实盘模拟, 每当分钟线合成完毕之后, 策略内 handle_bar 函数会被触发。A 股第一个分钟线触发时间为 09:31, 第一个分钟线包含了开盘集合竞价以及连续竞价的第一分钟信息。
# 进行模拟交易
您需要编写策略,运行一次完整的分钟回测之后,在回测结果页面点击【模拟交易】,启动一个模拟交易。模拟交易一旦启动成功, 您就进入到了实盘模拟的策略详情界面
1.运行完一次完整的分钟回测以后,您可以在回测的结果页面直接启动模拟交易:
2.启动之后可以在策略列表看到启动了的模拟交易策略的状态:
3.启动之后的模拟交易策略需要至少等待第一个交易日启动才会有更新:
-
暂停”按键会让您当前运行中的策略暂时挂起, 此时策略会接收行情, 进行各项指标的计算, 但是不会发单
-
“启动”按键会让正处于暂停状态的策略恢复发单逻辑
-
“停止”按键会让策略彻底停止, 不可恢复
-
“历史收益”界面展示从策略开始实盘模拟运行以来的累计收益图(每天一个收益点);
-
“当日收益”展示当前交易日的累计收益情况, 一分钟一个点, 交易日结束之后即清空
-
“最新持仓”, “成交记录”界面分别展示当前策略持仓情况、当日成交记录
# 模拟交易替换代码
在模拟交易的"设置"选项下可以进行代码更换,您可以选择启动该模拟交易的当前策略或者其他策略代码替换目前正在运行的策略。更换之后,原本的仓位、成交、资金使用情况等信息均会被保存下来。
当前已经暂停的策略在替换代码之后策略仍将处于暂停状态;正在运行的策略在替换代码之后保持运行状态不变。
需要注意,您在替换代码的时候,如果勾选"立即运行 init 及 before_trading,初始化所有参数",那么原来 context 中的内容都将会被清除。如果您选择其他策略进行替换代码,需要勾选此选项。
# 开启模拟交易的微信通知
1.点击开启微信通知
2.之后会弹出微信订阅号的二维码。手机扫码成功后,您的微信将和米筐信号进行捆绑:
3.调仓记录生成后就会被实时推送到您的微信端:
4.点击之后跳转到米筐组合调仓界面,首次跳转需要进行登录。
# 模拟交易注意事项
模拟交易在每个 bar 运行后保存状态,当天交易时间结束后结束进程,第二天再恢复。如果您的模拟交易因为非正常原因关闭的话,我们都可以为您恢复到关闭前一个 bar 的状态。
当天结束进程时会保存这些状态:
-
用户账户,持仓信息
-
使用 pickle 保存的 context 对象。 + 注意:context 中不能序列化的变量不会被保存,重启后会不存在,如果你写了如下代码:
def init(context): context.something = query(valuation)
context 是不能被保存的,因为 query()返回的对象无法被序列化。因此日志中会出现
WARN:context.something can not be pickle
正确的做法是将 query()写在
before_trading()
中。