综合交易平台技术Q&A

Discussion in 'CTP' started by LumenXH, Jun 19, 2009.

  1. 综合交易平台技术的问题

    关于报单的一些请求参数问题:
    1. 经纪公司代码BrokerID 这个是固定的吗?有没有办法获取所有经纪公司的代码?
    2. 投资者代码InvestorID与用户代码UserID的区别?
    3. 报单引用OrderRef 有什么用?跟用户登录API返回的最大报单引用MaxOrderRef有什 么关系?
    4. 组合投机套保标志CombHedgeFlag中的投机与套保有什么区别?
    5. 最小成交量MinVolume有什么用?
    6. 触发条件ContingentCondition,若为止损止赚时,触发后,是如何平仓止损止赚的?
    7.强平原因ForceCloseReason一直设为非强平THOST_FTDC_FCC_NotForceClose
    8. GTD日期GTDDate 为空吗?
    9. 自动挂起标志IsAutoSuspend有什么用?
    10. 业务单元BusinessUnit有什么用?
    11. 请求编号RequestID与请求API的int nRequestID有什么区别?
    12.用户强平标志UserForceClose,如果为true时,是怎么样的?
    13.关于止损止赚能不能举两个例子?如 合约cu0908 的开仓与平仓的操作与业务流程???
     
  2. 关于报单的一些请求参数问题:
    1. 经纪公司代码BrokerID 这个是固定的吗?有没有办法获取所有经纪公司的代码?
    答:CTP会为每家接入CTP的期货公司分配一个唯一的BrokerID,该BrokerID可以向期货公司获取,上期技术也会将BrokerID 列表发布给签约的终端厂商。
    2. 投资者代码InvestorID与用户代码UserID的区别?
    答:普通投资者登录CTP时UserID与InvestorID相同,期货公司交易员登录CTP时,UserID为该交易员的用户名,代理客户交易时InvestorID为对应的投资者代码。
    3. 报单引用OrderRef 有什么用?跟用户登录API返回的最大报单引用MaxOrderRef有什 么关系?
    答:交易终端使用frontID+sessionID+OrderRef唯一标示一笔报单,也可以使用exchangeID+ordersysid唯一标示一笔报单。OrderRef在frontID+sessionID相同的情况下必须单调递增,MaxOrderRef为当前frontID+sessionID下的最大值,请详细阅读《综合交易平台交易API特别说明.pdf》
    4. 组合投机套保标志CombHedgeFlag中的投机与套保有什么区别?
    答:获得交易所套期保值头寸审批的投资者在头寸限制范围内的交易可以在该字段填“套保”,其他皆为“投机”。
    5. 最小成交量MinVolume有什么用?
    答:未使用
    6. 触发条件ContingentCondition,若为止损止赚时,触发后,是如何平仓止损止赚的?
    答:目前仅大商所支持,且该类报单仅是条件单的一种形式,并非平仓止损止赚,可以在google中搜索"大连商品交易所新交易指令使用说明"获取更详细的信息。
    7.强平原因ForceCloseReason一直设为非强平THOST_FTDC_FCC_NotForceClose
    答:在CTP中只有期货公司风控人员通过CTP风控终端报的强平单该字段才不等于THOST_FTDC_FCC_NotForceClose。
    8. GTD日期GTDDate 为空吗?
    答:未使用
    9. 自动挂起标志IsAutoSuspend有什么用?
    答:未使用。NGES交易系统允许交易所管理人员发出报单挂起指令。
    10. 业务单元BusinessUnit有什么用?
    答:记录报单报入交易所时使用的远程席位,CTP后台自动处理。
    11. 请求编号RequestID与请求API的int nRequestID有什么区别?
    答:结构中的RequestID未使用,请求API的int nRequestID由客户端负责维护,建议每个请求的RequestID不会重复。在接收CTP的响应时,可以得到当时发出请求时填写的RequestID,从而可以将响应与请求对应起来。
    12.用户强平标志UserForceClose,如果为true时,是怎么样的?
    答:参考7
    13.关于止损止赚能不能举两个例子?如 合约cu0908 的开仓与平仓的操作与业务流程???
    答:参考6
     
  3. 通过CTP API发送行情的频率是怎样的?
    希望能做到tick by tick带交易所timestamp的事件驱动发送。因为系统短线交易,对行情要求比较高,这样才能保证获得的是实际的交易状况。
     
  4. CTP API发送行情的频率是由交易所的行情发送频率决定的,目前国内三家商品期货交易所的行情发送频率为500毫秒。
     
  5. 谢谢回复,不过这么慢的行情发送在期货交易活跃时带来的谬误实在太大了。
     
  6. onnect to asp-sim2-md1.financial-trading-platform.com:26213 Error ???
     
  7. CTP的商品模拟环境在每个交易日的17:00~19:00之前会进行结算,这段时间CTP的交易后台将关闭,连接交易将出现以上问题!
     
  8. onfrontdisconnected方法 在平台API说明中说,通信断开后该方法会被调用,而API会自动重连。该方法的触发是在自动重连之前还是之后?

    要是在onfrontconnected方法中加入login,那么API自动重连成功后也会自动login好吧?

    onheartbeatwarning方法,长时间未收到报文调用。这个和onfrontdisconnected方法 在应用上如何区分比较好。要实现数据断线重连,有必要在onfrontdisconnected 和onheartbeatwarning 中都加入处置代码吗?

    因为测试中发现有时实时行情数据突然停住了,可能后续的接收不到。没有看到自动重连让数据重新传输,有需要处理一下这个问题
     
  9. Q: onfrontdisconnected方法 在平台API说明中说,通信断开后该方法会被调用,而API会自动重连。该方法的触发是在自动重连之前还是之后?
    A: OnFrontDisconnected 是网络断线这个事件的处理函数,在网络断线之后通知api用户处理自己的事情,和自动重连无关。看一个极端的场景,如果断线后一直没能重连,OnFrontDisconnected还是要触发的呀。

    Q:要是在onfrontconnected方法中加入login,那么API自动重连成功后也会自动login好吧?
    A:是的

    Q:onheartbeatwarning方法,长时间未收到报文调用。这个和onfrontdisconnected方法 在应用上如何区分比较好。要实现数据断线重连,有必要在onfrontdisconnected 和onheartbeatwarning 中都加入处置代码吗?
    A:关于OnHeartbeatwarning。如果通讯线路上始终有业务数据往来,心跳消息就不会被触发。只有长时间没有业务数据,约20秒后,就需要请心跳消息来维持通讯量,避免通讯线路被os切断。一般情况下心跳消息没有业务数据,不需要加入处置代码,也和断线重连无关。
    关于OnFrontDisconnected, 断线后,用户可以在这里加入一些处置代码。具体作什么还要看你的需求。

    Q:因为测试中发现有时实时行情数据突然停住了,可能后续的接收不到。没有看到自动重连让数据重新传输,有需要处理一下这个问题。
    A:Api自动重连的是通讯连接,并不能恢复你断线之前的状态,比如恢复断线前订阅的合约。所以断线重连后,还是要重新订阅行情。否则无法收到新的行情。
     
  10. 谢谢wang.yc兄的详细解答。

    看来问题确实出在断线重连后,没有重新订阅行情这里。添了有关代码后,重连后数据可以继续更新了。

    只是我用停用本地网络连接的方式来模拟网络断线,在断线期间仍然没发现onheartbeatwarning方法和onfrontdisconnected方法被触发。不知是我写的不对还是什么原因。

    而一恢复本地网络连接,确实马上onfrontconnected方法触发。这个正常,在里面重新订阅行情,达到目的了。
     
  11. 只是我用停用本地网络连接的方式来模拟网络断线,在断线期间仍然没发现onheartbeatwarning方法和onfrontdisconnected方法被触发。
    A: 停用了本地网络, 当然就收不到OnHeartbeatwarning。不过还是应该受到OnFrontDisconnected的。如果拔网线的话,时间大约1分钟。详细的日志如下:

    --->>> CTraderSpi::OnRtnTrade
    Send Heartbeat
    CFtdcUserApiImplBase::OnSessionDisconnected[00C8962C][-775487487][ 4097]
    Session -775487487 Disconnected, reason = [00001001]
    --->>> CTraderSpi::OnFrontDisconnected
    --->>> Reason = 4097
    Connect to asp-sim2-front1.financial-trading-platform.com:26205 Error
    Connect to asp-sim2-front1.financial-trading-platform.com:26205 Error
    Connect to asp-sim2-front1.financial-trading-platform.com:26205 Error
    Connect to asp-sim2-front1.financial-trading-platform.com:26205 Error
    Connect to asp-sim2-front1.financial-trading-platform.com:26205 Error
    Connect to asp-sim2-front1.financial-trading-platform.com:26205
    Session -768212990 Connected
    --->>> CTraderSpi::OnFrontConnected
     
  12. 发布给签约的终端厂商的BrokerID 列表及对应的前置机地址是放在一个文件里还是分别放置?文件格式是怎么样的?能不能举个例子?

    是一个brokers.xml文件?我在快期交易终端里看到这个文件,它那个是作为单一broker的,如果是多个broker(或所有的broker),那文件格式定义是怎么样的?

    谢谢
     
    Last edited by a moderator: Jul 24, 2009
  13. 终端是分经纪公司单独打包的,参数具体放在什么地方由终端厂商自己决定。不会提供包含多个期货公司参数配置的版本。
     
  14. 有朋友在测试CTP的行情时候发现:开盘的时候,仅仅是开盘的时候,包括节开盘,CTP要晚N分钟才开始接收数据,把前面N分钟漏了的数据与没有延时的数据一起涌进来,然后就与市场同步了。
    一般晚1.5~3分钟不等。

    CTP的模拟行情目前是这样的情况吗?

    另外也询问一下这个CTP的模拟行情具体的发送时间段,或者问什么时候会出现
    onnect to asp-sim2-md1.financial-trading-platform.com:26213 Error

    因为除了每个交易日的17:00~19:00会出现上面这个之外,还有在晚上22点23点左右都出现过上面的信息,有时候过一段时间又可以传输行情了。
     
  15. 有朋友在测试CTP的行情时候发现:开盘的时候,仅仅是开盘的时候,包括节开盘,CTP要晚N分钟才开始接收数据,把前面N分钟漏了的数据与没有延时的数据一起涌进来,然后就与市场同步了。
    一般晚1.5~3分钟不等。
    CTP的模拟行情目前是这样的情况吗?

    A:通常不会出现这样的情况。尤其在生产环境上。
    建议你先用简单的测试程序测试一下。如果还有这个问题,可以和我们公司联系,检查一下网络环境,程序代码等问题。

    另外也询问一下这个CTP的模拟行情具体的发送时间段,或者问什么时候会出现
    onnect to asp-sim2-md1.financial-trading-platform.com:26213 Error
    因为除了每个交易日的17:00~19:00会出现上面这个之外,还有在晚上22点23点左右都出现过上面的信息,有时候过一段时间又可以传输行情了。

    A:在模拟环境上,17:00-19:00是结算阶段,不能连接交易系统。所以你会收到上述error消息。
     
  16. 想咨询一下在模拟账户下,如何测试大连与郑州市场的组合套利单的问题。
    比如组合合约列表的查询、保证金率、以及开平仓指令等等。

    我看到在快期的标准版中,大连和郑州的组合品种是作为单独的一个市场存在的,
    但在使用CTP的模拟账户中查询交易所的时候,只能查询到4大交易所,而没有这些组合品种。

    请问是否是模拟交易服务器设置的问题(没有将组合品种映射到上海市场)呢?
    如果是的话,是否可以考虑增加大连和郑州的组合品种到模拟交易中呢?

    此外,对于委托单类型的定义值,在CTP中组合单是【THOST_FTDC_ORDT_Combination=3】,而郑州市场的组合单定义值是【4】(参考易盛),
    我是否可以认为,通过CTP提交的组合单,会在CTP平台上按照各交易所的定义进行接口变换之后才发送到各交易所的呢?

    谢谢
     
  17. 想咨询一下在模拟账户下,如何测试大连与郑州市场的组合套利单的问题。
    比如组合合约列表的查询、保证金率、以及开平仓指令等等。
    ===> 大多数api方法不会区分合约代码参数是否是组合合约.包括保证金率,报单指令(包括开/平仓)
    查询合约(ReqQryInstrument)可以收到简单合约,也包括组合合约.
    组合合约相关的特有方法是: 查询组合合约分腿(ReqQryCombinationLeg),查询投资者组合持仓明细(ReqQryInvestorPositionCombineDetail)

    我看到在快期的标准版中,大连和郑州的组合品种是作为单独的一个市场存在的,
    但在使用CTP的模拟账户中查询交易所的时候,只能查询到4大交易所,而没有这些组合品种。
    ===> 查询合约,每个合约明细中会有字段:交易所代码(ExchangeID),产品类型(ProductClass),
    其中产品类型中区分了合约是组合合约(THOST_FTDC_PC_Combination)还是标准合约(THOST_FTDC_PC_Futures)
    以此作为分类依据,可以把不同交易所的组合合约细分出来。而不是通过查询交易所来细分合约类型。

    请问是否是模拟交易服务器设置的问题(没有将组合品种映射到上海市场)呢?
    如果是的话,是否可以考虑增加大连和郑州的组合品种到模拟交易中呢?
    ===> 在模拟环境上,所有的合约都设置在上期所下。
    原因是:模拟环境里只有1套上期所的交易系统。交易系统里没有组合品种的交易规则,所以目前不能大连和郑州的组合品种加进来。

    此外,对于委托单类型的定义值,在CTP中组合单是【THOST_FTDC_ORDT_Combination=3】,而郑州市场的组合单定义值是【4】(参考易盛),
    我是否可以认为,通过CTP提交的组合单,会在CTP平台上按照各交易所的定义进行接口变换之后才发送到各交易所的呢?
    ===> 是的。综合交易平台的api提供统一的界面,用户可以忽略不同交易所的差别。
     
  18. 学习了
     
  19. 如何查询交易所状态
     
  20. 用Restart方式订阅私有流
    收听OnRtnInstrumentStatus