通达信程交易接口 以API形式来执行下单接口,一般不再需要通过接口系统之间进行连接,通过直接调用通达信dll交易函数的方式直接进行交易,包括下单,撤单,查询资金股份、当日委托、当日成交等方面都能很快的执行出来。
以api的形式调用接口来办理执行下单,比如借用开发的api接口的开发文档:
一、api的调用结果:
相关函数 | 调用结果 |
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 |
| 注: 不同券商返回的字段会有所不同 |
| 参数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 |
二、通达信交易接口执行下单程序源码分享:
// 加载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;
