通达信客户端程序化下单

通达信是股票市场上最常用的客户端之一,几乎所有的券商都有通达信客户端,而很多朋友在盘中都想有一个自己的下单程序。下面从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();

        /// 
        /// 交易账户登录
        /// 
        /// 券商交易服务器IP
        /// 券商交易服务器端口
        /// 设置通达信客户端的版本号:6.00或8.00
        /// 营业部编码:国泰君安为7
        /// 资金账号
        /// 交易帐号与资金帐号相同
        /// 交易密码
        /// 通讯密码为空
        /// 此API执行返回后,如果出错,保存了错误信息说明。一般要分配256字节的空间。没出错时为空字符串
        /// 客户端ID,失败时返回-1。正确时为从0开始按登陆次数叠加
        [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);

        /// 
        /// 交易账户注销
        /// 
        /// 客户端ID
        [DllImport("tdxtraderapi.dll", CharSet = CharSet.Ansi)]
        public static extern void Logoff(int ClientID);

        /// 
        /// 融资融券直接还款
        /// 
        /// 客户端ID
        /// 还款金额
        /// 同上
        /// 同上

        [DllImport("tdxtraderapi.dll", CharSet = CharSet.Ansi)]
        public static extern void Repay(int ClientID, string Amount, StringBuilder Result, StringBuilder ErrInfo);

        /// 
        /// 查询各种历史数据
        /// 
        /// 客户端ID
        /// 表示查询信息的种类,0历史委托  1历史成交   2交割单
        /// 表示开始日期,格式为yyyyMMdd,比如2014年3月1日为  20140301
        /// 表示结束日期,格式为yyyyMMdd,比如2014年3月1日为  20140301
        /// 同上
        /// 同上

        [DllImport("tdxtraderapi.dll", CharSet = CharSet.Ansi)]
        public static extern void QueryHistoryData(int ClientID, int Category, string StartDate, string EndDate, StringBuilder Result, StringBuilder ErrInfo);

        /// 
        /// 查询各种交易数据
        /// 
        /// 客户端ID
        /// 表示查询信息的种类,0资金  1股份   2当日委托  3当日成交     4可撤单   5股东代码  6融资余额   7融券余额  8可融证券
        /// 此API执行返回后,Result内保存了返回的查询数据, 形式为表格数据,行数据之间通过\n字符分割,列数据之间通过\t分隔。一般要分配1024*1024字节的空间。出错时为空字符串。
        /// 此API执行返回后,如果出错,保存了错误信息说明。一般要分配256字节的空间。没出错时为空字符串

        [DllImport("tdxtraderapi.dll", CharSet = CharSet.Ansi)]
        public static extern void QueryData(int ClientID, int Category, StringBuilder Result, StringBuilder ErrInfo);

        /// 
        /// 批量查询各种交易数据,用数组传入每个委托的参数,数组第i个元素表示第i个查询的相应参数。暂时意义不大
        /// 
        /// 客户端ID
        /// 表示查询信息的种类,0资金  1股份   2当日委托  3当日成交     4可撤单   5股东代码  6融资余额   7融券余额  8可融证券
        /// 
        /// 同上
        /// 同上
        [DllImport("tdxtraderapi.dll", CharSet = CharSet.Ansi)]
        public static extern void QueryDatas(int ClientID, int[] Category, int Count, IntPtr[] Result, IntPtr[] ErrInfo);

        /// 
        /// 下委托交易证券
        /// 
        /// 客户端ID
        /// 表示委托的种类,0买入 1卖出  2融资买入  3融券卖出   4买券还券   5卖券还款  6现券还券
        /// 表示报价方式 0  上海限价委托 深圳限价委托 1深圳对方最优价格  2深圳本方最优价格  3深圳即时成交剩余撤销  4上海五档即成剩撤 深圳五档即成剩撤 5深圳全额成交或撤销 6上海五档即成转限价
        /// 股东代码
        /// 证券代码
        /// 委托价格
        /// 委托数量
        /// 同上
        /// 同上

        [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);

        /// 
        /// 批量下委托交易,暂时意义不大
        /// 
        /// 客户端ID
        /// 表示委托的种类,0买入 1卖出  2融资买入  3融券卖出   4买券还券   5卖券还款  6现券还券
        /// 表示报价方式 0  上海限价委托 深圳限价委托 1深圳对方最优价格  2深圳本方最优价格  3深圳即时成交剩余撤销  4上海五档即成剩撤 深圳五档即成剩撤 5深圳全额成交或撤销 6上海五档即成转限价
        /// 股东代码
        /// 证券代码
        /// 委托价格
        /// 委托数量
        /// 批量下单数量
        /// 同上
        /// 同上
        [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);

        /// 
        /// 撤委托
        /// 
        /// 客户端ID
        /// 交易所类别, 上海A1,深圳A0(招商证券普通账户深圳是2)
        /// 委托编号
        /// 同上
        /// 同上
        [DllImport("tdxtraderapi.dll", CharSet = CharSet.Ansi)]
        public static extern void CancelOrder(int ClientID, string ExchangeID, string hth, StringBuilder Result, StringBuilder ErrInfo);

        /// 
        /// 批量撤单
        /// 
        /// 
        /// 交易所类别, 上海A1,深圳A0(招商证券普通账户深圳是2)
        /// 
        /// 
        /// 
        /// 
        [DllImport("tdxtraderapi.dll", CharSet = CharSet.Ansi)]
        public static extern void CancelOrders(int ClientID, string[] ExchangeID, string[] hth, int Count, IntPtr[] Result, IntPtr[] ErrInfo);

        /// 
        /// 获取证券的实时五档行情
        /// 
        /// 客户端ID
        /// 证券代码
        /// 同上
        /// 同上
        [DllImport("tdxtraderapi.dll", CharSet = CharSet.Ansi)]
        public static extern void GetQuote(int ClientID, string Zqdm, StringBuilder Result, StringBuilder ErrInfo);

        /// 
        /// 批量获取证券的实时五档行情
        /// 
        /// 客户端ID
        /// 证券代码
        /// 证券合约数量
        /// 同
        /// 同
        [DllImport("tdxtraderapi.dll", CharSet = CharSet.Ansi)]
        public static extern void GetQuotes(int ClientID, string[] Zqdm, int Count, IntPtr[] Result, IntPtr[] ErrInfo);

        #region 高级批量版,暂未测试

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

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

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

你可能感兴趣的:(证券期货极速交易系统周边开发)