Hello CTP(七)——REM交易API
一、REM API简介
1、REM API简介
盛立柜台API文件如下:
EesTraderApi.h:EES交易客户端API接口定义
EesTraderDefine.h:EES交易客户端数据结构以及消息体定义
EesTraderErr.h:EES交易客户端错误类型定义
EESQuoteApi.h:EES行情客户端API接口定义
EESQuoteDefine.h:EES行情客户端数据类型和结构定义
REM事件回调函数中,如果分批推送查询结果,bFinish返回为true表示本次查询结束,数据为无效值。
2、信息采集工具
基于证监会穿透式监管要求,REM提供了coll_rptr工具进行信息采集工具,需要root权限执行,配置信息如下:
<?xml version="1.0" encoding="utf-8"?>
<config><coll_rptr_version value="1.0.0.7" /><server_info ip="10.1.59.35" port="20001"/><enable_log status="1"/><clients rptr_time="300" reconnect_time="5" local_ip=""><client app_id="111" auth_id="111111" login_id="test001" password="1" /></clients>
</config>
server_info ip需要填查询通道的IP和端口。
3、动态库加载
REM API需要通过加载动态库获取相应API函数符号表,创建API实例,因此需要加载和销毁API实例。
bool LoadEESTrader()
{T_DLL_HANDLE m_handle = dlopen(EES_TRADER_DLL_NAME, RTLD_LAZY);if (!m_handle){printf("load library(%s) failed.\n", EES_TRADER_DLL_NAME);return false;}funcCreateEESTraderApi createFun = (funcCreateEESTraderApi)dlsym(m_handle, CREATE_EES_TRADER_API_NAME);if (!createFun){printf("get function addresss(%s) failed!\n", CREATE_EES_TRADER_API_NAME);return false;}funcDestroyEESTraderApi m_distoryFun = (funcDestroyEESTraderApi)dlsym(m_handle, DESTROY_EES_TRADER_API_NAME);if (!createFun){printf("get function addresss(%s) failed!\n", DESTROY_EES_TRADER_API_NAME);return false;}EESTraderApi m_tradeApi = createFun();if (!m_tradeApi){printf("create trade API object failed!\n");return false;}return true;
}void UnloadEESTrader()
{if (m_tradeApi){m_distoryFun(m_tradeApi);m_tradeApi = NULL;m_distoryFun = NULL;}if (m_handle){dlclose(m_handle);m_handle = NULL;}
}
4、Trader API实例
创建API实例,可以创建多个API实例
EESTraderApi* CreateEESTraderApi(void)
销毁API实例:
RESULT EESTraderApi::DisConnServer()
void DestroyEESTraderApi(EESTraderApi* pEESTraderApi)
如果需销毁交易API实例,用户须显式调用DisConnServer与REM柜台系统断开,然后再调用DestroyEESTraderApi来销毁由CreateEESTraderApi创建的实例。
5、连接交易前置
连接交易前置:
RESULT EESTraderApi::ConnServer(const EES_TradeSvrInfo& param, EESTraderEvent* pEvent)
void EESTraderEvent::OnConnection(ERR_NO errNo, const char* pErrStr)
void EESTraderEvent::OnDisConnection(ERR_NO errNo, const char* pErrStr )
用户需要设置EES柜台系统的交易服务地址信息(IP,TCP端口,UDP端口),查询服务地址信息(IP,TCP端口),用户本地地址(IP,UDP端口)以及用户实现的继承于EESTraderEvent的回调事件类,以建立交易客户端与服务器的连接,连接是否成功,可以从返回码中确认,如果失败则表示连接失败;如果返回成功,则需要等待服务器响应消息,服务器的连接事件通过OnConnection通知出来。如果断连,则通过OnDisConnection通知出来。 事件里面标识了当前服务器的连接状态。
如果要使用TCP而非UDP下单,则需要将用户本地UDP端口、服务端UDP端口设置为0、用户本地IP设置为空字符串。
6、用户登录
RESULT EESTraderApi::UserLogon(const char* userId, const char* userPwd, const char* prodInfo, const char* macAddr)
void EESTraderEvent::OnUserLogon(EES_LogonResponse* pLogon)
当客户端与EES柜台系统成功建立连接后,用户输入用户名和密码使用UserLogon登录到EES柜台系统。登陆是否成功,可以从返回码中确认,如果失败则表示连接失败;如果返回成功,则需要等待服务器响应消息,服务器的登陆响应事件通过OnUserLogon通知出来,事件返回的pLogon表示登陆状态。
7、查询用户帐户
RESULT EESTraderApi::QueryUserAccount()
void EESTraderEvent::OnQueryUserAccount(EES_AccountInfo* pAccoutnInfo, bool bFinish)
当客户端登陆EES柜台系统成功后,用户可以使用QueryUserAccount查询账户信息,在用户注册回调事件中的查询账户信息响应事件OnQueryUserAccount中获取账户信息,一个用户可以绑定多个帐户,因此会分批推送数据。
二、报单
1、报单
virtual RESULT EnterOrder(EES_EnterOrderField* pOrder ) = 0;
EES_Account m_Account:用户帐号
EES_SideType m_Side:买卖方向
EES_ExchangeID m_Exchange:交易所代码
EES_Symbol m_Symbol:合约代码
EES_SecType m_SecType:交易品种
double m_Price:价格
unsigned int m_Qty:数量
EES_ClientToken m_ClientOrderToken:整型,必须保证递增,但不必连续,可以使用GetMaxToken获取当前Token最大值。
EES_OrderTif m_Tif:当需要下FAK/FOK报单时,需要设置为EES_OrderTif_IOC,普通限价单为EES_OrderTif_Day。
unsigned int m_MinQty:当需要下FAK/FOK报单时,值为0表示交易所FAK-任意数量;值>0且<m_Qty表示交易所FAK-最小数量;值为m_Qty表示交易所FOK。
EES_CustomFieldType m_CustomField:用户自定义字段,8个字节。用户在下单时指定值,将会在OnOrderAccept,OnQueryTradeOrder事件中返回。
EES_MarketSessionId m_MarketSessionId:交易所席位代码,从OnResponseQueryMarketSessionId获取合法值,如果填入0或者其他非法值,REM系统将自行决定送单的席位 ,除非m_ForceMarketSessionId为true
EES_HedgeFlag m_HedgeFlag:投机套利标志
Double m_StopPrice:当m_OrderType为3/4/5/6时必填,其它情况填0。
2、订单索引
OrderRef:订单引用,EES_ClientToken m_ClientOrderToken为递增非连续整形数值,通过格式化m_ClientOrderToken字符串得到OrderRef,通常前5位取当天当前秒数,后n位取m_ClientOrderToken%10^n得到。
OrderLocalID:本地订单编号,通过字符串格式化EES_MarketToken m_MarketOrderToken得到。
OrderSysID:交易所订单编号,EES_MarketOrderId m_MarketOrderId,字符串类型。
m_ClientOrderToken在OnOrderAccept、OnOrderMarketAccept、OnOrderReject、OnOrderMarketReject、OnOrderExecution、OnOrderCxled、OnCxlOrderReject、OnQueryTradeOrder、OnQueryTradeOrderExec回调函数都有返回,因此可以追踪订单。
m_MarketOrderToken是REM系统内的订单编号,OnOrderAccept、OnOrderMarketAccept、OnOrderMarketReject、OnOrderExecution、OnOrderCxled、OnCxlOrderReject、OnQueryTradeOrder、OnQueryTradeOrderExec回调函数都有返回。
m_MarketOrderId是交易所订单编号,只在OnOrderMarketAccept、OnQueryTradeOrder事件回调函数内有返回。
3、报单回报
(1)柜台ACK
virtual void OnOrderAccept(EES_OrderAcceptField* pAccept );
通过OrderRef追踪订单,并更新订单的OrderLocalID。
(2)交易所ACK
virtual void OnOrderMarketAccept(EES_OrderMarketAcceptField* pAccept);
通过OrderRef追踪订单,并更新订单的OrderSysID。
(3)柜台拒单
virtual void OnOrderReject(EES_OrderRejectField* pReject );
通过OrderRef追踪订单,并更新订单状态为柜台拒单撤单。
(4)交易所拒单
virtual void OnOrderMarketReject(EES_OrderMarketRejectField* pReject);
通过OrderRef追踪订单,并更新订单状态为交易所拒单撤单。
(5)成交回报
virtual void OnOrderExecution(EES_OrderExecutionField* pExec );
通过OrderRef追踪订单,并更新订单成交。
三、撤单
1、撤单
virtual RESULT CancelOrder(EES_CancelOrder* pCxlOrder) = 0;
EES_MarketToken m_MarketOrderToken:REM系统订单号。
unsigned int m_Quantity:目前必须填0,其它值当0处理。
EES_Account m_Account:账户
EES_MarketSessionId m_MarketSessionId:交易所席位代码,从OnResponseQueryMarketSessionId获取合法值,如果填入0或者其他非法值,REM系统将自行决定送单的席位 ,除非m_ForceMarketSessionId为true。
unsigned char m_ActionFlag:0=撤单,1=挂起,2=激活,仅上期和能源中心支持激活挂起。
unsigned char m_orderIdType:0:系统单号撤单,1:本地单号撤单(需要填写本地单号m_ClientOrderToken)。
EES_ClientToken m_ClientOrderToken:订单引用。
2、撤单回报
(1)交易所拒绝撤单
virtual void OnCxlOrderReject(EES_CxlOrderRej* pReject );
通过OrderRef追踪订单,并更新订单状态为交易所拒单。
(2)撤单成功
virtual void OnOrderCxled(EES_OrderCxled* pCxled );
通过OrderRef追踪订单,并更新订单状态为撤单。
四、REM查询
1、资金查询
virtual RESULT QueryAccountBP(const char* accountId, int nReqId) = 0;
virtual void OnQueryAccountBP(const char* pAccount, EES_AccountBP* pAccoutnPosition, int nReqId);
EES_Account m_account:账户
double m_InitialBp:初始权益
double m_AvailableBp:总可用资金
double m_Margin:所有仓位占用的保证金
double m_FrozenMargin:所有挂单冻结的保证金
double m_CommissionFee:已扣除的手续费总金额
double m_FrozenCommission:挂单冻结的总手续费金额
double m_OvnInitMargin:初始昨仓保证金
double m_TotalLiquidPL:总平仓盈亏
double m_TotalMarketPL:总持仓盈亏
2、持仓查询
virtual RESULT QueryAccountPosition(const char* accountId, int nReqId) = 0 ;
virtual void OnQueryAccountPosition(const char* pAccount, EES_AccountPosition* pAccoutnPosition, int nReqId, bool bFinish);
EES_Account m_actId:账户
EES_Symbol m_Symbol:合约代码
EES_PosiDirection m_PosiDirection:多空方向,多头(1),空头(5)
unsigned int m_InitOvnQty:隔夜仓初始数量,不会变化
unsigned int m_OvnQty:当前隔夜仓数量,可以为0
unsigned int m_FrozenOvnQty:冻结的昨仓数量
unsigned int m_TodayQty:当前今仓数量,可能为0
unsigned int m_FrozenTodayQty:冻结的今仓数量
double m_OvnMargin:隔夜仓占用保证金
double m_TodayMargin:今仓占用的保证金
double m_PositionCost:持仓成本
EES_HedgeFlag m_HedgeFlag:仓位对应的投机套利标志
3、委托查询
virtual RESULT QueryAccountOrder(const char* accountId ) = 0 ;
virtual void OnQueryTradeOrder(const char* pAccount, EES_QueryAccountOrder* pQueryOrder, bool bFinish);
EES_UserID m_Userid:UserID
EES_Nanosecond m_Timestamp:订单创建时间,从1970年1月1日0时0分0秒开始的纳秒时间,使用ConvertFromTimestamp接口转换为可读时间
EES_ClientToken m_ClientOrderToken:订单token
EES_SideType m_SideType:订单方向
unsigned int m_Quantity:数量
EES_SecType m_InstrumentType:3,期货
EES_Symbol m_symbol:合约代码
double m_Price:价格
EES_Account m_account:账户
EES_ExchangeID m_ExchengeID:交易所代码,102=中金所
EES_OptExecFlag m_OptExecFlag:期权行权标志位
EES_MarketToken m_MarketOrderToken:REM系统订单号
EES_OrderStatus m_OrderStatus:订单状态
EES_Nanosecond m_CloseTime:订单关闭时间,从1970年1月1日0时0分0秒开始纳秒时间,使用ConvertFromTimestamp转换为可读时间
int m_FilledQty:成交数量
EES_OrderTif m_Tif:用户下单时指定的值
unsigned int m_MinQty:用户下单时指定的值
EES_CustomFieldType m_CustomField:用户下单时指定的值
EES_MarketOrderId m_MarketOrderId:交易所订单号
EES_HedgeFlag m_HedgeFlag:投机套利标志
4、成交查询
virtual RESULT QueryAccountOrderExecution(const char* accountId ) = 0 ;
virtual void OnQueryTradeOrderExec(const char* pAccount, EES_QueryOrderExecution* pQueryOrderExec, bool bFinish);
EES_UserID m_Userid:UserID
EES_Nanosecond m_Timestamp:成交时间,从1970年1月1日0时0分0秒开始的纳秒时间,使用ConvertFromTimestamp转换为可读时间
EES_ClientToken m_ClientOrderToken:订单token
EES_MarketToken m_MarketOrderToken:REM系统订单号
unsigned int m_ExecutedQuantity:成交量
double m_ExecutionPrice:成交价
EES_MarketToken m_ExecutionID:成交号
EES_MarketExecId m_MarketExecID
Hello CTP(七)——REM交易API相关推荐
- linux运行国信股票,国信期货CTP交易API接口开发服务
国信期货CTP交易API接口开发服务是一款国信期货CTP_API接口开发,适用于客户自行开发交易软件接入CTP呕吐,支持windows.Linux.IOS,对于未及时登录及断线造成的行情数据丢失,CT ...
- Hello CTP(四)——CTP交易API
一.CTP交易API简介 1.CTP交易API简介 CThostFtdcTraderApi交易API接口包含CThostFtdcTraderApi和CThostFtdcTraderSpi,通过CTho ...
- Python量化交易平台开发教程系列1-类CTP交易API的工作原理
原创文章,转载请注明出处:用Python的交易员 类CTP交易API简介 国内程序化交易技术的爆发式发展几乎就是起源于上期技术公司基于CTP柜台推出了交易API,使得用户可以随意开发自己的交易软件直接 ...
- 上海期货交易所CTP行情和交易接入
发布时间:2018-09-25 技术:C++11,动态库的制作 概述 CTP的接入Demo 详细 代码下载:http://www.demodashi.com/demo/14125.html 本文档不介 ...
- Asp.Net Web API 2第七课——Web API异常处理
Asp.Net Web API 2第七课--Web API异常处理 原文:Asp.Net Web API 2第七课--Web API异常处理 前言 阅读本文之前,您也可以到Asp.Net Web AP ...
- 使用交易API将产品添加到您的eBay商店
In this third and final part of our eBay Trading API series, we'll be building the product adding fu ...
- 好的股票程序化交易api接口模型该怎么做?
下面我们从几个方面来分享一下好的股票程序化交易api接口模型该怎么做? 1.用简单的哲理解决复杂的问题 我们都知道,时间是最珍贵的东西,它过去了就是过去了,不可能再回来了.所以我们今天的事情,不可以拖 ...
- 如何使用a股量化交易api接口?
在进行量化交易的需要的时候,可以考虑使用a股量化交易api接口作为分析工具. 如何使用a股量化交易api接口? 一是进行自主研发,不过这种办法费时费力,而且对技术也有一定要求. 第二种办法就是选择一个 ...
- 七年交易经验,倾囊分享中长线交易秘诀
自2010年开始投资股票基金,接着参与炒作沪深股市最后一只权证长虹CWB1,继而开始踏入A股市场,之后陆续参与了大宗商品期货.现货.艺术品金融电子盘.外汇交易,这漫长的七年交易之路确实经历许多波折.如 ...
- 如何学习调用股票量化交易API接口的方法?
对于股票量化交易API接口学习调用的方法,主要是从数字看点平台有丰富的API接口,它让应用程序可以轻松地使用另一个应用程序的数据和资源,把通用的.共性的应用功能进行模块化处理,让开发变的简单又快捷,即 ...
最新文章
- oracle 无效对象,Oracle编译用户无效对象
- logback 范例
- leetcode算法题--二进制求和
- oracle 加载数据戽_走进大数据丨 ETL - Load(数据加载)
- 第十九章 我国农村资金筹集
- 简单的故事品味生活,
- Android配置http请求
- 多线程打印ABCD顺序(带有线程池实现)
- python pyd_python pyd 加密相关
- JetBrains Rider如何更改前进 后退 快捷键,并加到工具栏(图文详情)
- 恒压板框过滤实验数据处理_内江靠谱压滤机板框-清源环保
- 全站仪坐标计算机公式,全站仪测量时,坐标n,e,z如何对应于图形坐标x,y,z?...
- Phonetic SymbolsRules of Pronunciation
- HEVC量化:色度QP值
- 极好的搜索引擎: Goolgle 本网站和www搜索插件
- 2022最全Java后端面试真题、两万字1000+道堪称史上最强的面试题不接受任何反驳
- MySQL中时间日期类型的使用
- 地球生命为啥只选择碳基生命,而不是硅基生命呢?
- openwrt ec20 4g网卡使用
- 修改Typora默认的字体为好看秀美的中文字体“华康手札体“并配置一些高级定制功能(20210404已成功测试)
热门文章
- 大数据与云计算概论简介
- 一文看懂中国的金融体系
- DiskGenius系统迁移(更换硬盘系统对拷)
- 金盾播放器android安卓,金盾高级视频加密系统跨平台播放器Android安卓安装步骤.doc...
- UVa Problem 10247 Complete Tree Labeling (完全树标号)
- gitgub常用按钮说明
- 详细解LeetCode 1284. Minimum Number of Flips to Convert Binary Matrix to Zero Matrix
- win10快捷截图录屏
- 此时墨迹在计算机上不起作用,win7系统自带截图工具不见了怎么找回
- 安装office2007 1706错误