国外期货程序化交易之行情获取讲解
本来是做图像算法,后来稀里糊涂的被拉进期货程序化交易这个方向。刚接触时真是一头雾水,什么合约、保证金、开仓、平仓、看多、看空等等完全不懂,对期货的了解仅仅停留在新闻报道里,各种期货知识一顿恶补后,思路渐渐清晰。于是开始着手开发期货行情程序、交易程序等等。目前,开发的行情程序及交易程序,主要还是和郑州易盛的交易系统对接,基于易盛的sdk做二次开发,通过调用易盛的行情api获取期货合约行情,调用易盛的交易api完成交易报单。当然也可以申请美国盈透的账号,然后使用盈透的行情及交易api。
为了方便开发,易盛官方(http://www.esunny.com.cn/)提供了文档以及示例demo,不过还是建议按照自己的理解和思路设计程序,官方提供的demo仅供参考。实时获取行情数据使用socket协议,需要长连接易盛提供的行情服务器,不过易盛提供的sdk内部会维护长连接,开发者可以不做太多处理,但断线重连逻辑需要开发者编写。编写代码时需要处理两方面内容,一个是调用方,即发出请求,另一个是回调方,即响应请求。发出请求时,只要自己的应用直接调用易盛的api即可,而响应请求,这个需要自己的应用继承、重写易盛提供的相应方法,然后作为回调供易盛的sdk调用。同时需要注意回调函数内不要做比较耗时的操作,即不要堵塞易盛的回调线程。整体上讲,开发过程还是容易的,下面是流程图及一些代码示例:
TapAPIApplicationInfo tapAppInfo;
strcpy(tapAppInfo.AuthCode, authcode.c_str());
strcpy(tapAppInfo.KeyOperationLogPath, username.c_str());
ITapQuoteAPI *pTapQuote = CreateTapQuoteAPI(&tapAppInfo, result);
MarketDataSource *pDataSource = new MarketDataSource(pTapQuote, this);
pTapQuote->SetAPINotify(pDataSource);
pDataSource->connect(serverAddr, port, username, password);
void MarketDataSource::connect(string serverAddr, uint16_t port, string username, string password)
{TAPIINT32 result = TAPIERROR_SUCCEED;// 保存登录信息serverAddr_ = serverAddr;port_ = port;username_ = username;password_ = password;// 设置服务器IP、端口result = (pTapQuote_ != NULL) ? pTapQuote_->SetHostAddress(serverAddr.c_str(), port) : -999;if (result != TAPIERROR_SUCCEED){LOG_INFO << username_ << " 请求: 设置服务器IP/端口出错 " << result;return;}// 登录服务器TapAPIQuoteLoginAuth loginAuth;memset(&loginAuth, 0, sizeof(TapAPIQuoteLoginAuth));strcpy(loginAuth.UserNo, username.c_str());strcpy(loginAuth.Password, password.c_str());loginAuth.ISModifyPassword = APIYNFLAG_NO;loginAuth.ISDDA = APIYNFLAG_NO;result = (pTapQuote_ != NULL) ? pTapQuote_->Login(&loginAuth) : -999;if (result != TAPIERROR_SUCCEED){LOG_INFO << username_ << " 请求: 登录服务器出错 " << result;}
}
void TAP_CDECL MarketDataSource::OnRspLogin(TAPIINT32 errorCode, const TapAPIQuotLoginRspInfo *info)
{}void TAP_CDECL MarketDataSource::OnAPIReady()
{}
void MarketDataSource::subscribeContract(const ContractInfo &contract)
{TapAPIContract tapContract;memset(&tapContract, 0, sizeof(TapAPIContract));tapContract.Commodity.CommodityType = TAPI_COMMODITY_TYPE_FUTURES;strcpy(tapContract.Commodity.ExchangeNo, contract.ExchangeNo.c_str());strcpy(tapContract.Commodity.CommodityNo, contract.CommodityNo.c_str());strcpy(tapContract.ContractNo1, contract.ContractNo.c_str());tapContract.CallOrPutFlag1 = TAPI_CALLPUT_FLAG_NONE;tapContract.CallOrPutFlag2 = TAPI_CALLPUT_FLAG_NONE;sessionId_ = 0;TAPIINT32 result = pTapQuote_->SubscribeQuote(&sessionId_, &tapContract);if (result == TAPIERROR_SUCCEED){LOG_INFO << username_ << " "<< "请求: 合约订阅成功" << " "<< contract.CommodityNo << contract.ContractNo;}else{LOG_INFO << username_ << " "<< "请求: 合约订阅失败" << " "<< contract.CommodityNo << contract.ContractNo << " "<< "错误码: " << result;}
}
void TAP_CDECL MarketDataSource::OnRtnQuote(const TapAPIQuoteWhole *info)
{if (info != NULL){TapAPIQuoteWhole marketData;memcpy(&marketData, info, sizeof(TapAPIQuoteWhole));LOG_INFO << "行情更新:"<< marketData.DateTimeStamp << " "<< marketData.Contract.Commodity.CommodityType << " "<< marketData.Contract.Commodity.ExchangeNo << " "<< marketData.Contract.Commodity.CommodityNo << " "<< marketData.Contract.ContractNo1 << " "<< marketData.QLastPrice << " "<< username_;}
}
国外期货程序化交易之行情获取讲解相关推荐
- 基于CTP的国内期货程序化交易之行情获取讲解
前面两篇文章主要讲了国外期货相关程序开发,使用的是郑州易盛的行情及交易api,而国内期货相关程序开发易盛貌似也是有sdk的,不过项目中使用的是上期技术的sdk,即大家经常提到的CTP a ...
- 国外期货程序化交易之报单流程讲解
编写国外期货合约报单程序,同样基于郑州易盛的sdk做二次开发,通过调用易盛的交易api完成交易报单.毕竟都是一家公司发布的sdk,所以交易api设计风格与行情api基本一致,调用逻辑也基 ...
- 放弃文华财经,自己编程实现期货程序化交易
一.目前期货程序化现状: 由于有免费的CTP接口,期货程序化交易目前比较普遍,很多人都尝试过在文华财经.金字塔之类的软件上回测和编写实盘策略. 期货程序化交易有很多优点:程序会按照设计自动执行,不受任 ...
- 期货程序化交易之期货入门知识摘录整理
开发期货程序化交易程序,首先要熟悉期货交易术语,否则不熟悉业务,开发的程序将会漏洞百出.下面是我在学习过程中摘录的一些期货相关知识,还是比较零散,可以作为入门时的资料看看.由于是陆续从网 ...
- 通达信期货程序化交易接口是什么?
通达信期货程序化交易接口是什么?期货办理手续交易先讲期货的程序化交易. 联接国内四大期货交易所的期货交易系统软件关键是前高新科技综合交易服务平台(CTP ).金仕达.易盛(关键联接郑商所)等. 在其中 ...
- 基于IB(Interactive Brokers)盈透证券的股票及期货行情获取讲解
盈透证券,作为老牌帝国主义券商,能够提供强到变态的交易软件TWS,多到变态的全球股票.期货等产品覆盖,以及低到变态的交易费用.如果做全球股票或期货交易,能够对接盈透证券相关接口还是不错的 ...
- python期货程序化交易高手心得_11位顶级高手谈期货心得
位,再多钱也是没有用的. 外盘的价 格变化是国外交易商的预期,跟国内的预期不完全吻合. 我不会去使用程序化交易,我认为程序化交易是有局限性的. 价格是变化的,你很难用一个框子来框它! 有时候期货交易它 ...
- python期货程序化交易高手心得_位顶级高手谈期货心得
位顶级高手谈期货心得 王向洋 14 年期货生涯,多次获得全国期货实盘大赛冠军,曾创造的最高收益率为 5 个 月 54 倍. 期货中国网访谈精彩语录: 比赛时操盘的冒险精神强很多. 在和高手过招中你会思 ...
- 基于CTP的国内期货程序化交易之报单流程讲解
相比国外期货交易开发,国内期货交易开发就有些繁琐了,坑比较多.第一就是交易时间段多,像国外期货美原油,全天23小时连续交易,而国内期货沪金,全天分四个时间段交易,分别为9:00至10:1 ...
最新文章
- Python 中的进程、线程、协程、同步、异步、回调(一)
- linux通过tar包安装docker
- Java注释Override、Deprecated、SuppressWarnings详解
- git -- 练习的笔记
- c51语言中 位取反指令,C51的几种位操作运算说明
- 日语词频分析——mecab使用
- 如何提高软件测试团队工作效率
- 如何将逐小时数据处理为逐日数据
- 如何清理Windows XP冗余文件【绿色系统收藏】
- 6 生僻字_教改后注音书还有必要读吗?别纠结,6-8岁注音书我推荐这10套
- 使用Python处理声音文件(三):剪辑与淡入淡出
- (java毕业设计)基于java教室设备管理系统源码
- 机器学习--模型参数优化及scoring可选参数
- 数据的正态分布验证和方差齐性检验
- php 关键词生成,DEDECMS实现文章tag关键词自动生成列表页的方法
- MySQL将表中的价格全部加五_MySQL浅见(五)修改表
- 你偷看的小黄片,全被监视了!网友:隐私早已。。。
- 计算机数字音乐谱 凉凉,凉凉数字简谱
- 逆向工程之打造自己的仙剑奇侠
- CSS box-flex