By - admin

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

基于CTP的海内期货顺序化买卖之报单连贯教授 - 摘要:
本文是向海内期货买卖BA的申报处理。,

      与在国外期货买卖开展相干上地,海内期货买卖开展乏力。,更多陨石坑。率先是买卖工夫。,像陌生期货类似于,美国原油。,每天23小时延续买卖,海内期货与上海黄金,有朝一日买卖四次,地区从9:00到10:15。、10:30至11:

      与在国外期货买卖相干上地

生长

,海内期货买卖开展乏力。,更多陨石坑。率先是买卖工夫。,像陌生期货类似于,美国原油。,每天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类。重写该类击中要害办法,保养发送的杂多的datum的复数。。

       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)
{
}

      当付托情况找头时,将回调。大抵,付托的位置首要是:未知、排队中缺席买卖。、零件买卖仍在排队中。、走完买卖等。。一次报单,条件有更多的编号,通常产生断层一次所某个买卖。,它将被划堕入少量的买卖。,因而这么地职务将持续回调。。不时的回调,每回又来付托的编号。、音量、剩余额的datum的复数将被找头。。

       (4)OnRtnMatchInfo():买卖通知更改推进运动布告

void CFtdcTradeSpi::OnRtnTrade(CThostFtdcTradeField *pTrade)
{
}

      这么地功用更要紧。,又来的每又音讯都是事务通知。,它克制大块。、成交价、买卖费等。,这些是金融家参与的datum的复数。。总体来说,总计达报单处理与序文教授的在国外期货报单连贯根本划一。只稍许的促进了。,换句话说,不必要写认为流量把持逻辑。,因CTP缺席频率限度局限。,但对查询频率有限度局限。,这不料API的对立的。,易胜是查询频率的限度局限。,申明有频率限度局限。。

       5.  查询期货报账地方:

       查询仓库栈首要理由pTradeApi_->ReqQryInvestorPosition(),比照

文档

这宣讲你可以填写恰当的的决定因素。。查询仓库栈对称职务为:

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

      该功用必要由生长人员本人重写。,令人烦恼的的是,datum的复数将不会一起又来。,只因为凝结偿还。,你必要辩论你的展出划分搜集。

计算

才行。

       写作完信号,方式受考验顺序?。如同先前的技术缺席补充受考验理由。,只,你可以在SIMNE网站上自动记录器买卖受考验理由。,我不晓得SimNow和先前的技术私下的相干是什么。自动记录器成后,有100万的报账。,因而咱们可以受考验开闭地方。。

关于是云芝社区萧边为您预备的容量。,云旗社区视频博客、问答、公共场所电传代码、出现、一道菜和静止列也有相干容量。,迎将持续运用右上角搜索扣状物搜索
, 顺序化买卖
, 期货报单
CTP顺序生长
,这样的你就能推进更多相干的知。。

发表评论

Your email address will not be published.
*
*