做市商询价和报价
1.指令介绍
- 1.请求询价指令
发起询价指令使用ReqForQuoteInsert函数。
参数CThostFtdcInputForQuoteField中,ForQuoteRef非必填,可由CTP交易核心自动生成。
交易所有询价价差的限制,期货公司可以在柜台上进行设置,一般如下
经纪公司代码 | 合约代码 | 交易所代码 | 最新价 | 价差 |
---|---|---|---|---|
1008 | SRC | CZCE | 0 | 8 |
1008 | SRC | CZCE | 50 | 10 |
1008 | SRC | CZCE | 100 | 20 |
1008 | SRC | CZCE | 200 | 30 |
1008 | SRC | CZCE | 300 | 50 |
1008 | SRC | CZCE | 500 | 75 |
询价价差的判断过程
1) 看最新价对应于上面的哪一档次,确定价差的最小值
2) 计算买价和卖价的价差,看是否大于设置的价差(等于也不行)
3) 如果2)通过,那么询价单报入交易所,否则会被CTP直接拒绝。
如果询价的时候,当前合约价差不在范围,则报“CTP:当前价差禁止询价”。
另外,交易所还有询价时间间隔限制,一般在交易所端有控制,但郑商所控制在CTP柜台端,柜台设置例如:
对于郑商所,如果询价过于频繁,则会报“CTP:当前时间禁止询价”。其他交易所报错类似。
- 2.接收询价响应
询价响应有以下几种:
函数名称 | 说明 |
---|---|
OnRspForQuoteInsert | 只在录入错误的情况下返回,如字段校验失败、被限制询价等;可以通过ErrorID和ErrorMsg查看错误信息 |
OnRtnForQuoteRsp(交易spi) | 暂时不用 |
OnRtnForQuoteRsp(行情spi) | 录入成功后会推送,但是事先要调用行情api里的SubscribeForQuoteRsp去订阅该消息。 |
OnErrRtnForQuoteInsert | 被交易所拒绝的询价,通过此接口返回;可以通过ErrorID和ErrorMsg查看错误信息 |
- 3.查询询价
查询询价使用ReqQryForQuote函数。
接收查询结果使用OnRspQryForQuote函数
- 4.请求报价指令
请求报价指令使用ReqQuoteInsert函数。
参数CThostFtdcInputQuoteField中,QuoteRef、AskOrderRef、BidOrderRef非必填,如果手工填则要求AskOrderRef小于BidOrderRef,否则会报“CTP:重复的报单”。
- 5.接收报价响应
报价响应有以下几种:
函数名称 | 说明 |
---|---|
OnRspQuoteInsert | 只在录入错误的情况下返回,如字段校验失败、无做市商权限等;可以通过ErrorID和ErrorMsg查看错误信息 |
OnRtnQuote | 当报价录入成功后,CTP给出该报价响应 |
OnRtnOrder | 报价录入成功后,如果是双边报价,CTP还会同时衍生出买卖两笔报价衍生单报入交易所,并返回相应的OnRtnOrder |
OnRtnTrade | 衍生单成交后,返回该成交回报 |
对于大商所,交易所在接受报价后,将不再维护报价状态的更新,所以客户端在接收CTP的报价回报时,其报价状态没有完整生命周期。 详见报价回调规则
- 6.撤销报价请求
撤销报价请求使用ReqQuoteAction函数。
参数CThostFtdcInputQuoteActionField中,使用QuoteRef+SessionID+FrontID组合来撤单。
- 7.撤销报价衍生单
撤销报价衍生单使用ReqOrderAction函数。
参数CThostFtdcInputOrderActionField中,使用FrontID+SessionID+OrderRef组合来撤单。
要注意的是,如果在报价的时候没有填写AskOrderRef和BidOrderRef,那么报价衍生单的响应OnRtnOrder里的FrontID和SessionID是0。
- 8.查询报价
查询报价使用ReqQryQuote函数。
接收查询结果使用OnRspQryQuote函数
2.四所区别
下面列出四所在询价和报价上的一些区别。注意:以下内容仅供参考,如果交易所的规则发生变化,文档并不会实时更新。
- 1.四所询价对比
中金所 | 大商所 | 郑商所 | 上期所 | |
---|---|---|---|---|
询价间隔如何设置 | 交易所限制 | 交易所限制 | CTP柜台 | 交易所限制 |
普通投资者是否可接收询价申报 | 可以 | 可以 | 可以 | 可以 |
- 2.四所报价对比
中金所 | 大商所 | 郑商所 | 上期所 | |
---|---|---|---|---|
是否支持平仓 | 支持 | 支持 | 支持 | 支持 |
是否必须关联询价 | 询价通知没有询价编号,不用填 | 询价通知有编号,但是非必填,如做市商要完成义务率则要填 | 询价通知有编号,但是非必填,如做市商要完成义务率则要填 | 询价通知没有询价编号,不用填 |
是否支持单边报价 | 不支持,提示“CTP:报单字段有误” | 支持,数量填0 | 不支持,提示“CTP:报单字段有误” | 不支持,提示“CTP:报单字段有误” |
是否支持市价单 | 不支持,交易所提示:“已撤单报单被拒绝CFFEX:价格跌破跌停板” | 不支持,交易所提示:已撤单报单被拒绝DCE:期权价格必须大于等于TICK! | 不支持,交易所提示:“已撤单报单被拒绝CZCE:出错: 限价单价格不能为0或负数” | 不支持 |
双边报价买卖数量可否不一致 | 可以不一致 | 可以不一致 | CTP:不可以,提示“CTP:报单字段有误” | CTP:不可以,提示“CTP:报单字段有误” |
双边报价卖价是否必须大于买价 | 一定是低价买,高价卖。否则会形成自成交 | 必须,否则交易所提示: 已撤单报单被拒绝DCE:双边报价指令卖价必须大于买价 | 必须,否则交易所提示:已撤单报单被拒绝CZCE: 出错:卖价(40800)必需大于买价(94800) | 一定是低价买,高价卖。否则会形成自成交 |
是否支持套保属性 | 支持 | 不支持,提示“CTP:该期权合约只支持投机类型报单” | 不支持,提示“CTP:该期权合约只支持投机类型报单” | 支持 |
是否会撤销前一次报价 | 不会撤销 | 不会撤销 | 会撤销 | 会撤销 |
是否支持撤单腿 | 可以 | 可以 | 不可以 | 不可以 |
双边报价开平可否不一致 | 可以 | 可以 | 可以 | 可以 |