ptrade从零开始学习量化交易第11期【ptrade策略引擎简介之on_order_response - 委托主推(可选)】

策略引擎简介

更加详细的调用方法,后续会慢慢整理。

也可找寻博主历史文章,搜索关键词使用方案,比如本文涉及函数on_order_response !

感谢关注,咨询开通量化回测与获取实盘权限,欢迎和博主联系!

业务流程框架

ptrade量化引擎以事件触发为基础,通过初始化事件(initialize)、盘前事件(before_trading_start)、盘中事件(handle_data)、盘后事件(after_trading_end)来完成每个交易日的策略任务。

initialize和handle_data是一个允许运行策略的最基础结构,也就是必选项,before_trading_start和after_trading_end是可以按需运行的。

handle_data仅满足日线和分钟级别的盘中处理,tick级别的盘中处理则需要通过tick_data或者run_interval来实现。

ptrade还支持委托主推事件(on_order_response)、交易主推事件(on_trade_response),可以通过委托和成交的信息来处理策略逻辑,是tick级的一个补充。

除了以上的一些事件以外,ptrade也支持通过定时任务来运行策略逻辑,可以通过run_daily接口实现。

on_order_response - 委托主推(可选)

on_order_response(context, order_list)

使用场景

该函数仅在交易模块可用

接口说明

该函数会在委托主推回调时响应,比引擎、get_order()和get_orders()函数更新Order状态的速度更快,适合对速度要求比较高的策略。

注意事项:

  1. 目前可接收股票、可转债、ETF、LOF、期货代码的主推数据。

  2. 当接到策略外交易产生的主推时(需券商配置默认不推送),由于没有对应的Order对象,主推信息中order_id字段赋值为""。

  3. 当在主推里调用委托接口时,需要进行判断处理避免无限迭代循环问题。

  4. 当券商配置接收策略外交易产生的主推且策略调用set_parameters()并设置receive_other_response="1"时,策略中将接收非本交易产生的主推。

  5. 当策略调用set_parameters()并设置receive_cancel_response="1",策略接收到撤单成交主推时,主推信息中的order_id为买入或卖出委托Order对象的order_id,entrust_no为撤单委托的委托编号。

  6. 撤单委托主推信息中成交数量均处理为正数。

可调用委托接口
参数

context: Context对象,存放有当前的账户及持仓信息;

order_list:一个列表,当前委托单发生变化时,发生变化的委托单列表。委托单以字典形式展现,内容包括:'entrust_no'(委托编号), 'error_info'(错误信息), 'order_time'(委托时间), 'stock_code'(股票代码), 'amount'(委托数量), 'price'(委托价格), 'business_amount'(成交数量), 'status'(委托状态), 'entrust_type'(委托类别), 'entrust_prop'(委托属性), 'order_id'(Order对象编号);

字段备注:

  • status -- 委托状态,详见Order对象;
  • entrust_type -- 委托类别(str)
    • 0 -- 委托
    • 2 -- 撤单
    • 4 -- 确认
    • 6 -- 信用融资
    • 7 -- 信用融券
    • 9 -- 信用交易
  • entrust_prop -- 委托属性(str)
    • 0 -- 买卖
    • 1 -- 配股
    • 3 -- 申购
    • 7 -- 转股
    • 9 -- 股息
    • N -- ETF申赎
    • Q -- 对手方最优价格
    • R -- 最优五档即时成交剩余转限价
    • S -- 本方最优价格
    • T -- 即时成交剩余撤销
    • U -- 最优五档即时成交剩余撤销
    • b -- 定价委托
    • c -- 确认委托
    • d -- 限价委托
返回

None

接收到的主推格式如下:
本交易产生的主推:[{'business_amount': 0.0, 'order_id': 'e71d1684c8a74b4ca00b3326c9eb8614', 'order_time': '2022-05-10 15:52:10.780', 'entrust_prop': '0', 'status': '2', 'price': 36.95, 'entrust_no': '700006', 'error_info': '', 'amount': 200, 'stock_code': '600570.SS', 'entrust_type': '0'}]
非本交易产生的主推:[{'business_amount': 0.0, 'order_id': '', 'order_time': '2022-05-10 15:54:30.204', 'entrust_prop': '0', 'status': '2', 'price': 36.95, 'entrust_no': '700008', 'error_info': '', 'amount': 200, 'stock_code': '600570.SS', 'entrust_type': '0'}]
示例
def initialize(context):
    g.security = ['600570.SS','002416.SZ']
    set_universe(g.security)
    g.flag = 0

def on_order_response(context, order_list):
    log.info(order_list)
    if(g.flag==0):
        order('600570.SS', 100)
        g.flag = 1
    else:
        log.info("end")

def handle_data(context, data):
    order('600570.SS', 100)

 

  • 16
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值