现在量化市场范围越来越大,各种量化系统也是普遍性的了,不过米匡量化这个开发系统通常是由交易接口的专业开发团队开发的的结果,那么米匡量化的终端又是是怎么开发成功的呢?
首先,我们可以从api接口的调用来了解,量化交易其实不难发现,有的平台可以直接就能策略优化,而米匡量化可以直接代码执行策略,如下分析:
1.开发api对于的结果:
签名 | int Init(); |
功能 | API 初始化 |
参数 | 无 |
返回值 | 授权成功的交易账户数量 返回值< 1 时, 无需调用 Deinit 接口, 也不能调用其它接口, 否则会出错! |
签名 | void Deinit(); |
功能 | API 反初始化 |
参数 | 无 |
返回值 | 无 |
2.米匡量化系统调用结果:
签名 | int Logon(const char* Ip, short Port, const char* Version, short Yybid, const char* Account, const char* TradeAccount, const char* JyPassword, const char* TxPassword, char* ErrorInfo); | |
功能 | 登录交易账户 | |
参数 | Ip | 券商交易服务器IP, 注意区分普通和两融 |
Port | 券商交易服务器端口, 注意区分普通和两融 | |
Version | 客户端的版本号, 一般为空字符串 |
| Yybid | 营业部代码, 一般为 0 |
Account | 登录账号,一般为券商的资金账号或客户号 注: 两融账号需要额外添加 .C 结尾, 如 123456 变为 123456.C | |
TradeAccount | 交易账号, 一般与登录账号相同, 但无需额外添加 .C 结尾 可登录券商软件, 查看股东列表, 股东列表内的资金账号就是交易账号 | |
JyPassword | 交易密码 | |
TxPassword | 通讯密码, 一般为空字符串或与交易密码相同 | |
ErrorInfo | 错误信息, 需要分配 256 字节的空间 | |
返回值 | 调用成功: 客户端 Id 调用失败: 返回 <= 0 |
3.执行源码分享:
查询各类交易数据:
// 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;
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;