By - admin

基于CTP的国内期货程序化交易之报单流程讲解

海外期货市开展比拟,国际期货市的开展短工夫有趣,更多陨石坑。第本人是更多的工夫,像本国期货美国原油相等地,延续市23小时,国际期货与上海黄金,一天到晚四小时市,使著名从9:00到10:15、10:30至11:30、从13点30分到15点,从0230到次日。更多事务工夫,足够的里寂静更多的工夫。,如此的,补充分得的财产了很多事情逻辑。。在一边,这是很多市规则,前一期的期货市场占有率被分为现在地位。,如此的,咱们就一定依据市工夫停止独立的断定。,是前本人市日的列表或现在市D的列表,不然,一大片决定因素不得体的。,该清单将直截了当地被市系统回绝。。切开工艺流畅中应用的首要名称牌是:、及,静态库为:。上面是某一编码示例:

       1. 发觉CTP api举例:

  1. CThostFtdcTraderApi *pTradeApi = CThostFtdcTraderApi::CreateFtdcTraderApi(dirName);  

       经过转乘CreateFtdcTraderApi()发觉api举例——pTradeApi,和转乘举例来启动各式各样的邀请。,像,衔接上菜用具、用户登录、报单、撤单、查询仓库栈、讯问钱等。

       2. 发觉CTP API回调举例:

  1. CFtdcTradeSpi *pTradeSpi = new CFtdcTradeSpi(pTradeApi, this);  

       这必要为本人编辑符合的的实施类。,咱们必要发扬先前TE企图的CTHOSTFTDCTCRADSPI类。重写类正中鹄的方式,上菜用具处置的各式各样的创纪录的。

       3. 相干过去的两个示例,启动衔接上菜用具邀请:

  1. pTradeApi->RegisterSpi(pTradeSpi);  
  2. pTradeSpi->connect(serverAddr, brokerId, username,密码电文)

       衔接上菜用具和举例设定初值编码:

  1. void CFtdcTradeSpi::connect(string serverAddr, string brokerId, string username,字母串密码电文
  2. {  
  3.     serverAddr_ = serverAddr;  
  4.     brokerId_ = brokerId;  
  5.     username_ = username;  
  6.     password_ = password;  
  7.   
  8.     pTradeApi_->SubscribePublicTopic(THOST_TERT_QUICK);  
  9.     pTradeApi_->SubscribePrivateTopic(THOST_TERT_QUICK);  
  10.     pTradeApi_->RegisterFront((char *)());  
  11.     pTradeApi_->Init();  
  12. }  

       在发送衔接邀请较晚地,OnFruttCon()解答邀请,和在该有或起作用内可以转乘登录有或起作用pTradeApi_->ReqUserLogin()完整的用户登录用双手触摸、举起或握住,对应的OnRspUserLogin()解答邀请。。鉴于国际期货初次在市日登录,围攻者必要C,依据,在OnrSPueLogIn()有或起作用中,可以更转乘pTradeApi_->ReqSettlementInfoConfirm()做围攻者结算出路验明,验明出路将在OnRspSettlementInfoConfirm()内回转。完整的围攻者结算出路的验明,完整的了全部上菜用具衔接和用户登录工艺流畅。,通常可以处置独唱事务。。

  1. void CFtdcTradeSpi::OnFrontConnected()  
  2. {  
  3.     LOG_INFO << username_ << 回调:已与上菜用具建造衔接, 开端登录”;  
  4. }  
  5.   
  6. void CFtdcTradeSpi::OnRspUserLogin(CThostFtdcRspUserLoginField *pRspUserLogin, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)  
  7. {  
  8.     if (pRspUserLogin == NULL || pRspInfo == NULL)  
  9.     {  
  10.         LOG_INFO << username_ << 登录回调非常,操纵是空的;  
  11.         return;  
  12.     }  
  13.   
  14.     if (pRspInfo->ErrorID == Err_Succeed)  
  15.     {  
  16.         LOG_INFO << username_ <<  登录成,开端验明围攻者结算的出路,现在市日: << pTradeApi_->GetTradingDay();  
  17.     }  
  18. }  
  19.   
  20. void CFtdcTradeSpi::OnRspSettlementInfoConfirm(CThostFtdcSettlementInfoConfirmField *pSettlementInfoConfirm, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)  
  21. {  
  22.     if (pSettlementInfoConfirm == NULL || pRspInfo == NULL)  
  23.     {  
  24.         LOG_INFO << username_ << 围攻者结算出路验明回调非常,操纵是空的;  
  25.         return;  
  26.     }  
  27.   
  28.     string errorMsg;  
  29.     getErrcodeDesc(pRspInfo->ErrorMsg, errorMsg);  
  30.     LOG_INFO << username_ << ” “  
  31.              << 支撑公司编码: << pSettlementInfoConfirm->BrokerID << ” “  
  32.              << 围攻者编码: << pSettlementInfoConfirm->InvestorID << ” “  
  33.              << “验明日期: “ << pSettlementInfoConfirm->ConfirmDate << ” “  
  34.              << “验明工夫: “ << pSettlementInfoConfirm->ConfirmTime << ” “  
  35.              << 回调:误解报文, 误解码: “ << pRspInfo->ErrorID << ” “ << errorMsg;  
  36. }  

       4. 期货报单:

       (1)ReqOrderInsert():报单邀请

  1. CThostFtdcInputOrderField reqField;  
  2. memset(&reqField, 0, sizeof(CThostFtdcInputOrderField));  
  3. ……  
  4. ……  
  5. pTradeApi_->ReqOrderInsert(&reqField, orderInsertReqId_);  
       与上一篇文字的解说根本分歧,迥然不同。 必要得体的填写事情/任职培训、翻开/翻开仓库栈、市价/价钱限度局限、付托总额、付托价钱等,ReqOrderInsert()宣布可在完整的后转乘。。

       (2)OnRspOrderInsert():报单邀请应对

  1. void CFtdcTradeSpi::OnRspOrderInsert(CThostFtdcInputOrderField *pInputOrder, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)  
  2. {  
  3. }  

       使知晓成后,抽象地,有或起作用将回调。。再看着日记,使容易逻辑的可能性技术,削弱效能,竟,有或起作用挑剔回调有或起作用。,自然,这也可能性与所应用的SDK版本顾虑。。

       (3)OnRtnOrder():付托更动告诉

  1. void CFtdcTradeSpi::OnRtnOrder(CThostFtdcOrderField *pOrder)  
  2. {  
  3. }  

       当付托的制约修改时,将回调。一般而言,付托的首要制约首要是付托。:未知、排队中缺乏市、分得的财产市仍在排队中。、完整的市等。一次报单,假设总额更多,通常挑剔所相当市都是可任意处理的完整的的。,但有总计出发生产的量的市,因而有或起作用会不时回调。跟随不时的回调,每回报复付托、大量、创纪录的,如下剩量,将不时找头。。

       (4)OnRtnMatchInfo():市交流更动告诉书

  1. void CFtdcTradeSpi::OnRtnTrade(CThostFtdcTradeField *pTrade)  
  2. {  
  3. }  
       即将到来的效能更要紧,回转的每个音讯都是事务交流。,它象征大量、成交价、市成本等,这些是围攻者注意力的创纪录的。。总体来说,全部报单工艺流畅与序解说的海外期货报单流畅根本分歧。但有几分简单化,不必要编辑音讯流逻辑,因CTP缺乏隶属的小组织频率限度局限,但有查询频率限度局限,这不失毫厘是API的谙记。,浅色的是缺乏频率限度局限的查询,使知晓的频率限度局限。

       5.  期货报账地位查询:

       查询仓库栈首要转乘pTradeApi_->ReqQryInvestorPosition(),依据证明填写足够的决定因素。查询仓库栈解答有或起作用为:

  1. void CFtdcTradeSpi::OnRspQryInvestorPosition(CThostFtdcInvestorPositionField *pInvestorPosition, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)  
  2. {  
  3. }  

       即将到来的效能必要由切开人员本人来重写。,折磨的是,创纪录的弱马上回转。,只是出发报复,必要依据任职培训使著名停止汇总计算。。

       编辑完编码,健康状况如何考验顺序?如同先前的技术缺乏举起。,再,你可以在SIMNE网站上登记簿市考验账目。,不觉悟SimNow与不可更改的的技术有什么相干。登记簿成后账号内存在100万,这容许您考验翻开和翻开仓库栈。。

发表评论

Your email address will not be published.
*
*