什么是穿透式监管,需要投资者做什么?

一、 背景

详细背景可以参考证监会《关于进一步加强期货经营机构客户交易终端信息采集有关事项的公告》及期货市场监控中心《期货公司客户交易终端信息采集及接入认证技术规范》这两篇公告。一句话总结下就是:监控中心为了方便监管,需采集所有通过期货公司入场交易的客户的本地终端信息。
说明如下:

  • 这个采集是所有柜台(是指期货公司交易平台)发布的API都会采集,并不是说CTP采集,其他主席如金仕达不采集,次席系统如闪策,易盛等不采集。只要在监控中心报备过的平台厂商,都必须提供这个功能。对应的用了这些平台提供的API的终端,例如快期等,自然会采集客户使用时的电脑的相关信息。
  • 采集什么信息在上述第二篇公告里面都写的十分清楚,例如IP,MAC,操作系统版本,硬盘序列号,系统分区等,并不是如某些危言耸听,会扫描硬盘文件采集文件信息等。另外采集到的信息在API底层已经用监控中心下发的公钥加密,只有监控中心才有私钥解密,柜台厂商、期货公司、交易所都无法看到明文。

二、术语

  • 直连模式
    是指客户直接连到期货公司的柜台进行交易。投资者直接用CTP的API开发交易程序,连到期货公司的CTP系统交易,这就是典型的直连模式。也就是说,市场上大多数程序化交易投资者,直接使用柜台提供的API交易的,都是属于这种直连模式。另外像快期这种终端,也是直接连到CTP交易,所以也属于直连模式。
  • 中继模式
    是指客户通过第三方软件,向期货公司CTP系统报单交易,这时客户在第三方软件上下单,首先订单是到了第三方软件厂商的服务器,然后第三方软件厂商再调用CTP系统的API,将这笔订单发往CTP系统。这第三方软件厂商便称之为中继。
  • 多对多中继模式
    第三方软件厂商服务器为每个投资者都调用CTP API创建与CTP之间的单独的链接就是多对多的中继模式。例如文华财经的云条件单的功能,其实是将投资者的订单保存到了文华的云服务器上,投资者虽然退出文华终端,但文华服务器与CTP的链接仍然在,所以条件达到就可以把订单发送到CTP。
  • 多对一中继模式
    第三方软件厂商只创建一个与CTP之间的链接,用这个链接为所有投资者报单,这就是多对一模式。这种情况下需要第三方软件商以交易员用户登录CTP系统,而且只能为该交易员底下的投资者报单。这种模式多是用于期货公司内部软件和境外中介。

三、需要投资者做什么

3.1 使用第三方厂商客户端的投资者

例如直接使用快期,博易,无限易等软件进行交易的投资者,这些人是什么都不需要做的,因为第三方厂商已经向期货公司报备APPID,在软件内部逻辑已经写好。

3.2 使用CTP API自开发交易程序的直连投资者

其实很简单,一句话就是,在ReqUserLogin之前需要先调用ReqAuthenticate。下面详细讲一下步骤。

3.2.1 向期货公司申请AuthCode(认证码)

自己查看开户期货公司官网,或者联系对应的经纪经理,申请认证码。通常来说会让你填一张表,示范如下:

header 1header 2
客户号000001
软件名称**量化软件
APPIDabcdef_ghijkl_1.6.0
连接方式直连类型终端

注意:

  • 客户号就是你的交易账号
  • APPID是你自己命名的,命名监控中心给出了规范,如下图:

给出几个范例:
个人开发终端:client_abcdf_1.0.0
第三方终端:pobo_iee_1.4.0.0
中继厂商:poboAPP_isssle_2.0.0.0

申请通过后,期货公司就会发送Authcode给投资者。

3.2.2 修改程序登录逻辑

step1:在API连接后发起认证

void CUser::OnFrontConnected()
{
    cout << "OnFrontConnected." << endl;
    static const char *version = m_pUserApi->GetApiVersion();
    cout << "------当前版本号 :" << version << " ------" << endl;
    ReqAuthenticate();
}
int CUser::ReqAuthenticate()
{
    CThostFtdcReqAuthenticateField field;
    memset(&field, 0, sizeof(field));
    strcpy(field.BrokerID, "8000");
    strcpy(field.UserID, "001888");
    strcpy(field.AppID, "XY_Q7_V1.0.0");
    strcpy(field.AuthCode, "5A5P4V7AZ5LCFEAK");
    return m_pUserApi->ReqAuthenticate(&field, 5);
}

注意:
AppID就是客户申请时自己命名的,AuthCode是期货公司发给客户,两者是一一对应的。其实ReqAuthenticate函数早就有了,但以前是通过UserProductInfo和AuthCode这两个字段绑定验证,现在UserProductInfo废弃不用,改为AppID了,填写时注意不要出错。
step2:认证成功后发起登录

void CUser::OnRspAuthenticate(CThostFtdcRspAuthenticateField *pRspAuthenticateField, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)
{
    printf("OnRspAuthenticate\n");
    if (pRspInfo != NULL && pRspInfo->ErrorID == 0)
    {
        printf("认证成功,ErrorID=0x%04x, ErrMsg=%s\n\n", pRspInfo->ErrorID, pRspInfo->ErrorMsg);
        ReqUserLogin();
    }
    else
    {
        cout << "认证失败," << "ErrorID=" << pRspInfo->ErrorID << "  ,ErrMsg=" << pRspInfo->ErrorMsg << endl;
    }
}
int CUser::ReqUserLogin()
{
    printf("====ReqUserLogin====,用户登录中...\n\n");
    CThostFtdcReqUserLoginField reqUserLogin;
    memset(&reqUserLogin, 0, sizeof(reqUserLogin));
    strcpy(reqUserLogin.BrokerID, "8000");
    strcpy(reqUserLogin.UserID, "001888");
    strcpy(reqUserLogin.Password, "1");
    return m_pUserApi->ReqUserLogin(&reqUserLogin, ++RequestID);
}

然后就可以在OnRspUserLogin看是否登录成功了。

3.3 使用中继模式,自开发程序下单的投资者

这种主要是第三方软件厂商的工作。而且如果是程序化客户,投资者使用的是不同的第三方厂商提供API,用法也不一致,这里就不细说了。总之,第三方厂商提供的API会用到CTP API包中的DataCollect.h中的函数来采集客户端信息,再在服务器上注册提交给CTP柜台。

四、常见问题

1. API包中多了的DataCollect.h和LinuxDataCollect.so有什么用?

参见上文3.3,是转为中继模式准备的。同样API头文件中新增的两个函数RegisterUserSystemInfo和SubmitUserSystemInfo也是为中继准备的,一般程序化客户都用不到。

2. 是否必须要更新为穿透式版本?

答案是必须。不同于之前的CTP API版本都是向后兼容,后期CTP柜台升级为穿透式版本后,以前所有的API将都不能使用,只能使用最新的6.3.15版本API才能登陆上。根据目前消息,2019年6月14日(含)之后,所有的客户都必须使用6.3.15版本才可以登陆上,否则只能去期货公司页面下载最新软件手动下单了。

3. OnFrontConnected没有回调怎么办?

为了强制客户使用最新的穿透式API,如果客户使用API版本与CTP柜台不一致,将不会回调OnFrontConnected。目前一共有三类CTP API:旧生产版(6.3.11_20180109及以前);穿透式评测版(6.3.13_20181119和6.3.16_T1_20190508,这两个版本都可以用来评测);穿透式生产版(6.3.15_20190220)。这三个版本需要配合不同的CTP柜台才能登录上,也就是说一个前置IP地址,你能用某个登录上,就不可能用另外两个登录上。客户无法从API得知连接到的CTP后台前置是什么版本,所以只能用这三个版本的API自己测试得知。现在为止simnow的模拟最新地址(20190905更新):

BrokerID统一为:9999
标准CTP:
第一组:Trade Front:180.168.146.187:10100,Market Front:180.168.146.187:10110;电信 (看穿式前置,API同生产v6.3.15_20190220)
第二组:Trade Front:180.168.146.187:10101,Market Front:180.168.146.187:10111;电信 (看穿式前置,API同生产v6.3.15_20190220) 
第三组:Trade Front:218.202.237.33 :10102,Market Front:218.202.237.33 :10112;移动 (看穿式前置,API同生产v6.3.15_20190220) 

用户注册后,默认的APPID为simnow_client_test,认证码为0000000000000000(16个0),默认不开终端认证,如需测试终端认证可联系SIMNOW客服或注册“终端厂商测试”,参见《公告:SIMNOW对外前置网络调整》
同时simnow也提供了穿透式评测版后台供测试,参见《公告:SIMNOW平台将开启终端厂商穿透测试环境》,这个提供的地址

BrokerID:9999
Trade Front:180.168.146.187:13030
Market Front: 180.168.146.187:13040

需要用6.3.13_20181119连上。
至于穿透式生产版,请各位联系期货公司获取相应地址测试。

关注公众号,一起学习程序化交易!

  • 5
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
这个是2019.6.14上期CTP接口升级穿透监管后,再申请CTP权限需要测试,这个是自动开仓,撤单和平仓程序,配置setting.ini后运行,一键通过测试 在setting.ini设置账户信息,运行后自动交易螺纹钢,开1手平1手后完成穿透监管测试 再申请宏源期货正账户授权码 配置文件请修改合约为上海品种比如rb1911,随着时间推移,rb1911会失效,导致无法订阅和下单,请在setting.ini中将InsturmentID字段改为当前时间的主力合约,再运行下单测试。 关于SIMNOW老账户穿透监管接入授权码和APPID 下周SIMNOW升级到看穿后,老账户统一APPID为simnow_client_test,认证码为0000000000000000(16个0) CTP SIMNOW模拟账户成交规则更新 1、期货交易按照交易所公布的买一卖一价对价成交; 2、卖出时:如果委托价小于等于最新价,则成交,成交价为委托价、买一价、最新价三价取中,如果委托价大于买一价,不能成交,等待更优的行情才能成交。 3、买入时:如果委托价大于等于卖一价,则成交,成交价为委托价、卖一价、最新价三价取中,如果委托价小于卖一价,不能成交,等待更优的行情才能成交; SIMNOW 的CTP接口穿透监管升级后对外接入地址变更 由于目前SIMNOW前置流量压力激增。在系统设置上进行调整后,决定再进行接入地址修改: 第1组:Trade Front:218.202.237.33 :10102,Market Front:218.202.237.33 :10112;【移动】(看穿前置,使用监控中心生产秘钥) 第2组:Trade Front:180.168.146.187:10101,Market Front:180.168.146.187:10111;【电信】(看穿前置,使用监控中心生产秘钥) 第3组:Trade Front:180.168.146.187:10100,Market Front:180.168.146.187:10110;【电信】(非看穿前置) 规律是端口第三位0变成1。 该修改将于 (20190704)夜盘生效,如有不便敬请谅解

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值