分享

通达信客户端程序化下单

 dinghj 2019-04-05

通达信是股票市场上最常用的客户端之一,几乎所有的券商都有通达信客户端,而很多朋友在盘中都想有一个自己的下单程序。下面从2方面探讨一下通过通达信自动化下单的办法:

一、利用模拟按键类程序

利用通达信的客户端界面本身,获取各个控件的类型和实例名,通过AUTOIT等脚本程序实现通达信客户端的自动化下单。此种方法简单方便,都是通过windows的库函数的调用来模拟消息,从而实现自动化下单。但是此方法只可用于代替人手工敲单而已,盘中需要人盯盘、同时将股票提前写入脚本或者配置文件中,时效性太差。

二、利用网络上流出的通达信接口进行二次编程开发。

先贴出可调用的方法

  1. /// 打开通达信实例
  2. /// </summary>
  3. [DllImport("tdxtraderapi.dll", CharSet = CharSet.Ansi)]
  4. public static extern void OpenTdx();
  5. /// <summary>
  6. /// 关闭通达信实例
  7. /// </summary>
  8. [DllImport("tdxtraderapi.dll", CharSet = CharSet.Ansi)]
  9. public static extern void CloseTdx();
  10. /// <summary>
  11. /// 交易账户登录
  12. /// </summary>
  13. /// <param name="IP">券商交易服务器IP</param>
  14. /// <param name="Port">券商交易服务器端口</param>
  15. /// <param name="Version">设置通达信客户端的版本号:6.00或8.00</param>
  16. /// <param name="YybId">营业部编码:国泰君安为7</param>
  17. /// <param name="AccountNo">资金账号</param>
  18. /// <param name="TradeAccount">交易账号与资金账号相同</param>
  19. /// <param name="JyPassword">交易密码</param>
  20. /// <param name="TxPassword">通讯密码为空</param>
  21. /// <param name="ErrInfo">此API执行返回后,如果出错,保存了错误信息说明。一般要分配256字节的空间。没出错时为空字符串</param>
  22. /// <returns>客户端ID,失败时返回-1。正确时为从0开始按登陆次数叠加</returns>
  23. [DllImport("tdxtraderapi.dll", CharSet = CharSet.Ansi)]
  24. public static extern int Logon(string IP, short Port, string Version, short YybId, string AccountNo, string TradeAccount, string JyPassword, string TxPassword, StringBuilder ErrInfo);
  25. /// <summary>
  26. /// 交易账户注销
  27. /// </summary>
  28. /// <param name="ClientID">客户端ID</param>
  29. [DllImport("tdxtraderapi.dll", CharSet = CharSet.Ansi)]
  30. public static extern void Logoff(int ClientID);
  31. /// <summary>
  32. /// 融资融券直接还款
  33. /// </summary>
  34. /// <param name="ClientID">客户端ID</param>
  35. /// <param name="Amount">还款金额</param>
  36. /// <param name="Result">同上</param>
  37. /// <param name="ErrInfo">同上</param>
  38. [DllImport("tdxtraderapi.dll", CharSet = CharSet.Ansi)]
  39. public static extern void Repay(int ClientID, string Amount, StringBuilder Result, StringBuilder ErrInfo);
  40. /// <summary>
  41. /// 查询各种历史数据
  42. /// </summary>
  43. /// <param name="ClientID">客户端ID</param>
  44. /// <param name="Category">表示查询信息的种类,0历史委托 1历史成交 2交割单</param>
  45. /// <param name="StartDate">表示开始日期,格式为yyyyMMdd,比如2014年3月1日为 20140301</param>
  46. /// <param name="EndDate">表示结束日期,格式为yyyyMMdd,比如2014年3月1日为 20140301</param>
  47. /// <param name="Result">同上</param>
  48. /// <param name="ErrInfo">同上</param>
  49. [DllImport("tdxtraderapi.dll", CharSet = CharSet.Ansi)]
  50. public static extern void QueryHistoryData(int ClientID, int Category, string StartDate, string EndDate, StringBuilder Result, StringBuilder ErrInfo);
  51. /// <summary>
  52. /// 查询各种交易数据
  53. /// </summary>
  54. /// <param name="ClientID">客户端ID</param>
  55. /// <param name="Category">表示查询信息的种类,0资金 1股份 2当日委托 3当日成交 4可撤单 5股东代码 6融资余额 7融券余额 8可融证券</param>
  56. /// <param name="Result">此API执行返回后,Result内保存了返回的查询数据, 形式为表格数据,行数据之间通过\n字符分割,列数据之间通过\t分隔。一般要分配1024*1024字节的空间。出错时为空字符串。</param>
  57. /// <param name="ErrInfo">此API执行返回后,如果出错,保存了错误信息说明。一般要分配256字节的空间。没出错时为空字符串</param>
  58. [DllImport("tdxtraderapi.dll", CharSet = CharSet.Ansi)]
  59. public static extern void QueryData(int ClientID, int Category, StringBuilder Result, StringBuilder ErrInfo);
  60. /// <summary>
  61. /// 批量查询各种交易数据,用数组传入每个委托的参数,数组第i个元素表示第i个查询的相应参数。暂时意义不大
  62. /// </summary>
  63. /// <param name="ClientID">客户端ID</param>
  64. /// <param name="Category">表示查询信息的种类,0资金 1股份 2当日委托 3当日成交 4可撤单 5股东代码 6融资余额 7融券余额 8可融证券</param>
  65. /// <param name="Count"></param>
  66. /// <param name="Result">同上</param>
  67. /// <param name="ErrInfo">同上</param>
  68. [DllImport("tdxtraderapi.dll", CharSet = CharSet.Ansi)]
  69. public static extern void QueryDatas(int ClientID, int[] Category, int Count, IntPtr[] Result, IntPtr[] ErrInfo);
  70. /// <summary>
  71. /// 下委托交易证券
  72. /// </summary>
  73. /// <param name="ClientID">客户端ID</param>
  74. /// <param name="Category">表示委托的种类,0买入 1卖出 2融资买入 3融券卖出 4买券还券 5卖券还款 6现券还券</param>
  75. /// <param name="PriceType">表示报价方式 0 上海限价委托 深圳限价委托 1深圳对方最优价格 2深圳本方最优价格 3深圳即时成交剩余撤销 4上海五档即成剩撤 深圳五档即成剩撤 5深圳全额成交或撤销 6上海五档即成转限价</param>
  76. /// <param name="Gddm">股东代码</param>
  77. /// <param name="Zqdm">证券代码</param>
  78. /// <param name="Price">委托价格</param>
  79. /// <param name="Quantity">委托数量</param>
  80. /// <param name="Result">同上</param>
  81. /// <param name="ErrInfo">同上</param>
  82. [DllImport("tdxtraderapi.dll", CharSet = CharSet.Ansi)]
  83. public static extern void SendOrder(int ClientID, int Category, int PriceType, string Gddm, string Zqdm, float Price, int Quantity, StringBuilder Result, StringBuilder ErrInfo);
  84. /// <summary>
  85. /// 批量下委托交易,暂时意义不大
  86. /// </summary>
  87. /// <param name="ClientID">客户端ID</param>
  88. /// <param name="Category">表示委托的种类,0买入 1卖出 2融资买入 3融券卖出 4买券还券 5卖券还款 6现券还券</param>
  89. /// <param name="PriceType">表示报价方式 0 上海限价委托 深圳限价委托 1深圳对方最优价格 2深圳本方最优价格 3深圳即时成交剩余撤销 4上海五档即成剩撤 深圳五档即成剩撤 5深圳全额成交或撤销 6上海五档即成转限价</param>
  90. /// <param name="Gddm">股东代码</param>
  91. /// <param name="Zqdm">证券代码</param>
  92. /// <param name="Price">委托价格</param>
  93. /// <param name="Quantity">委托数量</param>
  94. /// <param name="Count">批量下单数量</param>
  95. /// <param name="Result">同上</param>
  96. /// <param name="ErrInfo">同上</param>
  97. [DllImport("tdxtraderapi.dll", CharSet = CharSet.Ansi)]
  98. public static extern void SendOrders(int ClientID, int[] Category, int[] PriceType, string[] Gddm, string[] Zqdm, float[] Price, int[] Quantity, int Count, IntPtr[] Result, IntPtr[] ErrInfo);
  99. /// <summary>
  100. /// 撤委托
  101. /// </summary>
  102. /// <param name="ClientID">客户端ID</param>
  103. /// <param name="ExchangeID">交易所类别, 上海A1,深圳A0(招商证券普通账户深圳是2)</param>
  104. /// <param name="hth">委托编号</param>
  105. /// <param name="Result">同上</param>
  106. /// <param name="ErrInfo">同上</param>
  107. [DllImport("tdxtraderapi.dll", CharSet = CharSet.Ansi)]
  108. public static extern void CancelOrder(int ClientID, string ExchangeID, string hth, StringBuilder Result, StringBuilder ErrInfo);
  109. /// <summary>
  110. /// 批量撤单
  111. /// </summary>
  112. /// <param name="ClientID"></param>
  113. /// <param name="ExchangeID">交易所类别, 上海A1,深圳A0(招商证券普通账户深圳是2)</param>
  114. /// <param name="hth"></param>
  115. /// <param name="Count"></param>
  116. /// <param name="Result"></param>
  117. /// <param name="ErrInfo"></param>
  118. [DllImport("tdxtraderapi.dll", CharSet = CharSet.Ansi)]
  119. public static extern void CancelOrders(int ClientID, string[] ExchangeID, string[] hth, int Count, IntPtr[] Result, IntPtr[] ErrInfo);
  120. /// <summary>
  121. /// 获取证券的实时五档行情
  122. /// </summary>
  123. /// <param name="ClientID">客户端ID</param>
  124. /// <param name="Zqdm">证券代码</param>
  125. /// <param name="Result">同上</param>
  126. /// <param name="ErrInfo">同上</param>
  127. [DllImport("tdxtraderapi.dll", CharSet = CharSet.Ansi)]
  128. public static extern void GetQuote(int ClientID, string Zqdm, StringBuilder Result, StringBuilder ErrInfo);
  129. /// <summary>
  130. /// 批量获取证券的实时五档行情
  131. /// </summary>
  132. /// <param name="ClientID">客户端ID</param>
  133. /// <param name="Zqdm">证券代码</param>
  134. /// <param name="Count">证券合约数量</param>
  135. /// <param name="Result">同</param>
  136. /// <param name="ErrInfo">同</param>
  137. [DllImport("tdxtraderapi.dll", CharSet = CharSet.Ansi)]
  138. public static extern void GetQuotes(int ClientID, string[] Zqdm, int Count, IntPtr[] Result, IntPtr[] ErrInfo);
  139. #region 高级批量版,暂未测试

这个是我见过的比较好的一个纯交易类的接口了,基于这些接口的开发非常灵活,定制化程度很高,几乎可以完成绝大多数功能,交易速度可以到达毫秒级(不考虑极端地理情况)。缺点是这个是交易接口,还需要行情接口(尤其是LEVEL2)的行情解析,配合起来才爽。

3、券商柜台的第三方接口

这个是绝大多数普通客户没法调用的接口,只为特定的VIP客户和机构使用,与券商的接入前端在同一局域网,经过本人测试,几乎是微秒级的交易速度了。同时服务器会放置于交易所托管机房,本身的容灾能力最强。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多