通达信是股票市场上最常用的客户端之一,几乎所有的券商都有通达信客户端,而很多朋友在盘中都想有一个自己的下单程序。下面从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 高级批量版,暂未测试
3、券商柜台的第三方接口
这个是绝大多数普通客户没法调用的接口,只为特定的VIP客户和机构使用,与券商的接入前端在同一局域网,经过本人测试,几乎是微秒级的交易速度了。同时服务器会放置于交易所托管机房,本身的容灾能力最强。