BrentJiang / OpenOrder_CTP

CTP接口的二次封装,实现委托状态和成交的严格排序与缓存,还可以省心支持对接CTP之外的其他证券交易柜台,如LTS、QMT、UFT、TradeX等。

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

OpenOrder_CTP

CTP接口的二次封装,实现委托状态和成交的严格排序与缓存,还可以省心支持对接CTP之外的其他证券交易柜台,如LTS、QMT、UFT、TradeX等。

OpenOrder(CTP)版:是CTP,更省心更全面的API

注意: 目前并未支持所有的CTP API接口,仅支持Order Insert/Cancel委托指令。OpenOrder在内部进行委托查询,所以尚未开放提供委托、成交查询接口。

注意: 目前委托命令中,暂不支持UserForceCloseIsAutoSuspend、``ForceCloseReason`等属性。

注意: 为了在内部维护委托和成交、撤单的关联关系,OrderRef字段被用于存放ORRequestID,自行填入的值会被OpenOrder内部冲销。各个API函数参数nRequestID也被内部冲销。

注意:试用版本,每日撤单的nRequestID编号值不能超过 10。

注意:试用版本,仅提供Win64的Debug版本。

使用OpenOrder(CTP)替换原生CTP接口的使用方式:

  • C++中include使用OpenOrder(CTP)提供的API头文件。
  • 链接“OpenOrderd.lib”和“ctp_wrapperd.lib”。在运行时需要使用“OpenOrderd.dll”。
  • 增加了namespace OpenOrder
  • 取消CreateFtdcTraderApi函数的入参,Init()增加参数,为pCounterConfig,请传入配置信息。
  • 撤单时,仅需要在ReqOrderAction参数中。(暂不支持THOST_FTDC_AF_Modify
  • 其余基本无需改变(不支持的API接口请暂时隐去代码,或联系我进行添加)

内部延迟:30us (试用版 300us)。

主要特点:

  • 使用CTP原生API接口,可以对接CTP柜台,也可以对接到其余的期货和证券交易接口,目前支持TradeX、LTS、QMT等。
  • OpenOrder在内部实现了委托状态管理,自动完成当日委托、成交的有序管理和缓存。
  • 用户在使用OpenOrder之后,委托和成交回报严格按照如下顺序发生:
    • 正报 - 已报 - 已成
    • 正报 - 已报 - 已撤
    • 正报 - 已报 - 部成 - 部成部撤
    • 正报 - 废单(本地/柜台)
    • 正报 - 已报 - 废单(交易所)
  • 成交回报总是在委托状态推送前。
  • 可以确认委托的唯一编号:ORRequestID,无需自行处理OrderRefSessionIDFrontID等信息。如果是补单,则为负数。
    • 所有ORRequestID的编号值的绝对值是单调递增的(不一定连续)。
  • 撤单失败通过onRtnOrder即可得到状态变化。onErrRtnOrderCancel也有返回。

状态机

状态机定义如下图所示(废单已撤部成部撤已成等四种为最终状态):

graph LR

UKN(未报) --> PN(正报)
PN-->N(已报)
PN-->REJ(废单)
N-->PT(部成)
N-->AT(已成)
PT-->AT
PT-->PTAT(部成部撤)
N-->C(已撤)

About

CTP接口的二次封装,实现委托状态和成交的严格排序与缓存,还可以省心支持对接CTP之外的其他证券交易柜台,如LTS、QMT、UFT、TradeX等。


Languages

Language:C++ 99.5%Language:CMake 0.4%Language:Batchfile 0.0%