CTP程序化交易入门系列之六:报单(一)
行情(mduserapi)这一块终于介绍的差不多了,下面着重介绍交易(traderapi)相关。再次强调两点:
一、交易和行情是完全独立的,互不干扰;
二、本系列用Python版本讲解,主要考虑到Python易学习业务,代码简略方便讲解。使用官方C++ API的同学也完全可以参考系列,因为此Python版本业务逻辑,函数命名、函数参数这些与官方版本是完全一致的。
一、 报单业务简介
报单是指将买卖期货合约指令通过API函数发送到CTP柜台,CTP柜台收到后会对该笔订单进行一系列的检查,检查通过后再发送到交易所。流程如下图:
图1 报单流程图
即调用函数ReqOrderInsert报单后,如果在CTP端验资验仓等通不过,则客户端会回调函数OnRspOrderInsert和
OnErrRtnOrderInsert;如果通过则先回调一次OnRtnOrder。
CTP再将报单报往交易所,如果交易所验资验仓没通过将返回错误给CTP,此时客户端会回调OnRtnOrder;如果交易所检查正确则此时会再次回调OnRtnOrder。
那两次OnRtnOrder有何区别,为何分别要有OnRspOrderInsert和OnErrRtnOrderInsert?错误提示在哪?如何看是否成交?这我们留到(二)讲,本章主要讲ReqOrderInsert函数。
二、 报单详解
ReqOrderInsert函数官方C++ API的原型为:
virtual int ReqOrderInsert(CThostFtdcInputOrderField *pInputOrder, int nRequestID) = 0;
Python版原型为:
def ReqOrderInsert(self, pInputOrder: 'CThostFtdcInputOrderField', nRequestID: 'int') -> "int":
可以看到函数有两个参数,CThostFtdcInputOrderField用于填入报单参数,nRequestID用于填该笔请求的编号。CThostFtdcInputOrderField参数乍一看有接近30个字段,但并不是每个字段都必须要去了解。下面详细讲解一般报单所必须填写的字段。
01 账号
BrokerID //经纪公司代码
InvestorID //投资者代码
这两个信息开户后得到,参见《系列一》。和InvestorID类似的UserID,InvestUnitID,AccountID对于绝大多数投资者来说是不需要管的,具体就不展开来说了。
02 交易所、合约号
ExchangeID //交易所代码
InstrumentID //合约代码
ExchangeID全部大写CFFEX、CZCE、DCE、INE、SHFE,目前simnow是必填的,生产还不必填,未来会必填。InstrumentID 注意填写规范,详见《系列四》。
03 价格类型、方向、价格、数量
rderPriceType //报单价格类型
Direction //买卖方向
LimitPrice //价格
VolumeTotalOriginal //数量
1. OrderPriceType 是枚举类型,具体多少种可见头文件。最常用的是THOST_FTDC_OPT_LimitPrice(限价)和THOST_FTDC_OPT_AnyPrice(市价)。并不是交易所支持这里所有的价格类型,具体支持哪些后面详细写一写。
2. Direction 是枚举类型,只有两种,买或卖。
3. LimitPrice 是报单价格,只有OrderPriceType是限价单的时候需要填写,填写的时候注意价格要是最小报价单位(查询合约可得)的整数倍,否则会被拒单。
4. VolumeTotalOriginal 是报单数量,必须大于0。
04 开平标志、投机套保标志
CombOffsetFlag //组合开平标志
CombHedgeFlag //组合投机套保标志
C++中这两个字段对应的类型是数组,但是只有第一个字符是有用的,用枚举值填充。枚举值是头文件中对应的TThostFtdcOffsetFlagType和TThostFtdcHedgeFlagType类型。
重点说明下,THOST_FTDC_OF_Open是开仓,THOST_FTDC_OF_Close是平仓/平昨,THOST_FTDC_OF_CloseToday是平今。除了上期所/能源中心外,不区分平今平昨,平仓统一使用THOST_FTDC_OF_Close。
05 触发条件
ContingentCondition //触发条件
这个字段是枚举类型。
1. 一般填写THOST_FTDC_CC_Immediately, 即报单立即有效。
2. THOST_FTDC_CC_Touch和THOST_FTDC_CC_TouchProfit是止损止盈单,需要交易所支持才能填。
3. THOST_FTDC_CC_ParkedOrder是预埋单。预埋单是指预埋在CTP服务端,需要非交易时间报入,开市后自动报往交易所。
4. 其他枚举类型则为条件单,报单后存入CTP服务端,CTP判断条件达到后自动报入交易所。
06 有效期、成交量、最小成交量
TimeCondition //有效期类型
VolumeCondition//成交量类型
MinVolume //最小成交量
TimeCondition是枚举类型,目前只有THOST_FTDC_TC_GFD和THOST_FTDC_TC_IOC这两种类型有用。GFD是指当日有效,报单会挂在交易所直到成交或收盘自动撤销。IOC是立即完成否则撤销,和VolumeCondition、MinVolume 字段配合用于设置FAK或FOK。具体如下表:
字段 | 普通 | FAK | FOK |
---|---|---|---|
TimeCondition | THOST_FTDC_TC_GFD | THOST_FTDC_TC_IOC | THOST_FTDC_TC_IOC |
VolumeCondition | THOST_FTDC_VC_AV | THOST_FTDC_VC_AV/THOST_FTDC_VC_MV | THOST_FTDC_VC_CV |
MinVolume | 不需要填 | 如果VolumeCondition为THOST_FTDC_VC_AV,则不需要填。如果为THOST_FTDC_VC_MV,则设为要求的最小成交的手数 | 不需要填 |
07 其他必填字段
ForceCloseReason //强平原因
枚举值,填写THOST_FTDC_FCC_NotForceClose
三、 报单代码示例(C++版)
01 限价GFD单
ThostFtdcInputOrderField orderfield ={0};
strcpy(orderfield.BrokerID, "9999");
strcpy(orderfield.InvestorID, "000001");
strcpy(orderfield.ExchangeID, “SHFE”);
strcpy(orderfield.InstrumentID, "au1912");
orderfield.OrderPriceType = THOST_FTDC_OPT_LimitPrice;
orderfield.Direction = THOST_FTDC_D_Sell;
orderfield.LimitPrice = 400.0;
orderfield.VolumeTotalOriginal = 10;
orderfield.ContingentCondition = THOST_FTDC_CC_Immediately;
orderfield.CombOffsetFlag[0] = THOST_FTDC_OF_Open;
orderfield.CombHedgeFlag[0] = THOST_FTDC_HF_Speculation;
orderfield.TimeCondition = THOST_FTDC_TC_GFD ;
orderfield.VolumeCondition = THOST_FTDC_VC_AV;
orderfield.ForceCloseReason = THOST_FTDC_FCC_NotForceClose;
int ret = g_pTradeapi->ReqOrderInsert(&orderfield, 0);
02 限价FOK单
CThostFtdcInputOrderField orderfield ={0};
strcpy(orderfield.BrokerID, "9999");
strcpy(orderfield.InvestorID, "000001");
strcpy(orderfield.ExchangeID, “SHFE”);
strcpy(orderfield.InstrumentID, "au1912");
orderfield.OrderPriceType = THOST_FTDC_OPT_LimitPrice;
orderfield.Direction = THOST_FTDC_D_Sell;
orderfield.LimitPrice = 400.0;
orderfield.VolumeTotalOriginal = 10;
orderfield.ContingentCondition = THOST_FTDC_CC_Immediately;
orderfield.CombOffsetFlag[0] = THOST_FTDC_OF_Open;
orderfield.CombHedgeFlag[0] = THOST_FTDC_HF_Speculation;
orderfield.TimeCondition = THOST_FTDC_TC_IOC;
orderfield.VolumeCondition = THOST_FTDC_VC_CV;
orderfield.ForceCloseReason = THOST_FTDC_FCC_NotForceClose;
int ret = g_pTradeapi->ReqOrderInsert(&orderfield, 0);
往期推荐
● CTP程序化交易入门系列之一:准备
● CTP程序化交易入门系列之二:API基本架构及初始化
● CTP程序化交易入门系列之三:获取实时行情及K线合成
● CTP程序化交易入门系列之四:行情订阅常见问题解答
● CTP程序化交易入门系列之五:现手、增仓、开平、对手盘计算
● CTP 4097错误根源
● Level-1、Level-2、快照数据、Tick数据的区别你都了解吗?
● 什么是穿透式监管,需要投资者做什么?
● JAVA封装CTP API乱码解决方案?
CTP程序化交易入门系列之六:报单(一)相关推荐
- CTP程序化交易入门系列之四:行情订阅常见问题解答
前言 这一章总结了大家订阅行情最常问的一些问题的相关解答,希望能有帮助.如有不对的地方,欢迎指正.后期会在这里更新迭代,欢迎到这底下提问! 更新时间:20201112 1 获取行情的地址在哪里可以查到 ...
- CTP程序化交易入门系列之二:API基本架构及初始化
上节讲了CTP程序化交易的入门工作:下载API,准备账号密码地址等.这节我们来讲API基本架构及初始化. 一. CTP API基本架构 这里为了便于大家理解API的相关函数,我简略地讲一下API的基 ...
- CTP程序化交易入门系列之一:准备
前言: 笔者自毕业后一直从事低延时交易系统开发行业,这些年经历过神奇bug,给客户培训,回答客户千奇百怪的问题.在这个过程中,自身能力得到了很大的提升,但有时在面对一些小白问题时,总是感叹为何没有一系 ...
- CTP程序化交易入门系列之三:获取实时行情及k线合成
前面两篇有了基础知识的准备,这一篇讲通过CTP API获取实时行情,录入csv,实时合成k线.github上开源了录入csv及合成k线代码,后台回复pyctp可获取.先上两张效果图: 图1 csv数据 ...
- 【量化】量化交易入门系列6:量化交易学习书籍推荐(二)
作者:悠悠做神仙 来源: 恒生LIGHT云社区 上一篇 量化交易入门系列5:量化交易学习书籍推荐(一) 我们介绍一些量化交易一些操作和理论性书籍,可能对于刚入门的大家而言,可能有些枯燥.所以这篇文章, ...
- 【量化】量化交易入门系列5:量化交易学习书籍推荐(一)
作者:悠悠做神仙 来源: 恒生LIGHT云社区 量化交易入门系列,给大家介绍了关于量化交易的数据源获取.编程语言推荐.经典的交易策略,那么本篇将介绍一些比较经典的量化交易书籍. 书籍是人类智慧的结晶, ...
- 【量化】量化交易入门系列2:经典的量化交易策略(上)
作者:悠悠做神仙 来源: 恒生LIGHT云社区 上一篇文章 量化交易入门系列1:编程语言与数据源 ,介绍了关于量化交易的基本概念,以及要做量化交易的编程语言选择,和量化交易的一些数据源获取工具.那么, ...
- 小白期货CTP程序化交易开发入门(一)--CTP开发基础
接触CTP也才半年多,一边学习一边摸索,看到各大CTP的QQ群里,也都是在问一些很菜的问题,就简单总结和介绍下,今天主要是基础知识,即CTP程序的基础和开源的Demo版本: CTP交易接口是由:::: ...
- MT5 C++ CTP程序化交易国内期货对接 MT5 (Meta Trader5)客户端技术方案(1)
用C++实现程序化交易系统,采用上期技术CTP接口(期货).(股票)XPT接口:就系统架构而言,还算相比较单纯,但是要全面考虑各方面细节做到精致稳定,还是有一些工程量了:Meta Trader 5客户 ...
最新文章
- 列注释_简单5步了解相关矩阵的注释热图
- 浅析企业网站页面设计如何才能更吸引用户注意!
- web前端开发入门基础教程系列
- 当心啊!仅仅50行Python,就可以在手机端看小姐姐的电脑桌面!
- loadrunner 分用户日志
- Quartz2D知识点聚合案例
- linux ssh注册码,linux ssh -l 命令运用
- java selenium_selenium 常见面试题以及答案(Java版)
- 关于css垂直水平居中的几种方式
- 为什么联通走归属地ip_为什么企业争先恐后地进行品牌虚拟IP打造?
- 计算机内部信号表现形式,2021山西特岗教师招聘考试:信息技术学科基础考点归纳六...
- 解决Win7Win8 64位下Source Insight提示未完整安装的问题[转]
- 因为重置网络“netsh winsock reset”导致开不了机
- PySpark fold foldByKey用法
- uniapp简单封装的激励广告和插屏广告
- python爬虫post请求翻页_python爬虫如何POST request payload形式的请求
- 02-2017.07-计算机设计大赛《盲人的眼睛》
- bat 切换网络适配器_Windows批处理自动切换IP地址设置无线网络和以太网的IP地址...
- NBU:1651 Red packet(二分)【好】
- Conflux 吐槽君:Hashgraph 是一个真正的企业级去中心化平台吗?