CTP期货期权交易开发

时间:2023-03-08 16:34:07

目录

CTP交易部分接口说明

一、请求接口字段说明(未说明则均为必填字段)

1. 登录:acct_login_id = 5000

  • broker_id:经纪公司代码
  • investor_id:投资者代码
  • pwd:密码

1.1 说明

若登陆成功后,会返回FrontID 、SessionID和MaxOrderRef,在下单时可设置OrderRef以MaxOrderRef为基础自增,这样在没有报单回报时也可以撤单,如果不设置OrderRef,交易核心会在报单回报中返回一个OrderRef保证报单唯一。

2. 结算单确认:acct_settle_comfirm_id = 5005

  • broker_id:经纪公司代码
  • investor_id:投资者代码

3.报单录入:trade_insert_order_id = 9000

3.1 必要字段说明

  • broker_id:经纪公司代码
  • investor_id:投资者代码
  • instrument_id:合约代码
  • user_id:若是普通投资者,则同investor_id
  • exchange_id:交易所代码
  • order_price_type:报单价格条件,
///任意价
#define THOST_FTDC_OPT_AnyPrice '1'
///限价
#define THOST_FTDC_OPT_LimitPrice '2'
///最优价
#define THOST_FTDC_OPT_BestPrice '3'
///最新价
#define THOST_FTDC_OPT_LastPrice '4'
///最新价浮动上浮1个ticks
#define THOST_FTDC_OPT_LastPricePlusOneTicks '5'
///最新价浮动上浮2个ticks
#define THOST_FTDC_OPT_LastPricePlusTwoTicks '6'
///最新价浮动上浮3个ticks
#define THOST_FTDC_OPT_LastPricePlusThreeTicks '7'
///卖一价
#define THOST_FTDC_OPT_AskPrice1 '8'
///卖一价浮动上浮1个ticks
#define THOST_FTDC_OPT_AskPrice1PlusOneTicks '9'
///卖一价浮动上浮2个ticks
#define THOST_FTDC_OPT_AskPrice1PlusTwoTicks 'A'
///卖一价浮动上浮3个ticks
#define THOST_FTDC_OPT_AskPrice1PlusThreeTicks 'B'
///买一价
#define THOST_FTDC_OPT_BidPrice1 'C'
///买一价浮动上浮1个ticks
#define THOST_FTDC_OPT_BidPrice1PlusOneTicks 'D'
///买一价浮动上浮2个ticks
#define THOST_FTDC_OPT_BidPrice1PlusTwoTicks 'E'
///买一价浮动上浮3个ticks
#define THOST_FTDC_OPT_BidPrice1PlusThreeTicks 'F'
///五档价
#define THOST_FTDC_OPT_FiveLevelPrice 'G'
  • direction:买卖方向,
///买
#define THOST_FTDC_D_Buy '0'
///卖
#define THOST_FTDC_D_Sell '1'
  • comb_offset_flag:组合开平标志类型,只需填comb_offset_flag[0],
///开仓
#define THOST_FTDC_OF_Open '0'
///平仓
#define THOST_FTDC_OF_Close '1'
///强平
#define THOST_FTDC_OF_ForceClose '2'
///平今
#define THOST_FTDC_OF_CloseToday '3'
///平昨
#define THOST_FTDC_OF_CloseYesterday '4'
///强减
#define THOST_FTDC_OF_ForceOff '5'
///本地强平
#define THOST_FTDC_OF_LocalForceClose '6'
  • comb_hedge_flag:组合投机套保标志,只需填comb_hedge_flag[0],
///投机
#define THOST_FTDC_HFEN_Speculation '1'
///套利
#define THOST_FTDC_HFEN_Arbitrage '2'
///套期保值
#define THOST_FTDC_HFEN_Hedge '3'
  • limit_price:价格
  • volume_total_original:数量
  • time_condition:有效期类型,如当日有效,
///立即完成,否则撤销
#define THOST_FTDC_TC_IOC '1'
///本节有效
#define THOST_FTDC_TC_GFS '2'
///当日有效
#define THOST_FTDC_TC_GFD '3'
///指定日期前有效
#define THOST_FTDC_TC_GTD '4'
///撤销前有效
#define THOST_FTDC_TC_GTC '5'
///集合竞价有效
#define THOST_FTDC_TC_GFA '6'
  • volume_condition:成交量类型,一般填任何数量,
///任何数量
#define THOST_FTDC_VC_AV '1'
///最小数量
#define THOST_FTDC_VC_MV '2'
///全部数量
#define THOST_FTDC_VC_CV '3'
  • min_volume:最小成交量1
  • contingent_condition:触发条件,
///立即
#define THOST_FTDC_CC_Immediately '1'
///止损
#define THOST_FTDC_CC_Touch '2'
///止赢
#define THOST_FTDC_CC_TouchProfit '3'
///预埋单
#define THOST_FTDC_CC_ParkedOrder '4'
///最新价大于条件价
#define THOST_FTDC_CC_LastPriceGreaterThanStopPrice '5'
///最新价大于等于条件价
#define THOST_FTDC_CC_LastPriceGreaterEqualStopPrice '6'
///最新价小于条件价
#define THOST_FTDC_CC_LastPriceLesserThanStopPrice '7'
///最新价小于等于条件价
#define THOST_FTDC_CC_LastPriceLesserEqualStopPrice '8'
///卖一价大于条件价
#define THOST_FTDC_CC_AskPriceGreaterThanStopPrice '9'
///卖一价大于等于条件价
#define THOST_FTDC_CC_AskPriceGreaterEqualStopPrice 'A'
///卖一价小于条件价
#define THOST_FTDC_CC_AskPriceLesserThanStopPrice 'B'
///卖一价小于等于条件价
#define THOST_FTDC_CC_AskPriceLesserEqualStopPrice 'C'
///买一价大于条件价
#define THOST_FTDC_CC_BidPriceGreaterThanStopPrice 'D'
///买一价大于等于条件价
#define THOST_FTDC_CC_BidPriceGreaterEqualStopPrice 'E'
///买一价小于条件价
#define THOST_FTDC_CC_BidPriceLesserThanStopPrice 'F'
///买一价小于等于条件价
#define THOST_FTDC_CC_BidPriceLesserEqualStopPrice 'H'
  • force_close_reason:强平原因,一般填非强平,
///立即
#define THOST_FTDC_CC_Immediately '1'
///止损
#define THOST_FTDC_CC_Touch '2'
///止赢
#define THOST_FTDC_CC_TouchProfit '3'
///预埋单
#define THOST_FTDC_CC_ParkedOrder '4'
///最新价大于条件价
#define THOST_FTDC_CC_LastPriceGreaterThanStopPrice '5'
///最新价大于等于条件价
#define THOST_FTDC_CC_LastPriceGreaterEqualStopPrice '6'
///最新价小于条件价
#define THOST_FTDC_CC_LastPriceLesserThanStopPrice '7'
///最新价小于等于条件价
#define THOST_FTDC_CC_LastPriceLesserEqualStopPrice '8'
///卖一价大于条件价
#define THOST_FTDC_CC_AskPriceGreaterThanStopPrice '9'
///卖一价大于等于条件价
#define THOST_FTDC_CC_AskPriceGreaterEqualStopPrice 'A'
///卖一价小于条件价
#define THOST_FTDC_CC_AskPriceLesserThanStopPrice 'B'
///卖一价小于等于条件价
#define THOST_FTDC_CC_AskPriceLesserEqualStopPrice 'C'
///买一价大于条件价
#define THOST_FTDC_CC_BidPriceGreaterThanStopPrice 'D'
///买一价大于等于条件价
#define THOST_FTDC_CC_BidPriceGreaterEqualStopPrice 'E'
///买一价小于条件价
#define THOST_FTDC_CC_BidPriceLesserThanStopPrice 'F'
///买一价小于等于条件价
#define THOST_FTDC_CC_BidPriceLesserEqualStopPrice 'H'
  • is_auto_suspend:自动挂起标志,1是,0否,一般填0
  • user_force_close:用户强平标志,1是,0否,一般填0

3.2 特别说明

  • 交易所收到报单后,通过校验,用户会收到报单委托回报QryOrderResp和成交回报TradeResp。若交易所认为报单错误,就会收到报单错误回报InsertOrderErrResp。

  • 如果发送立即限价单:

/// 报单价格条件类型:限价
OrderPriceType = THOST_FTDC_OPT_LimitPrice;
/// 价格:用户设定
LimitPrice = ……;
/// 有效期类型类型:当日有效
TimeCondition = THOST_FTDC_TC_GFD;
  • 如果发送立即市价单
/// 报单价格条件类型:任意价
OrderPriceType = THOST_FTDC_OPT_AnyPrice;
///价格:0
LimitPrice = 0;
///有效期类型类型:立即完成,否则撤销
TimeCondition = THOST_FTDC_TC_IOC;
  • 如果发送触发单
///触发条件:用户设定
ContingentCondition = ……;
///止损价:用户设定
StopPrice = ……;
/// 报单价格条件类型:限价
OrderPriceType = THOST_FTDC_OPT_LimitPrice;
/// 价格:用户设定
LimitPrice = ……;
/// 有效期类型类型:当日有效
TimeCondition = THOST_FTDC_TC_GFD;
  • 关于平仓:

上期所区分昨仓和今仓。

平昨仓时,开平标志类型设置为平仓THOST_FTDC_OF_Close

平今仓时,开平标志类型设置为平今仓THOST_FTDC_OF_CloseToday

其他交易所不区分昨仓和今仓。

开平标志类型统一设置为平仓THOST_FTDC_OF_Close

3.3 报单通知(委托回报)/查询报单 trade_qry_order_id

报单委托回报包含了报单的当前状态,其中包括:

  • (1)原始的报单指令
  • (2)几组交易指令:

FrontID 、SessionID、OrderRef,

BrokerID、BrokerOrderSeq,

ExchangeID 、TraderID 、LocalOrderID

ExchangeID 、OrderSysID,

  • (3)委托报单状态:
///全部成交
#define THOST_FTDC_OST_AllTraded '0'
///部分成交还在队列中
#define THOST_FTDC_OST_PartTradedQueueing '1'
///部分成交不在队列中
#define THOST_FTDC_OST_PartTradedNotQueueing '2'
///未成交还在队列中
#define THOST_FTDC_OST_NoTradeQueueing '3'
///未成交不在队列中
#define THOST_FTDC_OST_NoTradeNotQueueing '4'
///撤单
#define THOST_FTDC_OST_Canceled '5'
///未知
#define THOST_FTDC_OST_Unknown 'a'
///尚未触发
#define THOST_FTDC_OST_NotTouched 'b'
///已触发
#define THOST_FTDC_OST_Touched 'c'

3.4 成交回报/成交通知

成交回报描述了报单的成交事件,包括分笔成交。其中包括:

BrokerID 、BrokerOrderSeq(经纪公司报单编号),

ExchangeID 、TraderID 、LocalOrderID

ExchangeID 、OrderSysID.

已知一笔委托的FrontID、SessionID、OrderRef,要在成交回报中找到相关的成交记

录。可以在委托回报中,从FrontID、SessionID、OrderRef 映射到相关的ExchangeID +

OrderSysID。然后在成交回报中,用ExchangeID 、OrderSysID 找出这笔委托的相关成

交记录。

4. 撤单:trade_order_action_id = 9001

4.1 必要字段填写

  • broker_id:经纪公司代码
  • investor_id:投资者代码
  • instrument_id:合约代码
  • user_id:若是普通投资者,则同investor_id
  • action_flag:只需填action_flag()[0],撤单THOST_FTDC_AF_Delete
///删除
#define THOST_FTDC_AF_Delete '0'
///修改
#define THOST_FTDC_AF_Modify '3'
  • order_ref:报单引用

  • front_id:前置编号

  • session_id:会话编号

  • order_sys_id:报单编号

  • exchange_id:交易所编号

4.2 特别说明

4.2.1 响应和推送信息
  • 交易核心(CTP)发出报单操作请求响应order_action_p,其中包含了错误编码和错误消息。
  • 如果交易核心接受了撤单指令,用户会收到报单回报qry_order_p,用来更新委托状态。
  • 交易所收到撤单后,通过校验,执行了撤单操作。用户还会收到报单回报qry_order_p
  • 如果交易所认为报单错误,用户就会收到报单操作错误回报order_action_err_p
4.2.2 定位单号
  • 报单未在交易所须用(OrderRef+FrontID+SessionID)定位并撤单。报单回报中包含。
  • 报单停留在交易所,可用(OrderSysID+ExchangeID)定位并撤单。成交回报中包含。
  • 可只填写一个字段,但是若填写字段,则必须正确,否则无法定位报单。
  • 以上报单定位字段可在报单通知、成交通知,或者查询报单、查询成交中获得。

5. 预埋单录入:trade_parked_order_insert_id = 9002

仅在非交易时段报入并在新的交易时段开始时被触发并执行。

字段参考普通下单,触发条件为预埋单类型。

6. 预埋撤单:trade_parked_order_action_id = 9004

仅在非交易时段报入并在新的交易时段开始时被触发并执行。

字段参考普通撤单。

7. 删除预埋单:trade_rm_parked_order_id = 9003

  • broker_id:经纪公司代码
  • investor_id:投资者代码
  • parked_order_id:预埋单编号

8. 删除预埋撤单:trade_rm_parked_action_id = 9005

  • broker_id:经纪公司代码
  • investor_id:投资者代码
  • parked_order_action_id:预埋撤单编号

9. 行权委托:trade_exe_order_insert_id = 9007

  • broker_id:经纪公司代码
  • investor_id:投资者代码
  • instrument_id:合约代码
  • volume:数量
  • offset_flag:offset_flag()[0],开平标志
  • hedge_flag:hedge_flag()[0],投机套保标志
  • action_type:执行类型,
///执行
#define THOST_FTDC_ACTP_Exec '1'
///放弃
#define THOST_FTDC_ACTP_Abandon '2'
  • posi_direction:保留头寸申请的持仓方向,
///净
#define THOST_FTDC_PD_Net '1'
///多头
#define THOST_FTDC_PD_Long '2'
///空头
#define THOST_FTDC_PD_Short '3'
  • reserve_position_flag:期权行权后是否保留期货头寸的标记,
///保留
#define THOST_FTDC_EOPF_Reserve '0'
///不保留
#define THOST_FTDC_EOPF_UnReserve '1'
  • close_flag:期权行权后生成的头寸是否自动平仓,
///自动平仓
#define THOST_FTDC_EOCF_AutoClose '0'
///免于自动平仓
#define THOST_FTDC_EOCF_NotToClose '1'

10.撤销行权委托:trade_exe_order_action_id = 9008

参考普通撤单

  • broker_id:经纪公司代码

  • investor_id:投资者代码

  • instrument_id:合约代码

  • user_id:若是普通投资者,则同investor_id

  • action_flag:只需填action_flag()[0],撤单THOST_FTDC_AF_Delete

  • exec_order_ref:执行宣告引用

  • front_id:前置编号

  • session_id:会话编号

  • exec_order_sys_id:执行宣告操作编号

  • exchange_id:交易所编号

11. 登出:acct_logout_id = 5001

  • broker_id:经纪公司代码
  • user_id:用户代码

12. 条件单错误通知:trade_error_conditional_order_notice_id = 9015

条件单校验错误返回该消息。

13. 询价通知:trade_for_quote_notice_id = 9016

14. 合约交易状态通知:trade_instrument_status_notice_id = 9017

15. 查询类:

  • 查询结算单确认信息:acct_qry_settle_comfirm_id = 5004;
  • 查询结算单:acct_qry_settle_info_id = 5006;
  • 查询投资者:acct_qry_investor_id = 5007;
  • 查询报单:trade_qry_order_id = 9101;
  • 查询成交:trade_qry_trade_id = 9102;
  • 查询投资者持仓:trade_qry_investor_position_id = 9103;
  • 查询投资者交易账户:trade_qry_trading_acct_id = 9104;
  • 查询交易通知:trade_qry_trading_notice_id = 9105;
  • 查询交易编号:trade_qry_trading_code_id = 9106;
  • 查询合约保证金率:trade_qry_instr_margin_rate_id = 9107;
  • 查询合约手续费率:trade_qry_instr_comm_rate_id = 9108;
  • 查询交易所:trade_qry_exchange_id = 9109;
  • 查询产品:trade_qry_product_id = 9110;
  • 查询合约:trade_qry_instrument_id = 9111;
  • 查询转账银行:trade_qry_transfer_bank_id = 9113;
  • 查询投资者持仓明细:trade_qry_inv_pos_detail_id = 9114;
  • 查询投资者组合持仓明细:trade_qry_inv_pos_comb_detail_id = 9115;
  • 查询仓单折抵信息:trade_qry_ewarrant_offset_id = 9116;

16. 用户口令更新:acct_user_pwd_update_id = 5002

  • broker_id
  • user_id:用户代码
  • old_password
  • new_password

17. 资金账户口令更新:acct_trade_pwd_update_id = 5003

  • broker_id
  • account_id:投资者账号
  • old_password
  • new_password

18. 获取经纪公司列表:acct_broker_info_id = 8010

8010,属于行情部分

  • client:指定客户端

19. 期货发起银行转期货:trade_from_bank_to_future_by_future_id

  • bank_id:银行代码
  • bank_account:银行帐号
  • bank_password:银行密码
  • broker_id:期商代码
  • account_id:投资者帐号
  • password:期货密码
  • trade_amount:转帐金额

20. 期货发起期货转银行:trade_from_future_to_bank_by_future_id

  • bank_id:银行代码
  • bank_account:银行帐号
  • bank_password:银行密码
  • broker_id:期商代码
  • account_id:投资者帐号
  • trade_amount:转帐金额

21. 期货发起查询银行余额请求:acct_qry_bank_account_money_by_future_id

  • bank_id:银行代码
  • broker_id:期商代码
  • account_id:投资者帐号

二、CTP交易基本流程和通讯

下面是大致流程图:

CTP期货期权交易开发

1. 通讯模式和数据流

期货交易数据换协议期货交易数据换协议( Futures Trading Data Exchange Protocol,FTD),适用于期货交易系统与其下端交易客户端进行交易所需的数据交换和通讯。

  • 对话通讯模式:客户端发起请求,类似C/S模式。
  • 私有通讯模式:交易系统主动向某个特定的客户端发送信息。例如报单回报。
  • 广播通讯模式:向所有客户端发出相同的信息。例如行情。

需要订阅公有流和私。

  • 公有流:交易所向连接着的客户端发布信息。 比如说合约场上状态公有流:交易所向连接着的客户端发布信息。比如说合约场上状态。
  • 私有流:交易所向特定客户端发送的信息。 如报单回报,成交回报。

一般,CTP系统中对话模式下被返回的消息成为 响应 。而私有模式和广播下被返回的消息称为 回报 。

每个数据流应该对应一种通讯模式,但是一个通讯模式可能有多个数据流。

2.数据交换方式

  • 请求/应答方式:client发出请求,server收到应答。
  • 发布/订阅方式:发布者发布信息至主题,订阅者从主题订阅消息。发布者和订阅者相对独立,低耦合。

其他待续