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

      海外的期货市开展比力,国际期货市的开展非常有趣,更多陨石坑。第东西是更多的时期,像陌生期货美国原油平等地,陆续市23小时,国际期货与上海黄金,有一天四小时市,使分裂从9:00到10:15、10:30至11:30、从13点30分到15点,从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();
}

       在发送衔接要价以后,OnFruttCon()回答要价,去在该行使职责内可以电话联络登录行使职责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万,这容许您测验翻开和翻开仓库栈。。

Add a Comment

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