行情(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程序化交易入门系列之六:报单(一)相关推荐

  1. CTP程序化交易入门系列之四:行情订阅常见问题解答

    前言 这一章总结了大家订阅行情最常问的一些问题的相关解答,希望能有帮助.如有不对的地方,欢迎指正.后期会在这里更新迭代,欢迎到这底下提问! 更新时间:20201112 1 获取行情的地址在哪里可以查到 ...

  2. CTP程序化交易入门系列之二:API基本架构及初始化

    上节讲了CTP程序化交易的入门工作:下载API,准备账号密码地址等.这节我们来讲API基本架构及初始化. 一. CTP API基本架构  这里为了便于大家理解API的相关函数,我简略地讲一下API的基 ...

  3. CTP程序化交易入门系列之一:准备

    前言: 笔者自毕业后一直从事低延时交易系统开发行业,这些年经历过神奇bug,给客户培训,回答客户千奇百怪的问题.在这个过程中,自身能力得到了很大的提升,但有时在面对一些小白问题时,总是感叹为何没有一系 ...

  4. CTP程序化交易入门系列之三:获取实时行情及k线合成

    前面两篇有了基础知识的准备,这一篇讲通过CTP API获取实时行情,录入csv,实时合成k线.github上开源了录入csv及合成k线代码,后台回复pyctp可获取.先上两张效果图: 图1 csv数据 ...

  5. 【量化】量化交易入门系列6:量化交易学习书籍推荐(二)

    作者:悠悠做神仙 来源: 恒生LIGHT云社区 上一篇 量化交易入门系列5:量化交易学习书籍推荐(一) 我们介绍一些量化交易一些操作和理论性书籍,可能对于刚入门的大家而言,可能有些枯燥.所以这篇文章, ...

  6. 【量化】量化交易入门系列5:量化交易学习书籍推荐(一)

    作者:悠悠做神仙 来源: 恒生LIGHT云社区 量化交易入门系列,给大家介绍了关于量化交易的数据源获取.编程语言推荐.经典的交易策略,那么本篇将介绍一些比较经典的量化交易书籍. 书籍是人类智慧的结晶, ...

  7. 【量化】量化交易入门系列2:经典的量化交易策略(上)

    作者:悠悠做神仙 来源: 恒生LIGHT云社区 上一篇文章 量化交易入门系列1:编程语言与数据源 ,介绍了关于量化交易的基本概念,以及要做量化交易的编程语言选择,和量化交易的一些数据源获取工具.那么, ...

  8. 小白期货CTP程序化交易开发入门(一)--CTP开发基础

    接触CTP也才半年多,一边学习一边摸索,看到各大CTP的QQ群里,也都是在问一些很菜的问题,就简单总结和介绍下,今天主要是基础知识,即CTP程序的基础和开源的Demo版本: CTP交易接口是由:::: ...

  9. MT5 C++ CTP程序化交易国内期货对接 MT5 (Meta Trader5)客户端技术方案(1)

    用C++实现程序化交易系统,采用上期技术CTP接口(期货).(股票)XPT接口:就系统架构而言,还算相比较单纯,但是要全面考虑各方面细节做到精致稳定,还是有一些工程量了:Meta Trader 5客户 ...

最新文章

  1. 列注释_简单5步了解相关矩阵的注释热图
  2. 浅析企业网站页面设计如何才能更吸引用户注意!
  3. web前端开发入门基础教程系列
  4. 当心啊!仅仅50行Python,就可以在手机端看小姐姐的电脑桌面!
  5. loadrunner 分用户日志
  6. Quartz2D知识点聚合案例
  7. linux ssh注册码,linux ssh -l 命令运用
  8. java selenium_selenium 常见面试题以及答案(Java版)
  9. 关于css垂直水平居中的几种方式
  10. 为什么联通走归属地ip_为什么企业争先恐后地进行品牌虚拟IP打造?
  11. 计算机内部信号表现形式,2021山西特岗教师招聘考试:信息技术学科基础考点归纳六...
  12. 解决Win7Win8 64位下Source Insight提示未完整安装的问题[转]
  13. 因为重置网络“netsh winsock reset”导致开不了机
  14. PySpark fold foldByKey用法
  15. uniapp简单封装的激励广告和插屏广告
  16. python爬虫post请求翻页_python爬虫如何POST request payload形式的请求
  17. 02-2017.07-计算机设计大赛《盲人的眼睛》
  18. bat 切换网络适配器_Windows批处理自动切换IP地址设置无线网络和以太网的IP地址...
  19. NBU:1651 Red packet(二分)【好】
  20. Conflux 吐槽君:Hashgraph 是一个真正的企业级去中心化平台吗?

热门文章

  1. Linux驱动开发:设备树节点与属性
  2. 软件测试缺陷率衡量质量还是效率,软件测试与质量管理的度量的那些事儿
  3. 后端神器Dataway入门
  4. 【2020年领域新星】 杨幻睿 杜克大学
  5. python利用js2py库来解决某道翻译的js逆向
  6. cocos2d-x 响应android TV 遥控器 手柄的添加
  7. Python--海龟先生送给大家的海草舞
  8. 绿色数据中心案例介绍:阿里巴巴、华为、电信、移动……
  9. 疫情期间Zoom云视频助力企业远程办公
  10. 【mac】屏幕截图快捷键