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

      与外面的期货市开展较比,海内期货市开展乏力。,更多陨石坑。率先是市工夫。,像陌生期货同样地,美国原油。,每天23小时延续市,海内期货与上海黄金,整天市四次,参加从9:00到10:15。、10:30至11:30、13:30~15:00和0230~次日。。更多市工夫,不竭地很多关门工夫。,大约,放了很多事情逻辑。。对立面,有很多市规则。,前一期的期货产权证券被分为现在职位。,大约,我们的就一定地面市工夫举行独立的判别。,是前本人市日的列表或现在市D的列表,要不然,状况的决定因素是不非常的。,该清单将最接近的被市系统回绝。。功绩褶皱中应用的头公文是:、及,静态库为:。下面是大约行为准则示例。:

       1. 创立CTP api诉讼:

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

       经过召唤CreateFtdcTraderApi()创立api诉讼——pTradeApi,而且召唤诉讼来启动各式各样的请求允许。,像,衔接保养。、用户登录、报单、撤单、查询仓库栈、查询资产等。。

       2. 创立CTP API回调诉讼:

CFtdcTradeSpi *pTradeSpi = new CFtdcTradeSpi(pTradeApi, 这样)

       这必要构图有重大意义的的意识到类。,我们的必要承受先前TE陈设的CTHOSTFTDCTCRADSPI类。重写该类说得中肯办法,保养发送的各式各样的记载。。

       3. 联络下面的两个状况。,并启动衔接保养请求允许。:

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

       衔接保养和诉讼设定初值行为准则。:

void CFtdcTradeSpi:衔接(字母串) serverAddr, string brokerId, string username, string 密码电文)
{
    serverAddr_ = serverAddr;
    brokerId_ = brokerId;
    username_ = username;
    password_ = password;

    pTradeApi_->SubscribePublicTopic(THOST_TERT_QUICK);
    pTradeApi_->SubscribePrivateTopic(THOST_TERT_QUICK);
    pTradeApi_->RegisterFront((char *)());
    pTradeApi_->Init();
}

       在收回衔接请求允许后,OnFruttField:()将解答请求允许。,而且在该行使职责内可以召唤登录行使职责pTradeApi_->ReqUserLogin()实现用户登录推拿,对应的OnRspUserLogin()将解答请求允许。。鉴于海内期货最早在市日登录,包围者必要C,到这地步,在OnrSPueLogIn()行使职责中。,可以更进一步的召唤pTradeApi_->ReqSettlementInfoConfirm()做包围者结算结实不经宣誓而庄严宣布,不经宣誓而庄严宣布结实将在OnRspSettlementInfoConfirm()内来回。实现包围者结算结实后不经宣誓而庄严宣布推拿。,实现了统统保养衔接和用户登录褶皱。,你可以活期定货。。

void CFtdcTradeSpi::OnFrontConnected()
{
    LOG_INFO << username_ << " 回调: 与保养已建立衔接, 开始登录";
}

void CFtdcTradeSpi::OnRspUserLogin(CThostFtdcRspUserLoginField *pRspUserLogin, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)
{
    if (pRspUserLogin == NULL || pRspInfo == 空)
    {
        LOG_INFO << username_ << " 登录回调异常, 指针为空";
        return;
    }

    if (pRspInfo->ErrorID == Err_Succeed)
    {
        LOG_INFO << username_ <<  " 登录成, 开始包围者结算结实不经宣誓而庄严宣布, 现在市日: " << pTradeApi_->GetTradingDay();
    }
}

void CFtdcTradeSpi::OnRspSettlementInfoConfirm(CThostFtdcSettlementInfoConfirmField *pSettlementInfoConfirm, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)
{
    if (pSettlementInfoConfirm == NULL || pRspInfo == 空)
    {
        LOG_INFO << username_ << " 包围者结算结实不经宣誓而庄严宣布回调异常, 指针为空";
        return;
    }

    string errorMsg;
    getErrcodeDesc(pRspInfo->ErrorMsg, errorMsg);
    LOG_INFO << username_ << " "
             << "经纪公司行为准则: " << pSettlementInfoConfirm->BrokerID << " "
             << "包围者行为准则: " << pSettlementInfoConfirm->InvestorID << " "
             << "不经宣誓而庄严宣布日期: " << pSettlementInfoConfirm->ConfirmDate << " "
             << "不经宣誓而庄严宣布工夫: " << pSettlementInfoConfirm->ConfirmTime << " "
             << "回调: 错误通讯, 错误码: " << pRspInfo->ErrorID << " " << errorMsg;
}

       4. 期货报单:

       (1)ReqOrderInsert():报单请求允许

CThostFtdcInputOrderField reqField;
memset(&reqField, 0, sizeof(CThostFtdcInputOrderField));
......
......
pTradeApi_->ReqOrderInsert(&reqField, orderInsertReqId_);
       与上述的解说根本分歧。,相差无几。 必要非常填写事情/面貌。、开/闭方位、市场价/价钱限度局限、付托音量、佣钱价钱等。,ReqOrderInsert()状况可在实现后召唤。。

       (2)OnRspOrderInsert():报单请求允许应对

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

       宣言成后,从理论地讲,行使职责将被回调。。只经过商量日记,,或许经受住任一技术是预先消化逻辑。,功用弱化。,竟,行使职责不注意回调。,自然,这也能够与SDK版本参与。。

       (3)OnRtnOrder():付托变动留心

void CFtdcTradeSpi::OnRtnOrder(CThostFtdcOrderField *pOrder)
{
}

       当付托情状机会时,将回调。一般而言,付托的位置首要是:未知、排队中不注意市。、部件市仍在排队中。、实现市等。。一次报单,条件有更多的音量,通常责怪一次所有些人市。,它将被划分为宽宏大量的的市。,因而这样行使职责将持续回调。。不竭的回调,每回来回付托的音量。、大量的、其他人员的记载将被机会。。

       (4)OnRtnMatchInfo():市通讯更改推进运动留心

void CFtdcTradeSpi::OnRtnTrade(CThostFtdcTradeField *pTrade)
{
}
       这样功用更要紧。,来回的每一转音讯都是事务通讯。,它计入大量的。、成交价、市费等。,这些是包围者体恤的记载。。总体来说,统统报单褶皱与前言教授的外面的期货报单工艺过程根本分歧。只相当预先消化了。,更确切地说,不必要写属于可能胜出者行列之内流量把持逻辑。,由于CTP不注意频率限度局限。,但对查询频率有限度局限。,这只不过API的反对票。,易胜是查询频率的限度局限。,状况有频率限度局限。。

       5.  查询期货认为方位:

       查询仓库栈首要召唤pTradeApi_->ReqQryInvestorPosition(),地面公文填写正当的的决定因素。。查询仓库栈解答行使职责为:

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

       该功用必要由功绩人员本身重写。,令人讨厌的的是,记载不见得敏捷地来回。,但是队列付还。,必要地面面貌参加举行汇总计算。。

       构图完行为准则,若何结帐顺序?如同先前的技术不注意增加。,只,你可以在SIMNE网站上完全符合市结帐理由。,我不了解SimNow和先前的技术中间的相干是什么。完全符合成后,有100万的认为。,因而我们的可以结帐开闭方位。。

NameE-mailWebsiteComment

发表评论

电子邮件地址不会被公开。 必填项已用*标注