背景与目的
之前我们有了策略回测代码,到实盘要经过熟悉实盘API、写代码、调试代码的环节,大概还需要1-2周的时间才能实盘,有非常多的用户到这一步 会束手无策,甚至放弃!
现在,有了回测代码直接实盘的功能,可以省去这个步骤,让刚入门的朋友也可以直接拿回测代码进行实盘了。很棒!为我们的工程师点赞!
此外还新增了一些接口,方便实盘交易。
不断降低实盘的门槛是我们的目标,如果您有任何好的想法意见请随时留言!
本功能需要重启研究环境才能生效!
策略实盘交易(回测代码1分钟实盘)
- ?调用方法:
research_trade( name, source_code, capital_base=100000, frequency='DAILY', stock_market='STOCK', benchmark=None, trade_api=None, signal_mode=True, dry_run=False, recover_dt=False, )
- ?参数说明:
- name:str,策略名称,会在./persist/下生成一个同名目录,用于存放持久化的策略信息
- source_code:str,策略代码,可从策略研究模块中直接复制,代码置于"""..."""中
- capital_base: float,初始资金量
- 如果接入了TradeAPI对象,且
signal_mode=False
,那么此参数无意义
- 如果接入了TradeAPI对象,且
- frequency: str,策略频率,'DAILY'或'MINUTE'
- stock_market: str,策略类型,默认'STOCK'
- benchmark: str,基准指数
- trade_api: TradeAPI对象,绑定需要仿真交易的资金账号
- signal_mode: bool,(新增)默认为
True
signal_mode=True
,此时策略实际上运行的时初始资金为capital_base的模拟交易,context、get_orders等方法返回的结果均为模拟交易中计算的数据,与资金账号的数据无关;策略下单在模拟交易撮合成交后,才会通过trade_api下单至柜台signal_mode=False
,此时策略中context、get_orders等方法返回的结果均为从 柜台查询,策略下单也会直接下至柜台
- dry_run: bool,试运行,立即返回,默认为
False
- recover_dt: bool或 str,(新增)是否断点运行,默认为
False
recover_dt=False
,从当前时点开始执行,不从断定运行recover_dt=True
,从上次策略结束时点开始运行recover_dt='today'
,从当日开始运行,此模式下只会补执行before_trading
与open_auction
,handle_bar
依旧从当前时间开始执行recover_dt='yyyyMMdd HH:mm'
,从指定时间开始运行
- ?️ 返回值:
- ?作用:
- 模拟交易:撮合机制与回测相同
- 仿真交易:通过仿真柜台撮合,更贴近真实交易环境
- ❗注意事项:
- 策略需在9:00前开启运行,否则在未设置recover_dt的情况下,会跳过before_trading等步骤
- 初始化TradeAPI时需要指定下单策略order_policy,MarketPolicy为市价下单;LimitPolicy为限价下单。如未指定,由于策略下单时使用均价,可能存在多位小数,最终实盘账户下单的时候可能产生废单
signal_mode=True
时,如想在context中获得仿真账号的持仓、资金等数据,可以使用同步函数sync_trade_api()
- ?示例:
from tick_trade_api import TradeAPI #初始化TradeAPI时需要指定下单策略,MarketPolicy为市价下单;LimitPolicy为限价下单 trade_api=TradeAPI('69271711',order_policy=MarketPolicy) source_code=""" # 股票策略模版 def init(context): pass # 盘前执行 def before_trading(context): pass # 开盘时运行函数 def handle_bar(context, bar_dict): order_id = order('000001.SZ', 100) print(get_orders()) try: cancel_order(order_id) except: print('撤单失败') print(get_open_orders()) print(get_tradelogs()) print(context.portfolio.stock_account) print(context.portfolio.positions) """ rtrade = research_trade( '研究环境策略', source_code, frequency='MINUTE', trade_api=trade_api, signal_mode=False, recover_dt='today' )
trade_api=TradeAPI('69271711',order_policy=MarketPolicy) 中的账号是模拟资金账号或者是实盘资金账号。
其他更新
这次还增加了几个功能
策略框架中增加 :
- cancel_order_all() 全撤
- get_tradelogs()获取当日全部成交订单
- get_orders() 获取委托,和get_order()一致,主要时和tradeapi中函数名对齐
tradeapi增加:
- get_open_orders() 获取当日未成订单
- cancel_order_all() 全撤