广州期货开户,广州期货开户需要多少钱_广州期货开户流程-广州期货公司期货开户方便快捷手续费低 ,广州徽商期货营业部 国内前十AA类评级期货公司为您提供商品股指原油期货开户、网上期货开户等专业服务,方便快捷手续费低!广州徽商期货营业部 徽商期货有限责任公司广州营业部 期货公司【多年连续排名前十】 A股上市券商全资控股 告别400电话【一对一专业服务】、佣金优惠【节约交易成本】、万兆网络直连交易所【交易快人一步】 财富热线 17666667636,广州徽商期货营业部(17666667636)【专业期货开户】【方便快捷手续费低】广州期货公司http://www.ppby.cn提供商品股指原油期货开户、网上期货开户等专业服务,为你解决广州期货开户,广州期货开户流程,广州期货公司,广州期货开户条件,广州期货开户需要多少钱,广州期货官方电话,广州期货有限公司官网,广州哪里可期货开户,广州期货开户手续费,广州期货开户流程等股指期货开户服务。

国泰君安期货开户云上海期货交易所CTP行情和交易接入

发布时间:2019-12-03  来源:广州期货开户 阅读:

广州期货开户网站最新资讯:

摘要:CTP的接入Demo......

1.CTP是上期技术,提供的国内期货行情和交易的接口,自推出以来,各大券商均架设了CTP技术的接入,引入策略算法便可以初步形成一个自动交易的系统,这也就吸引了很多对自动交易,策略交易感兴趣的各路高人来使用。

2.CTP难点在于,一个库提供了行情和交易两套接口,各自均有一套业务流程,而且两者在业务上还存在部分业务关联,也就是说还要处理两套之间的业务同步问题,没有一些C++基础的人很难开发好用的CTP库。

3.本Demo目标是,在Windows环境下做两个程序:

image.png

一个封装CTP行情和交易接口成一个库,尽可能在高内聚低耦合的情况下,保持代码清晰,通俗尽可能让;

一个执行程序很容易的去调用这个库,这里没有使用MFC或QT,直接采用控制台程序,很清晰的展示使用库。


二、准备环境

1.开发工具:visual studio 2015或以上版本(下载)

本Demo采用Visual studio 2015 专业版 update 3

Windows7 64位

2.下载上期CTP库(下载)

综合交易平台API下载,下载列表中的windows下64位库(最新(2015-05-15)),解压如下:

image.png


3.申请模拟账号(申请)

主页右上角,注册账号,例子中方便开箱即用,会使用我自己申请好的,请自行换成自己的帐号。

三、程序介绍

1.先看下Demo的运行效果。

image.png


2.程序目录结构


Show all files模式下,VS工程目录结构如下图:

image.png

共两个项目,CTPSample和CTPServer,CTPSample为封装交易所CTP的动态库,CTPServer为使用库的UI程序。


②代码目录结构

bin64

-----CTP                  CTP产生的共享文件

-----Log                  日志文件  

config.cfg                配置文件


build                       

CTPServer.sln          存放工程文件


Src

------CTPSample       DLL代码

------CTPServer         UI代码

------Framwork         框架代码,避免复杂,不做公开(这里主要提供日志,数据定义,可自己替换)



说明:confg.cfg主要保存了CTP的地址(其他均为非本Demo演示的主要功能):

[info]

CTPFront.trade1 = tcp://180.168.146.187:10030

CTPFront.quote1 = tcp://180.168.146.187:10031

CTPFront.trade2 = tcp://180.168.146.187:10001

CTPFront.quote2 = tcp://180.168.146.187:10011

CTPFront.trade3 = tcp://218.202.237.33:10002

CTPFront.quote3 = tcp://ctp1-md11.citicsf.com:41213


3.模块介绍

CTPSample模块

CTPBase.h                                                 动态库的导出定义

MyCTPQuote.h/MyCTPQuote.CPP           交易的封装   

MyCTPQuote.h/MyCTPQuote.cpp           行情的封装


CTPServer模块

TradeManager.h/TradeManager.cpp         UI主逻辑

CTPServer.cpp                                            main启动

四、程序解析

1. CTPSample模块之MyCTPQuote.h


//定义一个管理器,管理行情接受 class   CTPSAMPLE_EXPORT MyCTPQuote { //嵌入行情回报类 class  MyRecv : public  CThostFtdcMdSpi { public: MyRecv():m_Parent(nullptr) {}; ~MyRecv() {}; void Bind(MyCTPQuote  *Parent) { m_Parent = Parent; } public: ///当客户端与交易后台建立起通信连接时(还未登录前),该方法被调用。 virtual void OnFrontConnected() { m_Parent->OnFrontConnected(); } ///当客户端与交易后台通信连接断开时,该方法被调用。当发生这个情况后,API会自动重新连接,客户端可不做处理。 ///@param nReason 错误原因 ///        0x1001 网络读失败 ///        0x1002 网络写失败 ///        0x2001 接收心跳超时 ///        0x2002 发送心跳失败 ///        0x2003 收到错误报文 virtual void OnFrontDisconnected(int nReason) { m_Parent->OnFrontDisconnected(nReason); } ///心跳超时警告。当长时间未收到报文时,该方法被调用。 ///@param nTimeLapse 距离上次接收报文的时间 virtual void OnHeartBeatWarning(int nTimeLapse) { m_Parent->OnHeartBeatWarning(nTimeLapse); } ///登录请求响应 virtual void OnRspUserLogin(CThostFtdcRspUserLoginField *pRspUserLogin, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)  { m_Parent->OnRspUserLogin(pRspUserLogin, pRspInfo, nRequestID, bIsLast); } ///登出请求响应 virtual void OnRspUserLogout(CThostFtdcUserLogoutField *pUserLogout, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) { m_Parent->OnRspUserLogout(pUserLogout, pRspInfo,  nRequestID,  bIsLast); } ///错误应答 virtual void OnRspError(CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) { m_Parent->OnRspError(pRspInfo, nRequestID,  bIsLast); } ///订阅行情应答 virtual void OnRspSubMarketData(CThostFtdcSpecificInstrumentField *pSpecificInstrument, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)  { m_Parent->OnRspSubMarketData(pSpecificInstrument, pRspInfo, nRequestID, bIsLast); } ///取消订阅行情应答 virtual void OnRspUnSubMarketData(CThostFtdcSpecificInstrumentField *pSpecificInstrument, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)  { m_Parent->OnRspUnSubMarketData(pSpecificInstrument, pRspInfo, nRequestID,  bIsLast); } ///订阅询价应答 virtual void OnRspSubForQuoteRsp(CThostFtdcSpecificInstrumentField *pSpecificInstrument, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)  { m_Parent->OnRspSubForQuoteRsp(pSpecificInstrument, pRspInfo,  nRequestID,  bIsLast); } ///取消订阅询价应答 virtual void OnRspUnSubForQuoteRsp(CThostFtdcSpecificInstrumentField *pSpecificInstrument, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)  { m_Parent->OnRspUnSubForQuoteRsp(pSpecificInstrument, pRspInfo,  nRequestID,  bIsLast); } ///深度行情通知 virtual void OnRtnDepthMarketData(CThostFtdcDepthMarketDataField *pDepthMarketData) { m_Parent->OnRtnDepthMarketData(pDepthMarketData); } ///询价通知 virtual void OnRtnForQuoteRsp(CThostFtdcForQuoteRspField *pForQuoteRsp) { m_Parent->OnRtnForQuoteRsp(pForQuoteRsp); } public: MyCTPQuote  *m_Parent; }; //thread public: MyCTPQuote( ); ~MyCTPQuote(); void    setMainWidget(void *widget); // 订阅广播报文 void Subscribe(CPacketReceiver *pPacketReceiver); // 取消广播报文订阅 void Unsubscribe(CPacketReceiver *pPacketReceiver); static  MyCTPQuote *Instance(); void  Init(const char  *User, const  char  *pswd, const  char  *broker, const char *pszAddress); void  FinishQryInstrument(); void  setLog(const string&  str); bool      m_bLoginSuccessed; public: ///////////////////////////////////////请求类函数,提供主要逻辑,供外部使用//////////////////////////////////////////////////////////////////////////// ///用户登录请求 int ReqUserLogin(CThostFtdcReqUserLoginField *pReqUserLoginField, int nRequestID)  {  return m_reqApi->ReqUserLogin(pReqUserLoginField, nRequestID ); } ///登出请求 int ReqUserLogout(CThostFtdcUserLogoutField *pUserLogout, int nRequestID) { return m_reqApi->ReqUserLogout(pUserLogout, nRequestID); } ///获取当前交易日 ///@retrun 获取到的交易日 ///@remark 只有登录成功后,才能得到正确的交易日 const char *GetTradingDay() { return m_reqApi->GetTradingDay(); } ///订阅行情。 ///@param ppInstrumentID 合约ID   ///@param nCount 要订阅/退订行情的合约个数 ///@remark  int SubscribeMarketData(char *ppInstrumentID[], int nCount) { return m_reqApi->SubscribeMarketData(ppInstrumentID, nCount); } ///退订行情。 ///@param ppInstrumentID 合约ID   ///@param nCount 要订阅/退订行情的合约个数 ///@remark  int UnSubscribeMarketData(char *ppInstrumentID[], int nCount) { return m_reqApi->UnSubscribeMarketData(ppInstrumentID, nCount); } public: ///////////////////////////////////////回报类函数,收到数据,更新本地行情信息//////////////////////////////////////////////////////////////////////////// ///当客户端与交易后台建立起通信连接时(还未登录前),该方法被调用。 void OnFrontConnected(); ///当客户端与交易后台通信连接断开时,该方法被调用。当发生这个情况后,广州期货公司,API会自动重新连接,客户端可不做处理。 ///@param nReason 错误原因 ///        0x1001 网络读失败 ///        0x1002 网络写失败 ///        0x2001 接收心跳超时 ///        0x2002 发送心跳失败 ///        0x2003 收到错误报文 void OnFrontDisconnected(int nReason); ///心跳超时警告。当长时间未收到报文时,该方法被调用。 ///@param nTimeLapse 距离上次接收报文的时间 void OnHeartBeatWarning(int nTimeLapse); ///登录请求响应 void OnRspUserLogin(CThostFtdcRspUserLoginField *pRspUserLogin, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast); ///登出请求响应 void OnRspUserLogout(CThostFtdcUserLogoutField *pUserLogout, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast); ///错误应答 void OnRspError(CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast); ///订阅行情应答 void OnRspSubMarketData(CThostFtdcSpecificInstrumentField *pSpecificInstrument, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast); ///取消订阅行情应答 void OnRspUnSubMarketData(CThostFtdcSpecificInstrumentField *pSpecificInstrument, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast); ///订阅询价应答 void OnRspSubForQuoteRsp(CThostFtdcSpecificInstrumentField *pSpecificInstrument, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast); ///取消订阅询价应答 void OnRspUnSubForQuoteRsp(CThostFtdcSpecificInstrumentField *pSpecificInstrument, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast); ///深度行情通知 void OnRtnDepthMarketData(CThostFtdcDepthMarketDataField *pDepthMarketData); ///询价通知 void OnRtnForQuoteRsp(CThostFtdcForQuoteRspField *pForQuoteRsp); private: CThostFtdcMdApi* m_reqApi; MyRecv         *m_RecvSpi; map<string /*InstrumentID*/, CThostFtdcInstrumentField>    m_mapInstrument;//合约ID,合约信息 map<string /*InstrumentID*/,CThostFtdcDepthMarketDataField /*Quotation*/>  m_mapInstrumentQuote;//保存  合约ID-最新行情  对,合约ID唯一。 vector<string /*InstrumentID*/> m_vecInstrumentId;//合约ID int         requestID; string   m_TradingDay; int    m_session ; int    m_frontId ; string  OrderRef ; mutex m_mutex; ///用户登录信息 CThostFtdcReqUserLoginField  *m_userLoginInfo; bool m_bQryInstrumentOK; //用于给上层订阅 typedef vector<CPacketReceiver*> VPKTRECEIVER; VPKTRECEIVER            m_vPketReceiver; };


主要功能点:


①模块管理:CTP的行情模块分两块,一个是同步查询API(CThostFtdcMdApi),一个是异步回报API(CThostFtdcMdSpi),这里定义了一个包装类,来管理这两类API,即

MyRecv来封装CThostFtdcMdSpi,CThostFtdcMdApi直接使用。


②给UI回报接口

本文由广州期货开户网(http://www.ppby.cn)整理发布

本文网址:http://www.ppby.cn/shangpinqihuo/6580.html

广州徽商期货营业部(17666667636)【专业期货开户】【方便快捷手续费低】广州期货公司http://www.ppby.cn提供商品股指原油期货开户、网上期货开户等专业服务,为你解决广州期货开户,广州期货开户流程,广州期货公司,广州期货开户条件,广州期货开户需要多少钱,广州期货官方电话,广州期货有限公司官网,广州哪里可期货开户,广州期货开户手续费,广州期货开户流程等股指期货开户服务。,转载请保留网址。

上一篇:国王金融交易商中国金融期货交易所招聘经济金融类
下一篇:沭阳期货开户万源特色产品走俏第九届秦巴地区商品交易会 交易额58万余元

发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
最新评论 进入详细评论页>>