个人使用上期CTP接口开发期货实时行情数据接口程序化交易平台可行吗

个人使用上期CTP接口开发期货程序化交易平台可行吗? - 知乎385被浏览36558分享邀请回答01 条评论分享收藏感谢收起【原创】基于上期CTP的程序化交易系统源代码
首先解释一下,题目中的原创两个字的含义:俺的意思是除了CTP接口,其他代码是我一个个敲出来的,
就这意思。俺鼓足莫大勇气,来献丑了,高手勿喷。
最开始一直不懂CTPAPI到底怎么写,到处找,很多都是做了封装,不知里面到底怎么处理的。
于是根据宽耳朵大侠介绍的构架,使用上期CTPAPI接口写的初级自动交易程序,
未封装(不知怎么封装:)),完完全全的源代码,可以据此了解CTP的运行机制。
在此也感谢一下宽耳朵大侠的热情分享。
由于本人非程序员,又非学金融的,所以自己还是费了不少脑细胞的,才弄通了。
实盘简单测试了一下。
写代码时没写文档,本来想弄,但感觉太费时间了,
这又有现成的,就没在上面花心思了。
对于高手来说,代码质量就比较差了,但对于初学的想弄CTP的,
俺觉得还是有一定的参考作用的,
配合宽耳朵大侠的文档,理解CTP的运行机制再好不过了。
参考文档:
基于CTP的程序化交易系统开发&(作者:宽耳朵)
共三个部分,链接分别如下:
原文地址:&(作者:宽耳朵)
原文地址:&(作者:宽耳朵)
原文地址:&(作者:宽耳朵)
我自己码的代码,都在CSDN上,共三个版本,链接分别如下:
第一个版本:上期CTP/API/C++/源代码/单合约单策略版本&
第二个版本:上期CTP/API/C++/源代码/多合约多策略版本&
第三个版本:上期CTP/API/C++/源代码/多合约多策略版本+策略测试功能
&本代码仅供参考。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。2377人阅读
程序化交易(5)
& & & &前面两篇文章主要讲了国外期货相关程序开发,使用的是郑州易盛的行情及交易api,而国内期货相关程序开发易盛貌似也是有sdk的,不过项目中使用的是上期技术的sdk,即大家经常提到的CTP api——综合交易平台api。相比较而言,易盛给自己的sdk起的名字好听一点,叫易盛国际金融衍生品交易分析系统,听着高大上一些。
& & & &上期技术的api使用思路与易盛的api基本一致,大同小异,其实无论谁设计这个架构,基本也都是这个思路,一个发起请求调用,一个响应请求回调,调用逻辑由sdk提供方编写,回调逻辑由开发者编写,这样共同完成整个业务逻辑开发。不过毕竟是两家公司开发的sdk,所以在定义参数及一些交易术语上,还是有些不同的,这个需要开发者多查阅文档、多摸索才行。
& & & &基于CPT api开发行情获取程序,主要用到的头文件为:ThostFtdcMdApi.h、ThostFtdcUserApiDataType.h及ThostFtdcUserApiStruct.h,动态库为:libthostmduserapi.so。
& & & &下面是一些代码示例:
& & & &1. 创建CTP api实例:
CThostFtdcMdApi *pMarketDataApi = CThostFtdcMdApi::CreateFtdcMdApi(dirName);
& & & 即通过调用CreateFtdcMdApi()创建api实例——pMarketDataApi,随后调用该实例发起各种请求,比如连接服务器、用户登录、订阅合约、退订合约等。
& & & &2. 创建CTP api回调实例:
MarketDataSource *pDataSource = new MarketDataSource(pMarketDataApi, this);& & & &这个需要自己编写相应实现类,需要继承上期技术提供的CThostFtdcMdSpi类。重写该类里面的方法,以处理服务器发过来的各类数据。
& & & &3. 将上述两个实例关联起来,并发起连接服务器及用户登录:
pMarketDataApi-&RegisterSpi(pDataSource);
pDataSource-&connect(serverAddr, brokerId, username, password);& & & &连接服务器以及实例初始化相关代码:
void MarketDataSource::connect(string serverAddr, string brokerId, string username, string password)
serverAddr_ = serverA
brokerId_ = brokerId;
username_ =
password_ =
pMarketDataApi_-&RegisterFront((char *)serverAddr_.c_str());
pMarketDataApi_-&Init();
}& & & &连接请求发出后,OnFrontConnected()及OnRspUserLogin()会响应请求,根据返回的信息,可以确定是否登录完成。登录成功后,就可以订阅合约了。
void MarketDataSource::OnFrontConnected()
LOG_INFO && username_ && & 回调: 与服务器已建立连接, 开始登录&;
void MarketDataSource::OnRspUserLogin(CThostFtdcRspUserLoginField *pRspUserLogin, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)
if (pRspInfo == NULL)
LOG_INFO && username_ && & 登录回调异常, 指针为空&;
if (pRspInfo-&ErrorID == Err_Succeed)
LOG_INFO && username_ && & 登录成功, 当前交易日: & && pMarketDataApi_-&GetTradingDay();
}& & & &4. 订阅期货合约:
void MarketDataSource::subscribeContracts(std::set&ContractInfo& &contracts)
const size_t count = contracts.size();
char *instruments[count];
int i = 0;
for (std::set&ContractInfo&::iterator it = contracts.begin(); it != contracts.end(); ++it)
string strInstrument = it-&CommodityNo + it-&ContractNo;
instruments[i] = new char[32];
memset(instruments[i], 0, 32);
strcpy(instruments[i], strInstrument.c_str());
int result = Err_S
result = pMarketDataApi_-&SubscribeMarketData(instruments, (int)count);
if (result == Err_Succeed)
LOG_INFO && username_ && & & && &请求: 合约订阅成功&;
LOG_INFO && username_ && & &
&& &请求: 合约订阅失败& && & &
&& &错误码: & && result && & & && ErrorCode::get(result);
for (i = 0; i & ++i)
delete[] instruments[i];
}& & & &上述代码主要参考CTP文档编写,比较简单,按照文档说明,填写正确参数,然后调用SubscribeMarketData()函数即可。
& & & &5. 接收行情数据:
void MarketDataSource::OnRtnDepthMarketData(CThostFtdcDepthMarketDataField *pDepthMarketData)
if (pDepthMarketData != NULL)
CThostFtdcDepthMarketDataField marketD
memcpy(&marketData, pDepthMarketData, sizeof(CThostFtdcDepthMarketDataField));
LOG_INFO && &行情更新:&
&& marketData.TradingDay && & &
&& marketData.UpdateTime && & &
&& marketData.UpdateMillisec && & &
&& marketData.InstrumentID && & &
&& marketData.LastPrice && & &
&& username_;
}& & & &一旦合约订阅成功,在交易时间段内,就会有行情数据源源不断的推送过来。上期技术文档中提到行情是每秒2条数据,这个还是比较准的。注意,这里有一个坑,那就是在非交易时间段,经常会接收脏数据,姑且叫测试数据吧。但这个测试数据是个十几位长的超级大浮点数,需要做好过滤,否则程序就各种异常了,甚至程序Crash。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:170075次
积分:2685
积分:2685
排名:第13262名
原创:94篇
评论:148条
(3)(14)(2)(8)(16)(2)(2)(1)(7)(1)(2)(1)(3)(1)(3)(1)(2)(2)(5)(6)(7)(13)

我要回帖

更多关于 期货实时行情数据接口 的文章

 

随机推荐