众所周知,天下大坑共一石,CTP独占八斗。进行CTP开发时,里面需要注意的地方比较多。今天给大家聊一聊CTP中暗藏的一些坑,让新手避开陷阱。
欢迎来QQ群736174420,一起交流讨论CTP的使用!~
01
报单时的开平方向和投机套保标志,怎么填?
报单是填的组合开平方向TThostFtdcCombOffsetFlagType是一个数组,元素值的类型为TThostFtdcOffsetFlagType。在最开始的设计中,单腿合约交易只需要填[0]位,组合合约交易时各分腿的开平标志从[0]开始,每个元素对应一条分腿,暂定为5位,当时市场上最长的组合合约为3条腿。但在后来的设计中,所有类型的合约都只需要填[0]位即可,因此把它当作TThostFtdcOffsetFlagType来处理就好。
与此类似的,组合投机套保标志CombHedgeFlag在设计之初也是为了处理组合套利合约而设计的多位,但现在也是只需要把它当作TThostFtdcHedgeFlagType,填[0]位就好。
///TFtdcCombOffsetFlagType是一个组合开平标志类型
typedef char TThostFtdcCombOffsetFlagType[5];
///TFtdcCombHedgeFlagType是一个组合投机套保标志类型
typedef char TThostFtdcCombHedgeFlagType[5];
///TFtdcOffsetFlagType是一个开平标志类型
///开仓
#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'
typedef char TThostFtdcOffsetFlagType;
///TFtdcHedgeFlagType是一个投机套保标志类型
///投机
#define THOST_FTDC_HF_Speculation '1'
///套利
#define THOST_FTDC_HF_Arbitrage '2'
///套保
#define THOST_FTDC_HF_Hedge '3'
///做市商
#define THOST_FTDC_HF_MarketMaker '5'
typedef char TThostFtdcHedgeFlagType;
///输入报单
struct CThostFtdcInputOrderField
{
//...
///组合开平标志
TThostFtdcCombOffsetFlagType CombOffsetFlag;
///组合投机套保标志
TThostFtdcCombHedgeFlagType CombHedgeFlag;
//...
}
报单示例:
CThostFtdcInputOrderField order = {0};
///设置报单的开平标志为 开仓
order.CombOffsetFlag[0] = THOST_FTDC_OF_Open;
///设置报单的投机套保标志为 投机
order.CombHedgeFlag[0] = THOST_FTDC_HF_Speculation;
02
API是否多线程安全的(linux以及windows平台)?
CTP的API和SPI是不同的线程,API可以同时被多个线程调用,也就是实现了大家所说的线程安全性。这些特性和平台无关。因此,API是线程安全的,可以在多个线程调用API的接口函数。
同时,同一个API实例的所有响应、回报(回调On*接口),都是通过同一个线程来推送给使用者的。例如,使用行情API订阅行情后,行情数据(回调OnRtnDepthMarketdata)通过同一个线程推送来的,如果在回调On*接口里处理时间太长造成了阻塞,则会影响之后的回调的处理,时间太长甚至会导致API断开连接。
03
投资者结算结果确认是什么意思?有什么用?
投资者在登录后首先需要确认(Confirm)自己的结算单(SettlementInfo,即账单),表示认可经纪商提供的交易结果,结算单确认后才可以进行交易操作。
终端可以使用ReqSettlementInfoConfirm请求确认结算单,请求时只需要填写经纪公司代码BrokerID和投资者代码InvestorID。
- 怎么查结算单内容呢?
查询结算单使用ReqQrySettlementInfo,若不填日期,则表示取上一交易日结算单,结算单内容的文本(Content)较长,会通过多条返回,需要自行拼接。拼接时注意中文编码的问题,见:结算单中有乱码?https://blog.csdn.net/baidu_37097818/article/details/137864936
- 那么,如何知道自己今天有没有确认过结算单呢?
使用ReqQrySettlementInfoConfirm可以查询当天客户结算单的确认情况,无记录返回(可能返回空指针)表示当天未确认结算单,为避免客户当天多次登陆多次重复确认结算单,建议在确认前先查询当天是否已经确认,如果客户已经确认过则不需要再次重复确认。
这里以快期2软件为例,来看看它是怎么处理确认结算的流程的。
打开快期2之后,由于我这个账户今天还没有确认过结算单,所以ReqQrySettlementInfoConfirm查询结算单确认情况发现,今天还没有确认过,所以快期软件执行ReqQrySettlementInfo查结算单,并将查询返回的结算单内容展示出来。如果在展示出来的结算单确认页面这里点击“确认”按钮,则会发送确认的命令ReqSettlementInfoConfirm。
如果对结算单有异议,则点击“取消”,点击后会退出软件。
如果打开软件时,我这个账户今天已经确认过结算单,那么软件在ReqQrySettlementInfoConfirm查询结算单确认情况时,就会发现今天已经确认过了,无需再次确认,所以就不会去执行ReqQrySettlementInfo查结算单以及展示,即跳过后续的步骤,可正常使用软件交易。
流程图如下:
04
结算单可以自动解析么?格式是怎样的?
各个期货公司的结算单内容有一些小差别,但总的差别不大,而且格式是长期不变的。如果仔细研究,是可以实现自动解析的,从而从结算单中提取(历史)成交记录等。
这里提供一个通用的产生结算单的格式化的文件(LocalCTP平台 即是通过这个文件产生的结算单 ,注意是GBK编码),以帮助大家解析,具体的使用方法就见仁见智了。
settlement_header1=_
settlement_header2=_ 制表时间 Creation Date:%8s
settlement_header3=_----------------------------------------------------------------------------------------------------
settlement_header4=_ 交易结算单(盯市) Settlement Statement(MTM)
settlement_header5=_客户号 Client ID:%-16s客户名称 Client Name:%s
settlement_header6=_日期 Date:%8s
settlement_header7=_
settlement_header8=_
settlement_header9=_
settlement_header10=_
settlement_account_summary1=_ 资金状况 币种:人民币 Account Summary Currency:CNY
settlement_account_summary2=_----------------------------------------------------------------------------------------------------
settlement_account_summary3=_期初结存 Balance b/f:%13.2f 基础保证金 Initial Margin:%13.2f
settlement_account_summary4=_出 入 金 Deposit/Withdrawal:%13.2f 期末结存 Balance c/f:%13.2f
settlement_account_summary5=_平仓盈亏 Realized P/L:%13.2f 质 押 金 Pledge Amount:%13.2f
settlement_account_summary6=_持仓盯市盈亏 MTM P/L:%13.2f 客户权益 Client Equity::%13.2f
settlement_account_summary7=_期权执行盈亏 Exercise P/L:%13.2f 货币质押保证金占用 FX Pledge Occ.:%13.2f
settlement_account_summary8=_手 续 费 Commission:%13.2f 保证金占用 Margin Occupied:%13.2f
settlement_account_summary9=_行权手续费 Exercise Fee:%13.2f 交割保证金 Delivery Margin:%13.2f
settlement_account_summary10=_交割手续费 Delivery Fee:%13.2f 多头期权市值 Market value(long):%13.2f
settlement_account_summary11=_货币质入 New FX Pledge:%13.2f 空头期权市值 Market value(short):%13.2f
settlement_account_summary12=_货币质出 FX Redemption:%13.2f 市值权益 Market value(equity):%13.2f
settlement_account_summary13=_质押变化金额 Chg in Pledge Amt:%13.2f 可用资金 Fund Avail.:%13.2f
settlement_account_summary14=_权利金收入 Premium received:%13.2f 风 险 度 Risk Degree:%13.2f%%
settlement_account_summary15=_
settlement_deposit_withdrawal_head1=_ 出入金明细 Deposit/Withdrawal
settlement_deposit_withdrawal_head2=_----------------------------------------------------------------------------------------------------------------
settlement_deposit_withdrawal_head3=_|发生日期| 出入金类型 | 入金 | 出金 | 说明 |
settlement_deposit_withdrawal_head4=_| Date | Type | Deposit | Withdrawal | Note |
settlement_deposit_withdrawal_head5=_----------------------------------------------------------------------------------------------------------------
settlement_deposit_withdrawal_single_record1=_|%-8s|出入金 |%16.2f|%16.2f|%-42s|
settlement_deposit_withdrawal_end1=_----------------------------------------------------------------------------------------------------------------
settlement_deposit_withdrawal_end2=_|共%4d条| |%16.2f|%16.2f| |
settlement_deposit_withdrawal_end3=_----------------------------------------------------------------------------------------------------------------
settlement_deposit_withdrawal_end4=_出入金---Deposit/Withdrawal 银期转账---Bank-Futures Transfer 银期换汇---Bank-Futures FX Exchange
settlement_deposit_withdrawal_end5=_
settlement_trade_head1=_ 成交记录 Transaction Record
settlement_trade_head2=_---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
settlement_trade_head3=_|成交日期| 交易所 | 品种 | 合约 |买/卖| 投/保 | 成交价 | 手数 | 成交额 | 开平 | 手续费 | 平仓盈亏 | 权利金收支 | 成交序号 |
settlement_trade_head4=_| Date |Exchange| Product | Instrument | B/S | S/H | Price | Lots | Turnover | O/C | Fee |Realized P/L|Premium Received/Paid| Trans.No. |
settlement_trade_head5=_---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
settlement_trade_single_record1=_|%-8s|%-8s|%-18s| %-11s|%-5s|投 |%10.3f|%6d|%12.2f|%-18s|%10.2f|%12.2f| 0.00|%-12s|
settlement_trade_end1=_---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
settlement_trade_end2=_|共%4d条| | | | | |%6d|%12.2f| |%10.2f|%12.2f| 0.00| |
settlement_trade_end3=_---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
settlement_trade_end4=_能源中心---INE 上期所---SHFE 中金所---CFFEX 大商所---DCE 郑商所---CZCE 广期所---GFEX
settlement_trade_end5=_买---Buy 卖---Sell
settlement_trade_end6=_投---Speculation 保---Hedge 套---Arbitrage 般---General
settlement_trade_end7=_开---Open 平---Close 平今---Close Today 强平---Forced Liquidation 平昨---Close Prev. 强减---Forced Reduction 本地强平---Local Forced Liquidation
settlement_trade_end8=_
settlement_position_closed_head1=_ 平仓明细 Position Closed
settlement_position_closed_head2=_----------------------------------------------------------------------------------------------------------------------------------------------------------------------
settlement_position_closed_head3=_| 平仓日期 | 交易所 | 品种 | 合约 |开仓日期 |买/卖| 手数 | 开仓价 | 昨结算 | 成交价 | 平仓盈亏 | 权利金收支 |
settlement_position_closed_head4=_|Close Date|Exchange| Product | Instrument |Open Date| B/S | Lots |Pos. Open Price| Prev. Sttl |Trans. Price|Realized P/L|Premium Received/Paid|
settlement_position_closed_head5=_----------------------------------------------------------------------------------------------------------------------------------------------------------------------
settlement_position_closed_single_record1=_|%-10s|%-8s|%-18s|%-16s|%-9s|%-5s|%10d|%15.3f|%16.3f|%12.3f|%12.2f| 0.000|
settlement_position_closed_end1=_----------------------------------------------------------------------------------------------------------------------------------------------------------------------
settlement_position_closed_end2=_|共%6d条| | | | | |%10d| | | |%12.2f| 0.00|
settlement_position_closed_end3=_----------------------------------------------------------------------------------------------------------------------------------------------------------------------
settlement_position_closed_end4=_能源中心---INE 上期所---SHFE 中金所---CFFEX 大商所---DCE 郑商所---CZCE 广期所---GFEX
settlement_position_closed_end5=_买---Buy 卖---Sell
settlement_position_closed_end6=_
settlement_position_detail_head1=_ 持仓明细 Positions Detail
settlement_position_detail_head2=_-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
settlement_position_detail_head3=_| 交易所 | 品种 | 合约 |开仓日期 | 投/保 |买/卖|持仓量 | 开仓价 | 昨结算 | 结算价 | 浮动盈亏 | 盯市盈亏 | 保证金 | 期权市值 |
settlement_position_detail_head4=_|Exchange| Product | Instrument |Open Date| S/H | B/S |Positon|Pos. Open Price| Prev. Sttl |Settlement Price| Accum. P/L | MTM P/L | Margin | Market Value(Options)|
settlement_position_detail_head5=_-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
settlement_position_detail_single_record1=_|%-8s|%-18s| %-11s|%9s|投 |%-5s|%7d|%15.3f|%16.3f|%16.3f|%12.2f|%11.2f|%11.2f| 0.00|
settlement_position_detail_end1=_-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
settlement_position_detail_end2=_|共%4d条| | | | | |%7d| | | |%12.2f|%11.2f|%11.2f| 0.00|
settlement_position_detail_end3=_-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
settlement_position_detail_end4=_能源中心---INE 上期所---SHFE 中金所---CFFEX 大商所---DCE 郑商所---CZCE
settlement_position_detail_end5=_买---Buy 卖---Sell
settlement_position_detail_end6=_投---Speculation 保---Hedge 套---Arbitrage 般---General
settlement_position_detail_end7=_
settlement_position_head1=_ 持仓汇总 Positions
settlement_position_head2=_------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
settlement_position_head3=_| 品种 | 合约 | 买持 | 买均价 | 卖持 | 卖均价 | 昨结算 | 今结算 |持仓盯市盈亏| 保证金占用 | 投/保 | 多头期权市值 | 空头期权市值 |
settlement_position_head4=_| Product | Instrument | Long Pos. |Avg Buy Price| Short Pos. |Avg Sell Price|Prev. Sttl|Sttl Today| MTM P/L |Margin Occupied| S/H |Market Value(Long)|Market Value(Short)|
settlement_position_head5=_------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
settlement_position_single_record1=_|%-18s|%-16s|%13d|%13.3f|%14d|%14.3f|%10.3f|%10.3f|%12.2f|%15.2f|投 | 0.00| 0.00|
settlement_position_end1=_------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
settlement_position_end2=_|共%6d条 | |%13d| |%14d| | | |%12.2f|%15.2f| | 0.00| 0.00|
settlement_position_end3=_------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
settlement_position_end4=_
settlement_position_end5=_
settlement_position_end6=_
settlement_position_end7=_
settlement_position_end8=_