using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
namespace CsDoc
{
internal class Program
{
//开发文档
//
//1.交易API均是TJyaid.dll文件的导出函数,包括以下函数:
//基本版的9个函数:
// int Logon(char* QS, char* IP, ushort Port, char* Version, ushort YybID, byte LoginMode, char* AccountNo, char* TradeAccount, char* JyPassword, char* TxPassword, char* ErrInfo);//登录帐号
// void Logoff(int ClientID);//注销
// void GetQuote(int ClientID, char* Zqdm, char* Result, char* ErrInfo);//获取五档报价
// void QueryData(int ClientID, int Category, char* Result, char* ErrInfo);//查询各类交易数据
// void QueryHistoryData(int ClientID, int Category, char* StartDate, char* EndDate, char* Result, char* ErrInfo);//分页查询各类历史数据
// void SendOrder(int ClientID, int Category, int PriceType, char* Gddm,int zhlb, char* Zqdm, char* Price, int Quantity, char* Result, char* ErrInfo);//下单
// void CancelOrder(int ClientID, char* Gddm, int zhlb, char* hth, char* Result, char* ErrInfo);//撤单
// void Repay(int ClientID, char* Amount, char* OrderNo, char* Result, char* ErrInfo);//融资融券账户直接还款
// void GetTradableQuantity(int ClientID, int Category, int PriceType, char* Gddm, int zhlb,char* Zqdm, char* Price, char* Result, char* ErrInfo)//获取最大可买卖的数量
///交易接口执行后,如果失败,则字符串ErrInfo保存了出错信息中文说明;
///如果成功,则字符串Result保存了结果数据,形式为表格数据,行数据之间通过\n字符分割,列数据之间通过\t分隔。
///Result是\n,\t分隔的中文字符串,比如查询股东代码时返回的结果字符串就是
///"股东代码\t股东名称\t帐号类别\t保留信息\n
///0000064567\t\t0\t\nA000064567\t\t1\t\n
///2000064567\t\t2\t\nB000064567\t\t3\t"
///查得此数据之后,通过分割字符串, 可以恢复为几行几列的表格形式的数据
//2.API使用流程为: 应用程序可以同时登录多个交易账户,每个交易账户称之为ClientID.
//通过调用Logon获得ClientID,然后可以调用其他API函数向各个ClientID进行查询或下单; 应用程序退出时应调用Logoff注销ClientID
//API带有断线自动重连功能,应用程序只需根据API函数返回的出错信息进行适当错误处理即可。
//3. 各个函数功能说明
///
/// 交易账户登录
///
/// 券商名称
/// 券商交易服务器IP
/// 券商交易服务器端口
/// 客户端版本号, 比如 "7.06.22",一般填"0"
/// 营业部代码
/// 登录方式, 8资金账号 9客户号
/// 完整的登录账号,券商一般使用资金帐户或客户号
/// 券商软件查询股东列表里的资金帐号
/// 交易密码
/// 通讯密码
/// 此API执行返回后,如果出错,保存了错误信息说明。一般要分配256字节的空间。没出错时为空字符串。
/// 此API执行返回后,保存了返回的客户端ID。
/// 此API执行成功返回后,登录成功返回客户端ID; 登录失败返回-1
[DllImport("TJyaid.dll", CharSet = CharSet.Ansi)]
public static extern int Logon(string QS, string IP, ushort Port, string Version, ushort YybID, byte LoginMode, string AccountNo, string TradeAccount, string JyPassword, string TxPassword, StringBuilder ErrInfo);
///
/// 交易账户注销
///
/// 客户端ID
[DllImport("TJyaid.dll", CharSet = CharSet.Ansi)]
public static extern void Logoff(int ClientID);
///
/// 查询各种交易数据
///
/// 客户端ID
/// 表示查询信息的种类,0资金 1股份 2当日委托 3当日成交 4可撤单 5股东代码 6融资余额 7融券余额 8可融证券
/// 此API执行返回后,Result内保存了返回的查询数据, 形式为表格数据,行数据之间通过\n字符分割,列数据之间通过\t分隔。一般要分配1024*1024字节的空间。出错时为空字符串。
/// 同Logon函数的ErrInfo说明
[DllImport("TJyaid.dll", CharSet = CharSet.Ansi)]
public static extern void QueryData(int ClientID, int Category, StringBuilder Result, StringBuilder ErrInfo);
///
/// 下委托交易证券
///
/// 客户端ID
/// 表示委托的种类,0买入 1卖出 2融资买入 3融券卖出 4买券还券 5卖券还款 6现券还券
/// 表示报价方式 0上海限价委托 深圳限价委托 1(市价委托)深圳对方最优价格 2(市价委托)深圳本方最优价格 3(市价委托)深圳即时成交剩余撤销 4(市价委托)上海五档即成剩撤 深圳五档即成剩撤 5(市价委托)深圳全额成交或撤销 6(市价委托)上海五档即成转限价
/// 股东代码, 交易上海股票填上海的股东代码;交易深圳的股票填入深圳的股东代码
/// 账号类别, 通过查询股东代码表, 可知股东代码的账号类别
/// 证券代码
/// 委托价格
/// 委托数量
/// 同上,其中含有委托编号数据
/// 同上
[DllImport("TJyaid.dll", CharSet = CharSet.Ansi)]
public static extern void SendOrder(int ClientID, int Category, int PriceType, string Gddm, int Zhlb, string Zqdm, string Price, int Quantity, StringBuilder Result, StringBuilder ErrInfo);
///
/// 撤委托
///
/// 客户端ID
/// 股东代码, 交易上海股票填上海的股东代码;交易深圳的股票填入深圳的股东代码
/// 账号类别, 通过查询股东代码表, 可知股东代码的账号类别
/// 表示要撤的目标委托的编号
/// 同上
/// 同上
[DllImport("TJyaid.dll", CharSet = CharSet.Ansi)]
public static extern void CancelOrder(int ClientID, string GDDM, int Zhlb, string hth, StringBuilder Result, StringBuilder ErrInfo);
///
/// 获取证券的实时五档行情
///
/// 客户端ID
/// 证券代码
/// 同上
/// 同上
[DllImport("TJyaid.dll", CharSet = CharSet.Ansi)]
public static extern void GetQuote(int ClientID, string Zqdm, StringBuilder Result, StringBuilder ErrInfo);
///
/// 融资融券直接还款
///
/// 客户端ID
/// 还款金额
/// 欲还款合约的编号, 默认填空字符串
/// 同上
/// 同上
[DllImport("TJyaid.dll", CharSet = CharSet.Ansi)]
public static extern void Repay(int ClientID, string Amount, string OrderNo, StringBuilder Result, StringBuilder ErrInfo);
///
/// 查询各种历史数据
///
/// 客户端ID
/// 表示查询信息的种类,0历史委托 1历史成交 2交割单
/// 表示开始日期,格式为yyyyMMdd,比如2014年3月1日为 20140301
/// 表示结束日期,格式为yyyyMMdd,比如2014年3月1日为 20140301
/// 同上
/// 同上
[DllImport("TJyaid.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现券还券
/// 表示报价方式 0上海限价委托 深圳限价委托 1(市价委托)上海深圳对方最优价格 2(市价委托)上海深圳本方最优价格 3(市价委托)深圳即时成交剩余撤销 4(市价委托)上海深圳五档即成剩撤 5(市价委托)深圳全额成交或撤销 6(市价委托)上海五档即成转限价
/// 股东代码, 交易上海股票填上海的股东代码;交易深圳的股票填入深圳的股东代码
/// 账号类别, 通过查询股东代码表, 可知股东代码的账号类别
/// 证券代码
/// 委托价格
/// 同上
/// 同上
[DllImport("TJyaid.dll", CharSet = CharSet.Ansi)]
public static extern void GetTradableQuantity(int ClientID, int Category, int PriceType, string Gddm, int zhlb, string Zqdm, string Price, StringBuilder Result, StringBuilder ErrInfo);
static void Main(string[] args)
{
//本软件详细信息请见网站 http://tdxjy.com/
//DLL是32位的,因此必须把C#工程生成的目标平台从Any CPU改为X86,才能调用DLL;
//必须把TJyaid.dll等全部个DLL复制到Debug和Release工程目录下;
//开始交易
StringBuilder Result = new StringBuilder(1024 * 1024);
StringBuilder ErrInfo = new StringBuilder(260);
//登录
int ClientID = Logon("招商证券", "202.106.83.206", 443, "0", 0, 9, "0109541703", "0109541703", "123456", "", ErrInfo);
Console.WriteLine( "登录结果:ClientID={0}, {1}" , ClientID , ErrInfo);
if (ClientID == -1)
{
Console.WriteLine(ErrInfo);//登录失败
}
else
{
//登录成功
GetQuote(ClientID, "000001", Result, ErrInfo); Console.WriteLine( "查询报价结果:{0} {1}" ,Result , ErrInfo);
QueryData(ClientID, 0, Result, ErrInfo); Console.WriteLine("查询资金结果:{0} {1}", Result, ErrInfo);
QueryHistoryData(ClientID, 0, "20180101", "20180901", Result, ErrInfo); Console.WriteLine("查询历史委托结果:{0} {1}", Result, ErrInfo);
SendOrder(ClientID, 0, 0, "A254236648", 1, "601988", "2.7", 100, Result, ErrInfo); Console.WriteLine("买入下单结果:{0} {1}", Result, ErrInfo);
CancelOrder(ClientID, "A254236648", 1, "1256580", Result, ErrInfo); Console.WriteLine("撤单结果:{0} {1}", Result, ErrInfo);
Repay(ClientID, "1000000",string.Empty, Result, ErrInfo); Console.WriteLine("直接还款结果:{0} {1}", Result, ErrInfo);
GetTradableQuantity(ClientID, 0, 0, "A254236648", 1, "601988", "2.7", Result, ErrInfo); Console.WriteLine("获取最大可买数量结果:{0} {1}", Result, ErrInfo);
}
Logoff(ClientID);//注销
Console.ReadLine();
}
}
}