什么是股票委托接口?相信大家对这些做股票量化交易接口系统都有一定是了解,其实股票委托接口是一些预先定义的接口,如函数与HTTP接口,以及api接口等这些,或指软件系统不同组成部分衔接的协议,用来提供应用程序与开发人者基于某一款软件或硬件得以访问的一组例程,同时也不需要访问源码等一些开发细节,它是针对股票交易市场专用的交易接口系统而已。就比如说说它的调用定义的功能:
一、API 调用结果说明:
相关函数 | 调用结果 |
Deinit Logoff | 无 |
Init | 返回值为 授权成功的交易账户数量 返回值 < 1 时, 无需调用 Deinit 接口, 也不能调用其它接口, 否则会出错! |
Logon | 调用成功: 返回值为 客户端 Id 调用失败: 返回值 <= 0 |
参数 ErrorInfo 保存错误信息, 需要分配 256 字节的空间 | |
GetExpireDate | 返回值为 API 授权到期日期 |
二、单项和批量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 | |
注: 不同券商返回的字段会有所不同 | |
参数 ErrorInfo 保存错误信息, 需要分配 256 字节的空间 | |
批量操作 | 批量操作的参数通过数组方式传入, 用下标区分每项操作 |
QueryDatas | 第 i 项操作调用成功: ErrorInfo[i]为空字符串 |
SendOrders | 第 i 项操作调用失败: ErrorInfo[i]为错误信息 |
CancelOrders | 参数 Result[]保存批量操作结果, Result[i]保存第 i 项操作结果 |
GetQuotes | 每项操作结果需要分配 1024*1024 字节的空间 |
QueryMultiAccountsDatas | 每项操作结果的格式可参阅[Result 格式] |
SendMultiAccountsOrders | 参数 ErrorInfo[]保存批量错误信息, ErrorInfo[i]保存第 i 项错误信息 |
CancelMultiAccountsOrders | 每项错误信息需要分配 256 字节的空间 |
GetMultiAccountsQuotes | |
三、API 接口说明
签名 | int Init(); |
功能 | API 初始化 |
参数 | 无 |
返回值 | 授权成功的交易账户数量 返回值 < 1 时, 无需调用 Deinit 接口, 也不能调用其它接口, 否则会出错! |
签名 | void Deinit(); |
功能 | API 反初始化 |
参数 | 无 |
返回值 | 无 |
不过,目前随着量化投资的发展,用它来投资A股市场也是一样的道理,在股票委托接口可以直接调用接口来执行交易者自己制定的策略,一步一步的执行,也就是程序化自动交易。具体实现过程起到的作用为以下五点:
(1)在A股市场上对所有期权实时行情数据都可以支持代码进行筛选,也就是自动选期权品种。
(2)支持所有A股实时行情数据查询,包含期权实时行情交易多项指标数据;
(3)它有毫秒级查询性能;
(4)数据持续更新与维护;例如全接口支持 HTTPS、全面兼容 Apple ATS、全国多节点 CDN 部署;
(5)接口响应速度快,就比如多台服务器构建 API 接口负载都能均衡状态;与此同时,接口调用状态与状态监控都可以自动执行,股票委托接口自然就自助委托下单成功了。
股票委托接口部分常见使用到的源代码:
// 加载DLL
HINSTANCE hDLL = LoadLibraryA("MetaTrade.dll");
assert(hDLL);
// 初始化
typedef int (*InitProc)();
const auto Init = reinterpret_cast<InitProc>(GetProcAddress(hDLL, "Init"));
assert(Init);
const int authorizedCount = Init(); // 已授权账号数量
assert(authorizedCount > 0);
std::cout << "已授权账号数量: " << authorizedCount << std::endl;
std::cout << std::endl;
// 接收缓冲区, 用于接收返回结果和错误信息
auto resultBuf = std::make_unique<char[]>(1024 * 1024);
auto errinfoBuf = std::make_unique<char[]>(256);
char *const result = resultBuf.get();
char *const errinfo = errinfoBuf.get();
// 登录 接口支持普通交易和两融交易账号, 以下例子使用两融账号
typedef int (*LogonProc)(const char *ip, short port, const char *version,
short yybid, const char *account,
const char *tradeAccount, const char *jyPassword,
const char *txPassword, char *errinfo);
const auto Logon = reinterpret_cast<LogonProc>(GetProcAddress(hDLL, "Logon"));
assert(Logon);
std::string ip = "1.2.3.4"; // 券商IP(注意区分两融和普通)
short port = 5678; // 券商端口(注意区分两融和普通)
std::string version = ""; // 版本号: 一般填空
short yybid = 0; // 营业部ID: 一般填0
std::string account = "12345678.C"; // 登录账号: 两融账号需添加.C结尾
std::string tradeAccount = "12345678"; // 交易账号: 一般与登录账号相同, 但不需添加.C结尾
std::string jyPassword = "password"; // 交易密码
std::string txPassword = ""; // 通讯密码: 一般填空
const int clientId = Logon(ip.c_str(), port, version.c_str(), yybid,
account.c_str(), tradeAccount.c_str(),
jyPassword.c_str(), txPassword.c_str(), errinfo);
assert(clientId >= 0);
std::cout << "登录成功, client = " << clientId << std::endl;
std::cout << std::endl;
执行示例: