华锐ATP Trade_API开发指南

发布于 2020-03-10 作者 luojian345 888次 浏览 版块 ATP-华锐核心交易平台

Archforce ATP Trade API Develop Guide

logo

文档目的

本文档是华锐金融技术股份有限公司对接华锐标准交易网关的API开发手册。

术语与缩略语

术语 说明
ATP 华锐核心交易执行平台
AGW 华锐标准网关
TE 华锐核心交易
QE 华锐查询服务

修订记录

日期 版本 修订人 说明 审核人

API说明

  • API对接华锐标准交易网关,使用C++11编写,运行环境为redhat7.4、gcc 4.8.5。
  • Windows 编译运行环境为windows7 64位, 使用visual studio 2017 编译。

ATPTradeAPI接口函数说明

ATPTradeAPI类在头文件 atp_trade_client.h 中定义

API函数调用流程

预备知识

  • ATPTradeAPI 类提供了交易api的初始化、登录、报单和查询等功能
  • ATPTradeHandler 类提供了交易相关的回调接口,用户需要继承该类并
    重载这些接口,以获取响应数据
  • ATPConnectProperty类提供了连接的配置参数
  • Connect为ATPTradeAPI的异步连接接口,入参为:ATPTradeHandler*,ATPConnectProperty

处理流程

  1. 实现ATPTradeHandler的派生类如DemoHandler,针对待实现的业务进行处理,如重写成交回报
    OnRspXXXTradeER函数、委托状态响应OnRspOrderXXXAck函数、事件处理函数OnXXX函数等;
  2. 调用Init函数进行初始化,此操作需在应在应用启动时调用且只需执行一次;
  3. 创建ATPTradeAPI对象实例(atp_api);
  4. 为Connect设置连接参数ATPConnectProperty,创建回调处理句柄对象(handler = new DemoHandler);
  5. atp_api调用Connect异步连接标准网关,会自动登陆网关进行相关会话流程;
  6. 登录网关成功后在handler回调OnLogin函数(或者其他事件回调函数),此时会话流程结束可以进行
    申报委托或查询;
  7. 调用atp_api对象实例进行相关业务ReqXXXOrder函数进行委托申报或查询;
  8. 当申报成功后,atp_api将会回调handler的回调函数,如委托状态响应、成交回报等;
  9. 当交易日完毕是,atp_api调用Close关闭连接;
  10. Stop停止;

API流程图

举例说明

#include <atp_trade_api.h>	
g_login_success = false;
g_exit = false ;
class DemoATPTradeHandler:public ATPTradeHandler
{
	public:
		/// 其他回调省略
		/// ...
		void DemoATPTradeHandler::OnLogin(const std::string& 	reason)
		{
			g_login_succes = true;
		}
		 void DemoATPTradeHandler::OnRspOrderStatusInternalAck
				(const ATPRspOrderStatusAckMsg& order_status_ack) 
		{
			/// TE委托状态响应
		}				
		void DemoATPTradeHandler::OnRspCashAuctionTradeER
				(const 	ATPRspCashAuctionTradeERMsg& cash_auction_trade_er)
		{
			/// 现货成交回报处理
		}
}	
int main()
{
	ATPTradeAPI atp_trade_api ;
	if (ATPTradeAPI::Init() != ErrorCode::kSuccess)
	{
		std::cout << "Init failed \n";
		return -1;
	}
	//ip 和端口
	std::string remote_ip = ip + ":" + std::to_string(port);
	std::vector<std::string> locations{ remote_ip };
	//设置连接信息
	ATPConnectProperty prop;
	prop.user = user;//登录AGW的账户
	prop.password = password;//登录AGW的密码
	//AGW IP地址 格式为:"ip:port"
	prop.locations = locations;
	//发送心跳的时间间隔,单位:毫秒,默认值:5000
	prop.heartbeat_interval_milli = 5000;
	//连接超时时间,单位:毫秒,默认值:5000 
	prop.connect_timeout_milli = 5000;
	//重试连接次数,默认值:连接地址数
	prop.reconnect_time = 10;
	//回报同步数据map<int32_t, int32_t>,默认值:空
	prop.report_sync = report_sync;			  
	// 异步连接
	ATPRetCodeType ec = 
		atp_trade_api.Connect(prop, new DemoATPTradeHandler);
	if (ec != ErrorCode::kSuccess)
	{
		std::cout << "Connect error:" << ec << std::endl;
		return -1;
	}
	while(!g_exit)
	{
		if(g_login_success) // 等待回调登录成功事件
		{
			ATPClientSeqIDType seq_id = GenerateClientSeqID();
			 ///< 开发自行管理生命周期
			ATPReqCashAuctionOrderMsg* p 
				= new ATPReqCashAuctionOrderMsg;
			strncpy(p->security_id, "000001",9);
			p->market_id = ATPMarketIDConst::kShenZhen ;
			//...相关赋值操作
			p->time_in_force = ATPTimeInForceConst::kGFD ;
		
			auto ec = atp_api.ReqCashAuctionOrder(p);
			if (ec != kSuccess)
			{
				std::cout << "ReqCashAuctionOrder Error" 
						<< ec << std::endl;
			}
			else
				g_exit = true ;
		}
	}
	// 等待回报
	std::this_thread::sleep_for(std::chrono::seconds(5));
	atp_trade_api.Close();
	ATPTradeAPI::Stop();
	return 0 ;
}

ErrorCode错误码说明

请查看err_code文档

Init函数

项目 说明
函数声明 static ErrorCode Init(const std::string&
cfg_path=“.”,const std::string& logdir
path=“”,bool record_all_flag = true)
函数说明 初始化API日志信息
返回值 0:为成功,其他为失败
参数说明 cfg_path:api配置文件路径(非流控版本填默认值即可);
log_dir_path:api日志路径
备注 api实例化前调用,应用内只需初始化一次即可

Stop函数

项目 说明
函数声明 static void Stop()
函数说明 停止API,停止后不能再创建atptradeapi实例,并进行相关操作
返回值 void
参数说明
备注 程序停止前调用

Connect函数

项目 说明
函数声明 ErrorCode Connect(const ATPConnectProperty&p
rop erty,ATPTradeHandler* handler)
函数说明 发起异步连接AGW
返回值 0[kSuccess]为成功,其他为失败
参数说明 properties[in] 连接参数设置handler[in] 事件回调处理
句柄

ATPConnectProperty参数说明

struct ATPConnectProperty 
{
    std::string user;///< 登录AGW的账户
    std::string password;///< 登录AGW的密码
    std::vector<std::string> locations;///< AGW IP地址 格式为:"ip:port"
    int32_t heartbeat_interval_milli;///< 发送心跳的时间间隔,单位:毫秒,默认值:5000
    int32_t connect_timeout_milli;///< 连接超时时间,单位:毫秒,默认值:5000 
    int32_t reconnect_time;///< 重试连接次数,默认值:连接地址数
    std::map<int32_t, int32_t>  report_sync;///< 回报同步数据map<int32_t, int32_t>,默认值:空
    std::string client_name ;///< 客户端名称
    std::string client_version;///< 客户端版本号
};

备注

  • Connect 中会校验参数(密码,ip等),方法调用成功只是发起异步连接请求成功,连接是否成功建立,需要从事件回调中判断。
  • Connect 非线程安全。网络断开后会根据设置的重连次数自动重连,只有kEndOfConnection事件触发后才不会自动重连。
    这时候才可以再次调用Connect函数去连接。
  • 连接后会自动登录和发送同步回报消息。
  • 网络断开后会重连当前断开的地址,如果没有连接成功,才会连接Locations中下一个地址。如果到最后的位置,会从头开始重连,
    例如Locations中有192.168.102.10:32001,192.168.102.11:32001,192.168.102.12:32001三个地址,当前连接的地址为
    192.168.102.10:32001,连接断开后会重连192.168.102.10:32001,如果没有连接成功, 再次重连的地址为192.168.102.11:32001;
  • 连接成功后会重置重连次数;
    > 注意:(ATPTradeAPI实例首次发起Connect时ATPConnectProperty.report_sync填空)

ATPTradeHandler回调句柄

开发者需实现此类的派生类并自行管理该对象的生命周期;ATPTradeAPI对象内部使用了该派生类对象的指针地址,因此在ATPTradeAPI
对象销毁前不能释放ATPTradeHandler派生类对象实例;

Connect调用后的API内部会话流程

API会话连接流程
- 当Connect触发后,由atptradeapi内部进行使用ATPConnectProperty.user/password发送登录请求到网关进行登陆请求;
- 当AGW对user/password等校验通过后,返回登录响应;
- ATPTradeAPI内部收到登录响应后,将会发送回报同步请求;
- AGW收到ATPTradeAPI的回报同步请求,根据回报同步中的分区以及索引信息确认下行断点,并将断点后的回报信息推送给ATPTradeAPI,
当推送完后给ATPTradeAPI推送回报同步结束消息;
- ATPTradeAPI收到回报消息并对消息进行回调给客户端;当收到回报同步结束消息后确认消息全部收完则触发OnLogin事件给客户
端,此时客户端可以申报委托;
- ATPTradeAPI内部与AGW之间一直保持心跳,心跳为双向定时发送的;如超过3倍心跳时间未收到对方心跳则会心跳超时断开连接;
- 当客户端调用Close函数时,发送Logout消息收到应答后断开连接;
- 如ATPTradeAPI内部触发的各类事件将会通过对应的回调函数响应给客户端;

Close函数

项目 说明
函数声明 ErrorCode Close()
函数说明 异步关闭连接
返回值 0 为成功,其他为失败
参数说明
备注 调用Close关闭后最终会触发kEndOfConnection事件,
不会再自动重连

委托类函数

ReqXXXOrder函数

每种不同的业务类型使用不同的函数进行申报

业务委托处理流程

业务委托处理流程
- 客户端使用atptradeapi实例对象调用对应业务的接口(ReqXXXOrder)进行委托申报;
- ATP交易核心接收到订单后,将推送客户端内部委托状态响应并将订单报送交易所;
- ATPTradeAPI接收到委托状态响应则调用OnRspOrderStatusInternalAck函数进行响应给客户端;
- 当交易返回确认回报给ATP交易核心,交易核心将推送委托状态响应返回给atptradeapi;
- 由ATPTradeAPI通过OnRspOrderStatusAck响应给客户端;
- 当ATP接收成交回报处理后并推送给API,由ATPTradeAPI调用对应业务的成交回报回调函数
(OnRspXXXTradeER)响应给客户端;

举例

现货委托申报

void SendCashOrder()
{
	ATPClientSeqIDType seq_id = GenerateClientSeqID();
		///< 开发自行管理生命周期
	ATPReqCashAuctionOrderMsg* p = new ATPReqCashAuctionOrderMsg;

	strncpy(p->security_id, "000001",9);
	p->market_id = ATPMarketIDConst::kShenZhen ;
	strncpy(p->cust_id,"9999999999999999",17);
	strncpy(p->fund_account_id, "9999999999999999",17);
	strncpy(p->account_id, "012345678901",13);
	p->side = ATPSideConst::kBuy ;
	p->order_type = ATPOrdTypeConst::kFixed;
	p->price = 99.12 * 10000 ; ///< 价格需要放大10000倍
	p->order_qty = 1000 ;
	p->client_seq_id = seq_id;
	p->order_way = ATPOrderWayConst::kInternet ;
	strncpy(p->user_info, "private info",17);
	strncpy(p->password, "cust password",129);
	p->enforce_flag = ATPEnforceFlagConst::kDefault ;
	p->stop_px = 0 ;
	p->min_qty = 0 ;
	p->max_price_levels = 0 ;
	p->time_in_force = ATPTimeInForceConst::kGFD ;

	auto ec = atp_api.ReqCashAuctionOrder(p);
	if (ec != kSuccess)
	{
		std::cout << "ReqCashAuctionOrder Error" << ec << std::endl;
		std::this_thread::sleep_for(std::chrono::seconds(5));
	}
}

查询类函数

每种不同查询使用不同的函数处理对应查询结果存在唯一的回调函数;

查询流程图

查询流程
- 客户端使用ATPTradeAPI实例对象调用相应的查询接口(ReqXXXQuery)进行查询;
- ATP查询核心接收到查询请求后,将将查询的结果信息推送给ATPTradeAPI;
- ATPTradeAPI接收到查询消息后则调用OnRspXXXQueryResult函数响应给客户端;
注意:ATP某些查询消息属于分页查询如订单查询、成交查询等;
此类查询消息需客户端根据返回查询结果判断是否还有记录没有返回,
如存在则需更新查询报文的索引并发送查询消息;
判断是否返回所有的条件为:lastindex+1 == totalnum

事件回调接口ATPTradeHandler说明

会话事件回调函数

OnConnected函数

项目 说明
函数声明 virtual void OnConnected(const std::string& rea
son)
函数说明 Tcp连接建立成功的回调
参数说明 reason: 成功

OnConnectFailure函数

项目 说明
函数声明 virtual void OnConnectFailure(const std::string
& reason)
函数说明 Tcp连接建立失败
参数说明 reason: 失败原因

OnConnectTimeOut函数

项目 说明
函数声明 virtual void OnConnectTimeOut(const std::string
& reason)
函数说明 连接超时,指定的的时间内没有成功连agw触发
参数说明 reason: 超时原因

OnHearbeatTimeOut函数

项目 说明
函数声明 virtual void OnHeartbeatTimeOut(const std::stri
ng& reason)
函数说明 接收心跳超时,指定时间内没有收到心跳触发
参数说明 reason: 心跳超时

OnLogin函数

项目 说明
函数声明 virtual void OnLogin(const std::string& reason)
函数说明 登录AGW成功
参数说明 reason: 成功

OnLogout函数

项目 说明
函数声明 virtual void OnLogout(const std::string& reason
)
函数说明 登出AGW
参数说明 reason: 登出原因1. 用户名或密码错误;
2.当前用户已经登录3. 登录的网关非主网关;
4.回报同步分区号或索引号错误;

OnEndOfConnection函数

项目 说明
函数声明 virtual void OnEndOfConnection(const std::strin
g&reason)
函数说明 重连失败重连次数使用完毕或者主动调用Close
函数,
此事件触发后需要主动调用Connect进行重连
参数说明 reason: 原因

OnError函数

项目 说明
函数声明 virtual void OnError(const std::string& reason)
函数说明 ATPTradeAPI内部错误
参数说明 reason: 原因

OnClosed函数

项目 说明
函数声明 virtual void OnClosed(const std::string& reason)
函数说明 连接关闭事件
参数说明 reason: 连接关闭原因

OnLog函数

项目 说明
函数声明 virtual void OnLog(LogLevel level,const std::str
ing& message)
函数说明 日志回调接口,api处理的日志通过该接口打印
返回值
参数说明 level日志级别;message日志内容
备注 日志级别LogLevel有以下几种:kTrace,kDebug,
kInfo,kWarn,kError,kFatal

OnRspXXX 业务回调函数

委托状态响应回调函数

  • OnRspOrderStatusInternalAck 为TE组件返回对委托的委托状态响应消息;
  • OnRspOrderStatusAck 为交易所返回对委托状态响应消息;

  • 举例 TE委托状态响应

    // 需关使用cust_id、client_seq_id 找寻原始委托
    // 建立cust_id、cl_ord_no与cust_id、client_seq_id的映射关系
    void DemoATPTradeHandler::OnRspOrderStatusInternalAck
    	(const ATPRspOrderStatusAckMsg& order_status_ack)
    {
    	std::cout << "order_status_ack : " << std::endl;
    	std::cout << "partition : " << (int32_t)order_status_ack.partition <<
    	 	" index : " << order_status_ack.index <<
    	 	" business_type : " << (int32_t)order_status_ack.business_type <<
    		" cl_ord_no : " << order_status_ack.cl_ord_no <<
    		" security_id : " << order_status_ack.security_id <<
    		" market_id : " << order_status_ack.market_id <<
    		" exec_type : " << order_status_ack.exec_type <<
    		" ord_status : " << (int32_t)order_status_ack.ord_status <<
    	" cust_id : " << order_status_ack.cust_id <<
    		" fund_account_id : " << order_status_ack.fund_account_id <<
    		" account_id : " << order_status_ack.account_id <<
    		" price : " << order_status_ack.price <<
    		" order_qty : " << order_status_ack.order_qty <<
    		" leaves_qty : " << order_status_ack.leaves_qty <<
    		" cum_qty : " << order_status_ack.cum_qty <<
    		" side : " << order_status_ack.side <<
    		" transact_time : " << order_status_ack.transact_time <<
    		" user_info : " << order_status_ack.user_info <<
    		" order_id : " << order_status_ack.order_id <<
    	" cl_ord_id : " << order_status_ack.cl_ord_id <<
    		" client_seq_id : " << order_status_ack.client_seq_id <<
    		" orig_cl_ord_no : " << order_status_ack.orig_cl_ord_no <<
    		" frozen_trade_value : " << order_status_ack.frozen_trade_value <<
    		" frozen_fee : " << order_status_ack.frozen_fee <<
    		" reject_reason_code : " << order_status_ack.reject_reason_code <<
    		" ord_rej_reason : " << order_status_ack.ord_rej_reason <<
    		" order_type : " << order_status_ack.order_type <<
    		" time_in_force : " << order_status_ack.time_in_force <<
    		" position_effect : " << order_status_ack.position_effect <<
    		" covered_or_uncovered : " << (int32_t)order_status_ack.covered_or_uncovered <<
    		" account_sub_code : " << order_status_ack.account_sub_code << std::endl;
    }
    

成交回报回调函数

  • OnRspXXXTradeER 为对应业务的成交回报消息;如现货成交回报消息:OnRspCashAuctionTradeER
  • 举例现货成交回报

    /// 根据cust_id、cl_ord_no寻找原始委托
    void DemoATPTradeHandler::OnRspCashAuctionTradeER
    (const  ATPRspCashAuctionTradeERMsg& cash_auction_trade_er)
    {
    std::cout << "cash_auction_trade_er : " << std::endl;
    std::cout << "partition : " << (int32_t)cash_auction_trade_er.partition <<
        " index : " << cash_auction_trade_er.index <<
        " business_type : " <<(int32_t)cash_auction_trade_er.business_type <<
        " cl_ord_no : " << cash_auction_trade_er.cl_ord_no <<
        " security_id : " << cash_auction_trade_er.security_id <<
        " market_id : " << cash_auction_trade_er.market_id <<
        " exec_type : " << cash_auction_trade_er.exec_type <<
        " ord_status : " << (int32_t)cash_auction_trade_er.ord_status <<
    " cust_id : " << cash_auction_trade_er.cust_id <<
        " fund_account_id : " << cash_auction_trade_er.fund_account_id <<
        " account_id : " << cash_auction_trade_er.account_id <<
        " price : " << cash_auction_trade_er.price <<
        " order_qty : " << cash_auction_trade_er.order_qty <<
        " leaves_qty : " << cash_auction_trade_er.leaves_qty <<
        " cum_qty : " << cash_auction_trade_er.cum_qty <<
        " side : " << cash_auction_trade_er.side <<
        " transact_time : " << cash_auction_trade_er.transact_time <<
        " user_info : " << cash_auction_trade_er.user_info <<
        " order_id : " << cash_auction_trade_er.order_id <<
        " cl_ord_id : " << cash_auction_trade_er.cl_ord_id <<
        " exec_id : " << cash_auction_trade_er.exec_id <<
        " last_px : " << cash_auction_trade_er.last_px <<
        " last_qty : " << cash_auction_trade_er.last_qty <<
        " total_value_traded : " << cash_auction_trade_er.total_value_traded <<
        " fee : " << cash_auction_trade_er.fee <<
        " cash_margin : " << cash_auction_trade_er.cash_margin << std::endl;
    }
    

    查询结果回调函数

  • OnRspXXXQueryResult 对应的查询结果消息,如:OnRspMaxOrderQueryResult

  • 举例 最大可委托数查询结果

    void DemoATPTradeHandler::OnRspMaxOrderQueryResult
    (const ATPRspMaxOrderQueryResultMsg& max_order_query_result)
    {
    std::cout << "max_order_query_result : " << std::endl;
    std::cout << "cust_id : " << max_order_query_result.cust_id<<
        " fund_account_id : " << max_order_query_result.fund_account_id<<
        " account_id : " << max_order_query_result.account_id<<
        " client_seq_id : " << max_order_query_result.client_seq_id<<
        " query_result_code : " << max_order_query_result.query_result_code<<
        " user_info : " << max_order_query_result.user_info<<
        " max_order_qty : " << max_order_query_result.max_order_qty<<
        " theoretical_order_qty : " << max_order_query_result.theoretical_order_qty 
        << std::endl;
    }
    

ATPTradeAPI 回报同步机制

  • 目标:保证委托不重不丢

预备知识

  • AGW主备缓存了下行所有的委托状态响应、成交回报信息,并且顺序相同;
  • AGW缓存是按照连接用户名ATPConnectProperty.user分类的;所以如果客户端在调用Connect时需要保持用户名不变;
  • 客户端需记录委托状态响应、成交回报中的分区和索引信息,用于Connect时定位断点信息;
  • ATPTradeAPI 内部储存委托列表,当收到该笔委托的委托状态响应后从该列表中移除;
    注意:(第一次时发起Connect时report_sync填空)

回报同步流程

  • 客户端发起Connect后,ATPTradeAPI内部进行使用ATPConnectProperty.user/password发送登录请求到AGW;
  • 当AGW对user/password等校验通过后,返回成功登录响应;
  • ATPTradeAPI内部收到登录响应后,将会发送回报同步请求,此请求中包含用户在Connect中设置的
    ATPConnectProperty.report_sync信息;
  • AGW收到ATPTradeAPI的回报同步请求,根据回报同步中的分区以及索引信息确认下行断点,并将断点后的委托状态响应、
    回报信息推送给ATPTradeAPI;
  • ATPTradeAPI根据委托状态响应中的用户系统消息序号更新委托列表;
  • AGW推送该登录用户下所有的委托状态响应、成交回报后,立即发送回报同步结束消息;
  • ATPTradeAPI接收回报同步结束消息,确认未申报委托断点并立即申报;当申报完毕后出发OnLogin事件给客户端,
    此时客户端可以申报委托;


ATPTradeAPI自动重连机制

  • ATPTradeAPI内部自动重连;
  • 调用者需在Connect接口入参ATPConnectProperty中的配置重连次数;
  • ATPConnectProperty.Locations 中第一个为AGW主的地址,其他为备的地址;

重连机制

  • ATPTradeAPI与AGW之间的连接断开后,ATPTradeAPI会重连当前断开的地址;
  • 如果没有连接成功才会连接ATPConnectProperty.Locations中下一个地址;
  • 如果到最后的位置会从头开始重连;
  • 如重连次数使用完毕,则会触发OnEndOfConnect回调函数;此时客户端应更新ATPConnectProperty.report_sync
    并重新发起连接Connect;
  • 注意: 当客户端重新调用Connect时 ATPConnectProperty的其他的配置参数不能修改,尤其是
    ATPConnectProperty.user,不然可能存在订单丢失情况;
  • 注意:ATPTradeAPI重连时每五秒发起一次;客户端也可以自行控制重连即将重连次数配置为0
    即ATPConnectProperty.reconnect_time=0;

客户端故障重启

  • 客户端因故障重启;此时客户端所有的订单信息全部丢失;
  • 方式一:客户端可以直接按照ATPTradeAPI调用流程进行登陆,之后在进行分页做委托查询来重构委托列表;
  • 方式二:客户端在此种情况下调用Connect时可使用特殊的分区索引信息即:ATPConnectProperty.report_sync
    中只设置(0,-1);此时在登录的过程中AGW将推送所有的回报信息给客户端,由客户端重构委托列表;
  • 注意 因客户端故障重启存在委托丢失的情况;即在发送给AGW(含未发送或者在途中的)的委托。

ATPTradeAPI开发包信息

  1. 打包好后的api包文件名举例(日期为实际发布日期):
    atp_trade_api_xxx.tar.gz

  2. 解压:
    tar -cxf atp_trade_api_xxx.tar.gz

  3. 解压后可看到atp_trade_api有include、lib、demo三个目录:
    include中为api使用和依赖的头文件

项目 说明
atp_trade_api.h 主头文件,开发者直接包含此头文件即可
trade/atp_trade_client.h API接口的定义和说明
trade/atp_trade_handler.h 回调处理句柄
trade/atp_trade_constants.h 业务消息枚举类型定义说明
trade/atp_trade_msg.h 业务消息的定义说明
trade/atp_trade_types.h 类型定义

lib中为ATPTradeAPI使用和依赖的库文件

项目 说明
libatptradeapi.so ATPTradeAPI库文件
libagwapi.so ATPTradeAPI通信层库文件
libagw_external_msg.so 协议编解码库文件
libdes.so 加密库文件
libmsg_proto_gw.so 协议编解码基础库文件

demo为demo程序

项目 说明
main.cpp demo程序入口
demo_handler.h/cpp 回调处理句柄
demo_send_order.h/cpp 委托发送函数定义与实现
cmdline.h 命令行解析文件

编译运行demo

编译和运行demo程序(linux)

本文档提供了一个简单的demo程序。

使用make或者boost b2编译

  • cd agw_api_auth/demo
  • 方式一、使用boost b2编译
    执行b2需要boost环境,以及配置ATP_RES_ROOT环境变量即API开发包的解压路径,此种模式需要自行下载boost_1.62.0版本;

  • 方式二、make 即可

运行

然后在Release目录下执行如下命令
./agw_api_demo -h 查看对应的命令并设置参数值

编译和运行demo程序 (Windows)

待续

收藏
分享
2回复
ccyin1楼•2020-03-18

来赞一个

jim80s2楼•2020-03-27

有pdf或者doc文档吗?