# 下单

# place_order

place_order(price, qty, code, trd_side, order_type=OrderType.NORMAL, adjust_limit=0, trd_env=TrdEnv.REAL, acc_id=0, acc_index=0, remark=None, time_in_force=TimeInForce.DAY, fill_outside_rth=False, aux_price=None, trail_type=None, trail_value=None, trail_spread=None)

  • 介绍

    下单

    提示

    Python API 是同步的,但网络收发是异步的。当 place_order 对应的应答数据包与 响应成交推送回调响应订单推送回调 间隔很短时,就可能出现 place_order 的数据包先返回,但回调函数先被调用的情况。例如:可能先调用了 响应订单推送回调,然后 place_order 这个接口才返回。

  • 参数

    参数 类型 说明
    price float 订单价格
    qty float 订单数量
    code str 标的代码
    trd_side TrdSide 交易方向
    order_type OrderType 订单类型
    adjust_limit float 价格微调幅度
    trd_env TrdEnv 交易环境
    acc_id int 交易业务账户 ID
    acc_index int 交易业务账户列表中的账户序号
    remark str 备注
    time_in_force TimeInForce 有效期限
    fill_outside_rth bool 是否允许盘前盘后
    aux_price float 触发价格
    trail_type TrailType 跟踪类型
    trail_value float 跟踪金额/百分比
    trail_spread float 指定价差
  • 返回

    参数 类型 说明
    ret RET_CODE 接口调用结果
    data pd.DataFrame 当 ret == RET_OK 时,返回订单列表
    str 当 ret != RET_OK 时,返回错误描述
    • 订单列表格式如下:
      字段 类型 说明
      trd_side TrdSide 交易方向
      order_type OrderType 订单类型
      order_status OrderStatus 订单状态
      order_id str 订单号
      code str 股票代码
      stock_name str 股票名称
      qty float 订单数量
      price float 订单价格
      create_time str 创建时间
      updated_time str 最后更新时间
      dealt_qty float 成交数量
      dealt_avg_price float 成交均价
      last_err_msg str 最后的错误描述
      remark str 下单时备注的标识
      time_in_force TimeInForce 有效期限
      fill_outside_rth bool 是否允许盘前盘后(仅用于美股)
      aux_price float 触发价格
      trail_type TrailType 跟踪类型
      trail_value float 跟踪金额/百分比
      trail_spread float 指定价差
  • Example

from futu import *
pwd_unlock = '123456'
trd_ctx = OpenSecTradeContext(filter_trdmarket=TrdMarket.HK, host='127.0.0.1', port=11111, security_firm=SecurityFirm.FUTUSECURITIES)
ret, data = trd_ctx.unlock_trade(pwd_unlock)  # 若使用真实账户下单,需先对账户进行解锁。此处示例为模拟账户下单,也可省略解锁。
if ret == RET_OK:
    ret, data = trd_ctx.place_order(price=510.0, qty=100, code="HK.00700", trd_side=TrdSide.BUY, trd_env=TrdEnv.SIMULATE)
    if ret == RET_OK:
        print(data)
        print(data['order_id'][0])  # 获取下单的订单号
        print(data['order_id'].values.tolist())  # 转为 list
    else:
        print('place_order error: ', data)
else:
    print('unlock_trade failed: ', data)
trd_ctx.close()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
  • Output

       code stock_name trd_side order_type order_status           order_id    qty  price          create_time         updated_time  dealt_qty  dealt_avg_price last_err_msg remark time_in_force fill_outside_rth aux_price trail_type trail_value trail_spread currency
0  HK.00700       腾讯控股      BUY     NORMAL   SUBMITTING  38196006548709500  100.0  420.0  2021-11-04 11:38:19  2021-11-04 11:38:19        0.0              0.0                               DAY              N/A       N/A        N/A         N/A          N/A      HKD
38196006548709500
['38196006548709500']
1
2
3
4
5

接口限制

  • 每 30 秒内最多请求 15 次下单接口,且连续两次请求的间隔不可小于 0.02 秒。
  • 真实账户调用下单接口前,需要先进行 解锁;模拟账户无需解锁。

提示

  • 各订单类型对应的必传参数:点击这里 了解更多
  • 对于 可做空标的,暂不支持锁仓功能,故无法同时持有相同产品的多头头寸和空头头寸。
  • 如果希望对 可做空标的 进行 平仓 操作,需要自行判断持仓头寸的方向,然后提交一笔反向的相同数量的订单完成平仓操作。
  • 如果希望对 可做空标的 进行 反手 操作,需要两步:1. 先判断持仓头寸的方向,并提交一笔反向的相同数量的订单完成平仓操作;2. 提交一笔反向的订单,完成反向订单的提交。
    举例:A 当前持有 1 手 HK.HSI2012 期货合约的多单,如果希望反手,必须先 卖出 1 手 HK.HSI2012 完成平仓,再卖出 1 手 HK.HSI2012 完成空单的建立。