PTrade 委托下单方式详解
在量化交易中,数据与交易是两大核心支柱。无论是逐笔成交、Tick 数据,还是 1 分钟线(1m)、多分钟周期、日线、周线、月线、季线、年线,PTrade 均提供了对应的接口支持。
那么——拿到数据之后
- 如何在 PTrade 中实现委托下单?
- 委托下单又区分为哪些委托方式?
- 委托下单需要使用哪些接口?
- 回测场景和交易场景委托下单有何区别?
接下来,一文讲透 PTrade 委托下单的那些事!
回测场景
回测场景中,PTrade 委托从接口角度分为以下几种:
按固定数量委托 order
order(stock, amount, limit_price=None)
函数功能: 以限价委托方式,对交易标的进行固定数量的委托。
共有三个参数:股票代码、委托数量、限价价格。
必传参数:
stockamount(买入为正数,卖出为负数)
选填参数:
limit_price(limit_price 是一个限价价格参数,不输入时默认用即时最新价下单。如果想用某个指定价格下单,只需要传入这个价格即可,比如limit_price=56)
返回值: 订单编号
▍买入:
比如恒生电子按照最新价格买入 100 股就是:
order_id = order('600570.SS', 100, limit_price=None)
比如恒生电子按照 56 的价格买入 100 股就是:
order_id = order('600570.SS', 100, limit_price=56)
▍卖出:
比如恒生电子按照最新价格卖出 100 股就是:
order_id = order('600570.SS', -100, limit_price=None)
按固定金额委托 order_value
order_value(stock, value, limit_price=None)
函数功能: 以限价委托方式,对交易标的进行固定金额的委托。
一共三个参数:股票代码、委托金额、限价价格。
必传参数:
stockvalue(买入为正数,卖出为负数)
选填参数:
limit_price
按目标数量委托 order_target
order_target(stock, amount, limit_price=None)
函数功能: 以限价委托方式,对交易标的持仓数量调整至目标数量。
一共三个参数:股票代码、目标数量、限价价格。
必传参数:
stock- 目标数量(不能为负数)
选填参数:
limit_price
按目标金额委托 order_target_value
order_target_value(stock, value, limit_price=None)
函数功能: 以限价委托方式,对交易标的持仓金额调整至目标金额。
一共三个参数:股票代码、目标数量、限价价格。
必传参数:
stock- 目标金额(不能为负数)
选填参数:
limit_price
回测场景接口对比
| 委托接口 | 使用场景 | 优势 |
|---|---|---|
| order() | 按固定数量交易。回测模式中,一般在个股按固定数量加减仓处理的场景使用。 | |
| order_value() | 按固定金额交易。后台结合个股最新价计算出委托数量。例如:在网格区间内高抛低吸固定金额。 | 是 order() 的衍生函数,省去了通过金额转换成数量的计算过程。 |
| order_target() | 按目标持仓数量交易。一般在清仓场景使用,后台获取交易前持仓量并调整至目标量。例如:个股盈利 8% 后全部止盈。 | 是 order() 的衍生函数,快速调整持仓至目标数量,省去计算委托量的过程。 |
| order_target_value() | 按目标持仓金额交易。一般在个股建仓、组合调仓场景使用。例如:持仓 10 只股票,每 10 日调仓,使单只持仓不超过总资产 10%。 | 是 order() 的衍生函数,快速调整持仓至目标金额,省去计算委托量的过程。 |
交易场景
交易场景 PTrade 委托从接口角度分为以下几种:
限价固定数量委托 order
order(stock, amount, limit_price=None)
函数功能: 以限价委托方式,对交易标的进行固定数量的委托。
限价固定金额委托 order_value
order_value(stock, value, limit_price=None)
函数功能: 以限价委托方式,对交易标的进行固定金额的委托。
限价目标数量委托 order_target
order_target(stock, amount, limit_price=None)
函数功能: 以限价委托方式,对交易标的进行固定金额的委托。
限价目标金额委托 order_target_value
order_target_value(stock, value, limit_price=None)
函数功能: 以限价委托方式,对交易标的持仓金额调整至目标金额。
市价固定数量委托 order_market
order_market(stock, amount, market_type, limit_price=None)
函数功能: 以市价委托方式,对交易标的进行固定数量的委托。
一共四个参数:股票代码、委托数量、市价委托类型、保护限价。
必传参数:
stockamount(买入为正数,卖出为负数)market_type(上证股票支持参数 0、1、2、4,深证股票支持参数 0、2、3、4、5)
| 参数值 | 参数含义 | 说明 |
|---|---|---|
| 0 | 对手方最优价格 | 以买一/卖一价委托 |
| 1 | 最优五档即时成交剩余转限价 | 尝试在前五档成交,没成交完的部分转为限价单 |
| 2 | 本方最优价格 | 以买一/卖一价(己方队列首位)委托 |
| 3 | 即时成交剩余撤销 | 立即尝试成交,无法成交的部分直接撤单 |
| 4 | 最优五档即时成交剩余撤销 | 尝试在前五档成交,没成交完的部分直接撤单 |
| 5 | 全额成交或撤单 | 要求必须全部成交,否则整单撤销 |
选填参数:
limit_price(limit_price 是一个市价委托的保护限价参数,该函数委托上证股票时 limit_price 是必传字段,如不传入参数会出现报错)
▍买入:
比如恒生电子以 35 保护限价按对手方最优价格买入 100 股:
order_id = order_market('600570.SS', 100, 0, limit_price=35)
总结
通过上述罗列,在回测场景及交易场景中,使用 PTrade 委托下单不同接口的应用及区别如下:
| 委托接口 | 使用场景 | 交易与回测使用区别 |
|---|---|---|
| order() | 按固定数量交易。 | 没有区别 |
| order_value() | 按固定金额交易。 | 没有区别 |
| order_target() | 按目标持仓数量交易。 | 仅在清仓、和个股第一次建仓场景使用没有区别,其他场景不建议在交易中使用。 |
| order_target_value() | 按目标持仓金额交易。 | 仅在清仓、和个股第一次建仓场景使用没有区别,其他场景不建议在交易中使用。 |
| order_market() | 按固定数量进行市价委托交易。常用于个股加减仓,与 order() 区别在于市价单能尽可能保证成交(允许一定滑点以求快速成交)。 | 回测无该函数 |
备注:
order_target() 和 order_target_value() 两个函数在回测和交易中会有很大的区别。
原因在于回测中账户信息的更新是随着每一笔交易的发生而瞬时更新的,因此当
order_id = order_target('600570.SS', 200, limit_price=56)连续运行两次的时候,第二笔是不会发生的,因为第一次运行的时候持仓已经变成了 200,第二次委托数量实际为 0。然而到了模拟交易和实盘交易,这个逻辑就会出现问题。比如委托前持仓为 0,
order_id = order_target('600570.SS', 200, limit_price=56)连续运行两次,第一次运行完后向柜台报了 200 股的买单,第二次运行的时候账户还没有更新这 200 股的成交信息,因此,这时候计算委托数量仍然是 200 股,报送柜台,这样就会导致重复委托,实际上这两次操作后持仓就是 400 股了。这就是在途单的影响。因此模拟交易和实盘交易我们不建议用这两个函数,除非是清仓的场景,或者是个股第一次建仓的场景。
总的来说:
量化委托和手工交易委托一样,底层只有按数量限价委托和按数量市价委托两种,其他的委托方式是为了更加便捷地在各种不同场景进行委托下单。但要注意回测场景和交易场景的不同点,避免出现重复交易。