通达信是股票市场上最常用的客户端之一,几乎所有的券商都有通达信客户端,而很多朋友在盘中都想有一个自己的下单程序。下面从2方面探讨一下通过通达信自动化下单的办法:
一、利用模拟按键类程序
利用通达信的客户端界面本身,获取各个控件的类型和实例名,通过AUTOIT等脚本程序实现通达信客户端的自动化下单。此种方法简单方便,都是通过windows的库函数的调用来模拟消息,从而实现自动化下单。但是此方法只可用于代替人手工敲单而已,盘中需要人盯盘、同时将股票提前写入脚本或者配置文件中,时效性太差。
二、利用网络上流出的通达信接口进行二次编程开发。
先贴出可调用的方法
[DllImport("tdxtraderapi.dll", CharSet = CharSet.Ansi)] public static extern void OpenTdx(); [DllImport("tdxtraderapi.dll", CharSet = CharSet.Ansi)] public static extern void CloseTdx(); /// <param name="IP">券商交易服务器IP</param> /// <param name="Port">券商交易服务器端口</param> /// <param name="Version">设置通达信客户端的版本号:6.00或8.00</param> /// <param name="YybId">营业部编码:国泰君安为7</param> /// <param name="AccountNo">资金账号</param> /// <param name="TradeAccount">交易账号与资金账号相同</param> /// <param name="JyPassword">交易密码</param> /// <param name="TxPassword">通讯密码为空</param> /// <param name="ErrInfo">此API执行返回后,如果出错,保存了错误信息说明。一般要分配256字节的空间。没出错时为空字符串</param> /// <returns>客户端ID,失败时返回-1。正确时为从0开始按登陆次数叠加</returns> [DllImport("tdxtraderapi.dll", CharSet = CharSet.Ansi)] public static extern int Logon(string IP, short Port, string Version, short YybId, string AccountNo, string TradeAccount, string JyPassword, string TxPassword, StringBuilder ErrInfo); /// <param name="ClientID">客户端ID</param> [DllImport("tdxtraderapi.dll", CharSet = CharSet.Ansi)] public static extern void Logoff(int ClientID); /// <param name="ClientID">客户端ID</param> /// <param name="Amount">还款金额</param> /// <param name="Result">同上</param> /// <param name="ErrInfo">同上</param> [DllImport("tdxtraderapi.dll", CharSet = CharSet.Ansi)] public static extern void Repay(int ClientID, string Amount, StringBuilder Result, StringBuilder ErrInfo); /// <param name="ClientID">客户端ID</param> /// <param name="Category">表示查询信息的种类,0历史委托 1历史成交 2交割单</param> /// <param name="StartDate">表示开始日期,格式为yyyyMMdd,比如2014年3月1日为 20140301</param> /// <param name="EndDate">表示结束日期,格式为yyyyMMdd,比如2014年3月1日为 20140301</param> /// <param name="Result">同上</param> /// <param name="ErrInfo">同上</param> [DllImport("tdxtraderapi.dll", CharSet = CharSet.Ansi)] public static extern void QueryHistoryData(int ClientID, int Category, string StartDate, string EndDate, StringBuilder Result, StringBuilder ErrInfo); /// <param name="ClientID">客户端ID</param> /// <param name="Category">表示查询信息的种类,0资金 1股份 2当日委托 3当日成交 4可撤单 5股东代码 6融资余额 7融券余额 8可融证券</param> /// <param name="Result">此API执行返回后,Result内保存了返回的查询数据, 形式为表格数据,行数据之间通过\n字符分割,列数据之间通过\t分隔。一般要分配1024*1024字节的空间。出错时为空字符串。</param> /// <param name="ErrInfo">此API执行返回后,如果出错,保存了错误信息说明。一般要分配256字节的空间。没出错时为空字符串</param> [DllImport("tdxtraderapi.dll", CharSet = CharSet.Ansi)] public static extern void QueryData(int ClientID, int Category, StringBuilder Result, StringBuilder ErrInfo); /// 批量查询各种交易数据,用数组传入每个委托的参数,数组第i个元素表示第i个查询的相应参数。暂时意义不大 /// <param name="ClientID">客户端ID</param> /// <param name="Category">表示查询信息的种类,0资金 1股份 2当日委托 3当日成交 4可撤单 5股东代码 6融资余额 7融券余额 8可融证券</param> /// <param name="Count"></param> /// <param name="Result">同上</param> /// <param name="ErrInfo">同上</param> [DllImport("tdxtraderapi.dll", CharSet = CharSet.Ansi)] public static extern void QueryDatas(int ClientID, int[] Category, int Count, IntPtr[] Result, IntPtr[] ErrInfo); /// <param name="ClientID">客户端ID</param> /// <param name="Category">表示委托的种类,0买入 1卖出 2融资买入 3融券卖出 4买券还券 5卖券还款 6现券还券</param> /// <param name="PriceType">表示报价方式 0 上海限价委托 深圳限价委托 1深圳对方最优价格 2深圳本方最优价格 3深圳即时成交剩余撤销 4上海五档即成剩撤 深圳五档即成剩撤 5深圳全额成交或撤销 6上海五档即成转限价</param> /// <param name="Gddm">股东代码</param> /// <param name="Zqdm">证券代码</param> /// <param name="Price">委托价格</param> /// <param name="Quantity">委托数量</param> /// <param name="Result">同上</param> /// <param name="ErrInfo">同上</param> [DllImport("tdxtraderapi.dll", CharSet = CharSet.Ansi)] public static extern void SendOrder(int ClientID, int Category, int PriceType, string Gddm, string Zqdm, float Price, int Quantity, StringBuilder Result, StringBuilder ErrInfo); /// <param name="ClientID">客户端ID</param> /// <param name="Category">表示委托的种类,0买入 1卖出 2融资买入 3融券卖出 4买券还券 5卖券还款 6现券还券</param> /// <param name="PriceType">表示报价方式 0 上海限价委托 深圳限价委托 1深圳对方最优价格 2深圳本方最优价格 3深圳即时成交剩余撤销 4上海五档即成剩撤 深圳五档即成剩撤 5深圳全额成交或撤销 6上海五档即成转限价</param> /// <param name="Gddm">股东代码</param> /// <param name="Zqdm">证券代码</param> /// <param name="Price">委托价格</param> /// <param name="Quantity">委托数量</param> /// <param name="Count">批量下单数量</param> /// <param name="Result">同上</param> /// <param name="ErrInfo">同上</param> [DllImport("tdxtraderapi.dll", CharSet = CharSet.Ansi)] 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); /// <param name="ClientID">客户端ID</param> /// <param name="ExchangeID">交易所类别, 上海A1,深圳A0(招商证券普通账户深圳是2)</param> /// <param name="hth">委托编号</param> /// <param name="Result">同上</param> /// <param name="ErrInfo">同上</param> [DllImport("tdxtraderapi.dll", CharSet = CharSet.Ansi)] public static extern void CancelOrder(int ClientID, string ExchangeID, string hth, StringBuilder Result, StringBuilder ErrInfo); /// <param name="ClientID"></param> /// <param name="ExchangeID">交易所类别, 上海A1,深圳A0(招商证券普通账户深圳是2)</param> /// <param name="hth"></param> /// <param name="Count"></param> /// <param name="Result"></param> /// <param name="ErrInfo"></param> [DllImport("tdxtraderapi.dll", CharSet = CharSet.Ansi)] public static extern void CancelOrders(int ClientID, string[] ExchangeID, string[] hth, int Count, IntPtr[] Result, IntPtr[] ErrInfo); /// <param name="ClientID">客户端ID</param> /// <param name="Zqdm">证券代码</param> /// <param name="Result">同上</param> /// <param name="ErrInfo">同上</param> [DllImport("tdxtraderapi.dll", CharSet = CharSet.Ansi)] public static extern void GetQuote(int ClientID, string Zqdm, StringBuilder Result, StringBuilder ErrInfo); /// <param name="ClientID">客户端ID</param> /// <param name="Zqdm">证券代码</param> /// <param name="Count">证券合约数量</param> /// <param name="Result">同</param> /// <param name="ErrInfo">同</param> [DllImport("tdxtraderapi.dll", CharSet = CharSet.Ansi)] public static extern void GetQuotes(int ClientID, string[] Zqdm, int Count, IntPtr[] Result, IntPtr[] ErrInfo);
这个是我见过的比较好的一个纯交易类的接口了,基于这些接口的开发非常灵活,定制化程度很高,几乎可以完成绝大多数功能,交易速度可以到达毫秒级(不考虑极端地理情况)。缺点是这个是交易接口,还需要行情接口(尤其是LEVEL2)的行情解析,配合起来才爽。
3、券商柜台的第三方接口
这个是绝大多数普通客户没法调用的接口,只为特定的VIP客户和机构使用,与券商的接入前端在同一局域网,经过本人测试,几乎是微秒级的交易速度了。同时服务器会放置于交易所托管机房,本身的容灾能力最强。
|