Appearance
XTP Pro资金划拨接口的示例代码
目录
1. 请求资金划转的示例代码
1.1. 从XTP转出到柜台
cpp
/**XTPX::API::TraderApi* pUserApi ;//交易api的创建示例在此忽略
uint64_t session_id_ ;//登录成功后得到的会话
*/
void requestFundTransfer(XTPX::API::TraderApi* pUserApi, uint64_t session_id_)
{
XTPFundTransferReq fund_transfer;
memset(&fund_transfer, 0, sizeof(XTPFundTransferReq));
std::string stdstr_fund_account = "xxxxxxxxxxxxx";// 用户资金账户
strcpy_s(fund_transfer.fund_account, XTP_ACCOUNT_NAME_LEN, stdstr_fund_account.c_str());// 用户资金账户的字符串长度
fund_transfer.amount = 1000.0;//划转金额
fund_transfer.transfer_type = XTP_FUND_TRANSFER_OUT;//从XTP转出到柜台
uint64_t xtp_serial_id = pUserApi->FundTransfer(&fund_transfer, session_id_);//调用资金划转的接口,资金从XTP转出到主柜台
if (xtp_serial_id == 0)
{
//TODO:表示发送失败,可以使用GetApiLastError()获取失败原因
}
else
{
//TODO:资金划拨请求发送成功,可以记录下资金划拨订单号xtp_serial_id,以备使用
}
}1.2. 从柜台转入到XTP
cpp
/**XTPX::API::TraderApi* pUserApi ;//交易api的创建示例在此忽略
uint64_t session_id_ ;//登录成功后得到的会话
*/
void requestFundTransfer(XTPX::API::TraderApi* pUserApi, uint64_t session_id_)
{
XTPFundTransferReq fund_transfer;
memset(&fund_transfer, 0, sizeof(XTPFundTransferReq));
std::string stdstr_fund_account = "xxxxxxxxxxxxx";// 用户资金账户
strcpy_s(fund_transfer.fund_account, XTP_ACCOUNT_NAME_LEN, stdstr_fund_account.c_str());// 用户资金账户的字符串长度
fund_transfer.amount = 1000.0;//划转金额
fund_transfer.transfer_type = XTP_FUND_TRANSFER_IN;// 从柜台转入到XTP
uint64_t xtp_serial_id = pUserApi->FundTransfer(&fund_transfer, session_id_);// 调用资金划转的接口,资金从主柜台转入到XTP柜台
if (xtp_serial_id == 0)
{
//TODO:表示发送失败,可以使用GetApiLastError()获取失败原因
}
else
{
//TODO:资金划拨请求发送成功,可以记录下资金划拨订单号xtp_serial_id,以备使用
}
}1.3. 跨节点转出
cpp
/**XTPX::API::TraderApi* pUserApi ;//交易api的创建示例在此忽略
uint64_t session_id_ ;//登录成功后得到的会话
*/
//假设从本节点转出到上海节点
void requestFundTransfer(XTPX::API::TraderApi* pUserApi, uint64_t session_id_)
{
XTPFundTransferReq fund_transfer;
memset(&fund_transfer, 0, sizeof(XTPFundTransferReq));
std::string stdstr_fund_account = "xxxxxxxxxxxxx";// 用户资金账户
strcpy_s(fund_transfer.fund_account, XTP_ACCOUNT_NAME_LEN, stdstr_fund_account.c_str());// 用户资金账户的字符串长度
fund_transfer.amount = 1000.0;//划转金额,请先确认本节点的可用资金
fund_transfer.transfer_type = XTP_FUND_INTER_TRANSFER_OUT;// 跨节点转出 从本XTP节点1,转出到对端XTP节点2,XTP服务器之间划拨,只能是开通“一账号两中心”用户使用
fund_transfer.site = XTP_TRANSFER_SITE_SH;//目标节点是上海
uint64_t xtp_serial_id = pUserApi->FundTransfer(&fund_transfer, session_id_);// 调用资金划转的接口,资金从本服务器节点转出到双中心另一个节点
if (xtp_serial_id == 0)
{
//TODO:表示发送失败,可以使用GetApiLastError()获取失败原因
}
else
{
//TODO:资金划拨请求发送成功,可以记录下资金划拨订单号xtp_serial_id,以备使用
}
}1.4. 跨节点转入
cpp
/**XTPX::API::TraderApi* pUserApi ;//交易api的创建示例在此忽略
uint64_t session_id_ ;//登录成功后得到的会话
*/
//假设从深圳节点转入到本节点
void requestFundTransfer(XTPX::API::TraderApi* pUserApi, uint64_t session_id_)
{
XTPFundTransferReq fund_transfer;
memset(&fund_transfer, 0, sizeof(XTPFundTransferReq));
std::string stdstr_fund_account = "xxxxxxxxxxxxx";// 用户资金账户
strcpy_s(fund_transfer.fund_account, XTP_ACCOUNT_NAME_LEN, stdstr_fund_account.c_str());// 用户资金账户的字符串长度
fund_transfer.amount = 1000.0;//划转金额(最好先通过QueryOtherServerFund()查询对方节点的可用资金)
fund_transfer.transfer_type = XTP_FUND_INTER_TRANSFER_IN;// 跨节点转入 从对端XTP节点2,转入到本XTP节点1,XTP服务器之间划拨,只能是开通“一账号两中心”用户使用
fund_transfer.site = XTP_TRANSFER_SITE_SZ;
uint64_t xtp_serial_id = pUserApi->FundTransfer(&fund_transfer, session_id_);// 调用资金划转的接口,资金从双中心另一个节点转入到本服务器节点
if (xtp_serial_id == 0)
{
//TODO:表示发送失败,可以使用GetApiLastError()获取失败原因
}
else
{
//TODO:资金划拨请求发送成功,可以记录下资金划拨订单号xtp_serial_id,以备使用
}
}1.5. 跨节点转出融券卖出所得资金
cpp
/**XTP::API::TraderApi* pUserApi ;//交易api的创建示例在此忽略
uint64_t session_id_ ;//登录成功后得到的会话
*/
//从本节点转出到上海节点
void requestFundTransfer(XTP::API::TraderApi* pUserApi, uint64_t session_id_)
{
XTPFundTransferReq fund_transfer;
memset(&fund_transfer, 0, sizeof(XTPFundTransferReq));
std::string stdstr_fund_account = "xxxxxxxxxxxxx";// 用户资金账户
strcpy_s(fund_transfer.fund_account, XTP_ACCOUNT_NAME_LEN, stdstr_fund_account.c_str());// 用户资金账户的字符串长度
fund_transfer.amount = 1000.0;//划转融券卖出所得金额,请先确认本节点的融券卖出所得资金余额
fund_transfer.transfer_type = XTP_FUND_INTER_TRANSFER_REPAY_OUT;// 跨节点转出融券卖出所得资金 从本XTP节点1,转出到对端XTP节点2,XTP服务器之间划拨,只能是开通“一账号两中心”的信用用户使用
fund_transfer.site = XTP_TRANSFER_SITE_SH;//跨节点划拨必须要填写该字段
uint64_t xtp_serial_id = pUserApi->FundTransfer(&fund_transfer, session_id_);// 调用资金划转的接口,融券卖出所得资金从本服务器节点转出到双中心的另一个节点
if (xtp_serial_id == 0)
{
//TODO:表示发送失败,可以使用GetApiLastError()获取失败原因
}
else
{
//TODO:资金划拨请求发送成功,可以记录下资金划拨订单号xtp_serial_id,以备使用
}
}1.6. 跨节点转入融券卖出所得资金
cpp
/**XTP::API::TraderApi* pUserApi ;//交易api的创建示例在此忽略
uint64_t session_id_ ;//登录成功后得到的会话
*/
//从深圳节点转入到本节点
void requestFundTransfer(XTP::API::TraderApi* pUserApi, uint64_t session_id_)
{
XTPFundTransferReq fund_transfer;
memset(&fund_transfer, 0, sizeof(XTPFundTransferReq));
std::string stdstr_fund_account = "xxxxxxxxxxxxx";// 用户资金账户
strcpy_s(fund_transfer.fund_account, XTP_ACCOUNT_NAME_LEN, stdstr_fund_account.c_str());// 用户资金账户的字符串长度
fund_transfer.amount = 1000.0;//划转融券卖出所得金额(最好先通过QueryOtherServerFund()查询对方节点的融券卖出所得资金余额)
fund_transfer.transfer_type = XTP_FUND_INTER_TRANSFER_REPAY_IN;// 跨节点转入融券卖出所得资金 从对端XTP节点2,转入到本XTP节点1,XTP服务器之间划拨,只能是开通“一账号两中心”的信用用户使用
fund_transfer.site = XTP_TRANSFER_SITE_SZ;//跨节点划转,必须填写该字段
uint64_t xtp_serial_id = pUserApi->FundTransfer(&fund_transfer, session_id_);// 调用资金划转的接口,融券卖出所得资金从双中心另一个节点转入到本服务器节点
if (xtp_serial_id == 0)
{
//TODO:表示发送失败,可以使用GetApiLastError()获取失败原因
}
else
{
//TODO:资金划拨请求发送成功,可以记录下资金划拨订单号xtp_serial_id,以备使用
}
}1.7. 跨节点转出两融授信额度
cpp
/**XTPX::API::TraderApi* pUserApi ;//交易api的创建示例在此忽略
uint64_t session_id_ ;//登录成功后得到的会话
*/
//从本节点转出到上海节点
void requestFundTransfer(XTPX::API::TraderApi* pUserApi, uint64_t session_id_)
{
XTPFundTransferReq fund_transfer;
memset(&fund_transfer, 0, sizeof(XTPFundTransferReq));
std::string stdstr_fund_account = "xxxxxxxxxxxxx";// 用户资金账户
strcpy_s(fund_transfer.fund_account, XTP_ACCOUNT_NAME_LEN, stdstr_fund_account.c_str());// 用户资金账户的字符串长度
fund_transfer.amount = 1000.0;//划转的两融授信额度,请先确认本节点的两融授信额度
fund_transfer.transfer_type = XTP_FUND_INTER_TRANSFER_CONTRACT_OUT;// 跨节点转出两融授信额度 从本XTP节点1,转出到对端XTP节点2,XTP服务器之间划拨,只能是开通“一账号两中心”的信用用户使用
fund_transfer.site = XTP_TRANSFER_SITE_SH;//跨节点划拨必须填写该字段
uint64_t xtp_serial_id = pUserApi->FundTransfer(&fund_transfer, session_id_);// 调用资金划转的接口,将两融授信额度从本服务器节点转出到双中心另一个节点
if (xtp_serial_id == 0)
{
//TODO:表示发送失败,可以使用GetApiLastError()获取失败原因
}
else
{
//TODO:资金划拨请求发送成功,可以记录下资金划拨订单号xtp_serial_id,以备使用
}
}1.8. 跨节点转入两融授信额度
cpp
/**XTP::API::TraderApi* pUserApi ;//交易api的创建示例在此忽略
uint64_t session_id_ ;//登录成功后得到的会话
*/
//从深圳节点转入到本节点
void requestFundTransfer(XTP::API::TraderApi* pUserApi, uint64_t session_id_)
{
XTPFundTransferReq fund_transfer;
memset(&fund_transfer, 0, sizeof(XTPFundTransferReq));
std::string stdstr_fund_account = "xxxxxxxxxxxxx";// 用户资金账户
strcpy_s(fund_transfer.fund_account, XTP_ACCOUNT_NAME_LEN, stdstr_fund_account.c_str());// 用户资金账户的字符串长度
fund_transfer.amount = 1000.0;//划转的两融授信额度(最好先通过QueryOtherServerFund()查询对方节点的两融授信额度)
fund_transfer.transfer_type = XTP_FUND_INTER_TRANSFER_CONTRACT_IN;// 跨节点转入两融授信额度 从对端XTP节点2,转入到本XTP节点1,XTP服务器之间划拨,只能是开通“一账号两中心”的信用用户使用
fund_transfer.site = XTP_TRANSFER_SITE_SZ;//跨节点划拨必须填写该字段
uint64_t xtp_serial_id = pUserApi->FundTransfer(&fund_transfer, session_id_);// 调用资金划转的接口,两融授信额度从双中心另一个节点转入到本服务器节点
if (xtp_serial_id == 0)
{
//TODO:表示发送失败,可以使用GetApiLastError()获取失败原因
}
else
{
//TODO:资金划拨请求发送成功,可以记录下资金划拨订单号xtp_serial_id,以备使用
}
}2. 重写资金划转的回调函数逻辑
cpp
void OnFundTransfer(XTPFundTransferNotice *fund_transfer_info, XTPRI *error_info, uint64_t session_id)
{
string message;
if (error_info != NULL && error_info->error_id != 0)
{
//划转失败
message = string(" fund transfer is failed:") + to_string(error_info->error_id) + ": " + error_info->error_msg + "\n";
}
else
{
//TODO:可以根据GetClientIDByXTPID() == client_id来过滤自己的订单
uint8_t temp_client_id = pUserApi->GetClientIDByXTPID(fund_transfer_info->serial_id);
if (temp_client_id == client_id)//注意client_id为本程序中创建TraderApi时传入的client_id,用户需要自己定义修改
{
//TODO:此资金划拨订单由本程序发起的
}
else
{
//TODO:此资金划拨订单非本程序发起
}
//根据资金划拨订单的状态来处理自己的资金逻辑
switch(fund_transfer_info->oper_status)
{
case XTP_FUND_OPER_SUCCESS:
{
//TODO:根据资金划拨的方向,去做后续处理
if(fund_transfer_info->transfer_type == XTP_FUND_INTER_TRANSFER_IN)
message = string(" internal fund transfer is success: fund amount:") + to_string(fund_transfer_info->amount) + "\n";
break;
}
case XTP_FUND_OPER_FAILED:
{
message = string(" fund transfer is failed.\n");
break;
}
case XTP_FUND_OPER_PROCESSING:
{
message = string(" fund transfer is processing.\n");
break;
}
case XTP_FUND_OPER_SUBMITTED:
{
message = string(" fund transfer is arrived at the counter to centralized process.\n");
break;
}
default:
break;
}
}
cout << message;
}