CTP期貨期權交易開發

目錄

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交易基本流程和通訊

下面是大致流程圖:

1. 通訊模式和數據流

期貨交易數據換協議期貨交易數據換協議( Futures Trading Data Exchange Protocol,FTD),適用於期貨交易系統與其下端交易客戶端進行交易所需的數據交換和通訊。

  • 對話通訊模式:客戶端發起請求,類似C/S模式。
  • 私有通訊模式:交易系統主動向某個特定的客戶端發送信息。例如報單回報。
  • 廣播通訊模式:向所有客戶端發出相同的信息。例如行情。

需要訂閱公有流和私。

  • 公有流:交易所向連接着的客戶端發佈信息。 比如說合約場上狀態公有流:交易所向連接着的客戶端發佈信息。比如說合約場上狀態。
  • 私有流:交易所向特定客戶端發送的信息。 如報單回報,成交回報。

一般,CTP系統中對話模式下被返回的消息成爲 響應 。而私有模式和廣播下被返回的消息稱爲 回報 。

每個數據流應該對應一種通訊模式,但是一個通訊模式可能有多個數據流。

2.數據交換方式

  • 請求/應答方式:client發出請求,server收到應答。
  • 發佈/訂閱方式:發佈者發佈信息至主題,訂閱者從主題訂閱消息。發佈者和訂閱者相對獨立,低耦合。

其他待續

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章