现在股票买卖接口主要是在线上研发,有专业的开发团队进行源码开发和完善,但是,常常会在开发过程中出现问题,也就是遇到一些特殊的情况需要及时处理,那么股票买卖接口怎么开发实现出来的?
一、股票买卖接口开发分析:
基本函数 | Init | API 初始化 |
| Deinit | API 反初始化 |
| Logon | 登录交易账户 |
| Logoff | 登出交易账户 |
| QueryData | 查询各类交易数据 |
| QueryHistoryData | 查询各类历史数据 |
| SendOrder | 委托下单 |
| CancelOrder | 委托撤单 |
| GetQuote | 获取五档报价 |
| Repay | 融资融券账户直接还款 |
| GetExpireDate | 查询API 授权到期日期 |
| ||
单账户批量函数 | QueryDatas | 单账户批量查询各类交易数据 |
| SendOrders | 单账户批量下单 |
| CancelOrders | 单账户批量撤单 |
| GetQuotes | 单账户批量获取五档报价 |
| ||
多账户批量函数 | QueryMultiAccountsDatas | 多账户批量查询各类交易数据 |
| SendMultiAccountsOrders | 多账户批量下单 |
| CancelMultiAccountsOrders | 多账户批量撤单 |
| GetMultiAccountsQuotes | 多账户批量获取五档报价 |
二、接口函数的调用:
相关函数 | 调用结果 |
Deinit Logoff | 无 |
| |
Init | 返回值为授权成功的交易账户数量 返回值< 1 时, 无需调用 Deinit 接口, 也不能调用其它接口, 否则会出错! |
| |
Logon | 调用成功: 返回值为 客户端 Id 调用失败: 返回值 <= 0 |
参数ErrorInfo 保存错误信息, 需要分配 256 字节的空间 | |
| |
GetExpireDate | 返回值为API 授权到期日期 |
| 格式为yyyymmdd 整数, 如 2018 年 5 月 1 日为 20180501 |
| |
单项操作 | 调用成功: ErrorInfo 为空字符串 |
QueryData | 调用失败: ErrorInfo 为错误信息 |
QueryHistoryData | 参数Result 保存操作结果, 需要分配 1024*1024 字节的空间 |
SendOrder | Result 格式为表格数据, 每一行通过换行符\n 分割,每一列通过制表符\t 分割 |
CancelOrder | 例子: |
GetQuote | 股东代码\t 股东名称\t 帐号类别\t 保留信息\n |
Repay | 12345678\t\t0\t 信息 1\n |
| 87654321\t\t2\t 信息 2 |
| 注: 不同券商返回的字段会有所不同 |
最后,股票买卖接口接入源代码就能快速的掌握账户持仓原理:
查询各类交易数据源码:
// category: 0=>资金, 1=>股份, 2=>当日委托, 3=>当日成交, 4=>可撤单,
// 5=>股东代码, 6=>融资余额, 7=>融券余额, 8=>可融证券,
// 12=>可申购新股, 13=>新股申购额度, 14=>配号, 15=>中签,
// 16=>未平仓融资合约, 17=>未平仓融券合约, 18=>未平仓两融合约
typedef void (*QueryDataProc)(int clientId, int category, char *result, char *errinfo);
const auto QueryData = reinterpret_cast<QueryDataProc>(GetProcAddress(hDLL, "QueryData"));
assert(QueryData);
std::cout << "========== 查询资金: category = 0 ==========\n";
int category = 0;
QueryData(clientId, category, result, errinfo);
if (NULL != errinfo[0]) {
std::cout << errinfo << std::endl;
} else {
std::cout << result << std::endl;
}
std::cout << std::endl;
std::cout << "========== 查询股份: category = 1 ==========\n";
category = 1;
QueryData(clientId, category, result, errinfo);
if (NULL != errinfo[0]) {
std::cout << errinfo << std::endl;
} else {
std::cout << result << std::endl;
}
std::cout << std::endl;