【C# 群益 API 开发教学】帐号登入、取得下单帐号教学 #CH2 (附範例)

群益 API 是利用自己开发的程式,结合群益 API 在群益券商下单的一种方式,通常是做程式交易下单,或是单纯读取报价也行。

而群益 API 是我看过很用心在开发 API 的一间券商,他们的 API 提供很完整的串接机制,可以做到即时回应与事件触发方式,我看完他们的 API 是觉得他们程式架构是很完整的。

此範例教学是我看群益 API 的範例,再重新做出我要的程式交易功能。

这个章节是 API 基本的登入验证功能,登入帐号密码之后,再取得要下单的期货帐号。

如果需要实际操作才好学习的话,在最后我会提供原始码範例下载连结,可以在自己电脑执行看看。

我在写程式码时尽量把注解说明清楚一点,这样可以帮助想学习的人看懂一些,完整的功能还是要看官方的文件和範例喔。

在往下看之前,我还是先提醒一下,我设计的介面是为了教学而简单设计的,给大家学习参考而已,完整的功能还是要看官方的文件和範例喔。

在上一篇我讲解了群益 API 的範例下载和安装, 接下来就是实际打开 Visual Studio 2019 来设计介面了喔。
如果 Visual Studio 2019 还没安装可参考这篇: 安装程式开发工具 IDE Visual Studio 2019

设计介面

我开发的专案类型是 Windows Forms App (.NET Framework),是标準的视窗程式,关于如何建立视窗程式可参考: 建立第一个应用程式 Hello World

打开 VS 之后,可以照我的画面,拉出这个设计检视。

上面红色字是控制项与 ID,好方便以下程式码对应。

引用群益 API 元件

在我们下载群益 API 範例时,有安装过他的元件,但是在新专案开发时,还是需要手动引用元件才行。
在专案的参考,按右键「加入参考」。

然后选择「浏览」。

找到群益 API 範例里面的元件「SKCOM.dll」,而目录是 x64或 x86 依你的电脑而定。

加入之后,在参考内看到「SKCOMLib」就行了喔,接下来就可以继续写程式了。

注册问题排除

如果你已经注册了元件,而程式要引用「SKCOM.dll」一直出现失败,应该是注册时失败,错误原因可能是你放在 C 槽之外注册会失败。

解决方法有 2个

可以把元件放在 C 槽之后,用管理者再注册一次。如果你是 x64 环境,直接把 SKCOM.dll 元件複製放到 「C:\Windows\SysWOW64」里面去,也会注册元件。

群益 API 登入测试

我在设计介面上有一个主要功能是「登入测试」,在登入动作里面是检查帐密正确性,以及取得下单帐号。

程式码阅读前提醒

以下的程式码是针对重点功能拿出来讲解,并加上我的注解,帮助第一次使用群益 API 好理解。

在群益 API 里面已经有非常完整的开发教学了,大家还是要以官方的教学範例为主,而我的写法会和官方範例有所不同,我也是提出我的写法给大家参考而已。

当你们明白 API 用法之后,就可以改写成你们想要的方式了。

物件初始化

在群益 API 使用都是透过物件来呼叫函式,在登入主要会用到连线、回应、下单物件,需要先对这些物件初始化。

// 初始化物件SKCenterLib m_pSKCenter = new SKCenterLib(); //登入&环境物件SKReplyLib m_pSKReply = new SKReplyLib(); //回应物件SKOrderLib m_pSKOrder = new SKOrderLib(); //下单物件

注册公告回应事件

这是群益 API 的要求,需要先读取公告回应,才可以继续登入。

// 注册事件if (isFirst == true){// 注册公告事件m_pSKReply.OnReplyMessage += new _ISKReplyLibEvents_OnReplyMessageEventHandler(this.m_pSKReply_OnAnnouncement);// 注册登入帐号事件m_pSKOrder.OnAccount += new _ISKOrderLibEvents_OnAccountEventHandler(m_OrderObj_OnAccount);isFirst = false;}

登入函式

// 不用 SGX DMAm_pSKCenter.SKCenterLib_SetAuthority(1);// 呼叫群益帐号登入nCode = m_pSKCenter.SKCenterLib_Login(txtCapitalAcct.Text.Trim().ToUpper(), txtCapitalPwd.Text.Trim());// 取得回传讯息string msg = GetMessage("登入", nCode);txtMessage.AppendText(msg + "\n");if (nCode != 0 && nCode != 2003){// 失败return;}

群益 API 回传的是代码,可以透过此方法将代码转成文字讯息。
如果登入回传代码是 “0”,表示成功登入。
如果代码是 2003 是指 ID 已登入无需重複登入,也算是成功登入。
其他的就是登入失败,需要停下来看一下错误讯息。

取得回传讯息 GetMessage() 是方法,语法如下:

/// <summary>/// 取得群益api回传讯息说明/// </summary>/// <param name="strType"></param>/// <param name="nCode"></param>/// <param name="strMessage"></param>private string GetMessage(string strType, int nCode){string strInfo = "";if (nCode != 0)strInfo = "【" + m_pSKCenter.SKCenterLib_GetLastLogInfo() + "】";string message = "【" + strType + "】【" + m_pSKCenter.SKCenterLib_GetReturnCodeMessage(nCode) + "】" + strInfo;return message;}

读取交易凭证

交易凭证是下单的必要凭证,可以上群益官网凭证专区,申请下载凭证安装在电脑上,等待凭证安装完成后,使用以下的 API 凭证语法才会通过喔。
使用群益的凭证安装程式,要看到以下的画面,才算是凭证合格喔。

凭证合格以下的程式码才会通过。

// 下单物件初始化nCode = m_pSKOrder.SKOrderLib_Initialize();msg = GetMessage("下单物件初始化", nCode);txtMessage.AppendText(msg + "\n");// 读取凭证nCode = m_pSKOrder.ReadCertByID(txtCapitalAcct.Text);msg = GetMessage("读取凭证", nCode);txtMessage.AppendText(msg + "\n");if (nCode != 0){// 失败return;}

取得下单帐号

在群益开户可以同时开多个帐户,而下单可选择其中一个帐号执行,下面的语法就会列出所有的下单帐号。

//取得下单帐号nCode = m_pSKOrder.GetUserAccount();msg = GetMessage("取得下单帐号", nCode);txtMessage.AppendText(msg + "\n");if (nCode != 0)return;

因为在之前有注册过事件 m_pSKOrder.OnAccount += new _ISKOrderLibEvents_OnAccountEventHandler(m_OrderObj_OnAccount);
所以呼叫 GetUserAccount() 之后会等待事件回传,接下来就是看回传的语法。

/// <summary>/// 取得下单帐号回传事件/// </summary>/// <param name="bstrLogInID"></param>/// <param name="bstrAccountData"></param>void m_OrderObj_OnAccount(string bstrLogInID, string bstrAccountData){string[] strValues;strValues = bstrAccountData.Split(',');if (strValues[0] == "TF"){// 取得期货帐号futAcct = strValues[1] + strValues[3];cboFutureAccount.Items.Add(new ComboboxItem(futAcct, futAcct + "-" + strValues[5]));cboFutureAccount.SelectedIndex = 0;}else if (strValues[0] == "OF"){// 取得海期帐号osFutAcct = strValues[1] + strValues[3];cboOsFutureAccount.Items.Add(new ComboboxItem(osFutAcct, osFutAcct + "-" + strValues[5]));cboOsFutureAccount.SelectedIndex = 0;}}

当有多个帐号,此事件方法就会多次回传,每一次回传会带一个帐号。
判断帐号的分类如下:
TF: 期货,OF: 海外期货,TS: 证券,OS: 複委託

我将回传的帐号传入 ComboBox 显示,
当有多个帐号时,在下单时就可以依不同帐号下单。

执行画面

当程式执行后,输入正确的帐号及密码,就会有以下的画面。

执行过程的讯息就会在下面显示,成功和失败都会显示讯息。

储存帐号密码

当完成了登入测试之后,我们就可以将帐号及密码储存下来,以方便之后的报价及下单直接使用,不需要在每个地方都要输入帐号密码。

我选择储存的方式是将存有资讯的物件序列化,写入实体档案,下次需要时就直接读取档案反序列化就行。

if (txtCapitalAcct.Text.Trim() == ""){MessageBox.Show("请输入帐号");return;}if (txtCapitalPwd.Text.Trim() == ""){MessageBox.Show("请输入密码");return;}UserProfile user = new UserProfile();user.CapitalUserId = txtCapitalAcct.Text.Trim();user.CapitalUserPwd = txtCapitalPwd.Text.Trim();// 将物件序列化储存string path = "CapitalLog";if (!Directory.Exists(path)){Directory.CreateDirectory(path);}// 序列化FileStream fs = new FileStream(path + "\\" + "UserProfile", FileMode.Create);IFormatter formatter = new BinaryFormatter();formatter.Serialize(fs, user);fs.Close();

文章总结

确保群益 API 範例正常执行后,才开始开发自己的程式交易新专案只要引用「SKCOM.dll」即可。电脑需安装群益凭证。複製登入程式码并取得下单帐号。

範例下载

付费后可下载此篇文章教学程式码。

相关学习文章

【C# 群益 API 开发教学】取得商品报价、Tick、最佳 5 档教学 #CH3 (附範例)
【C# 群益 API 开发教学】範例下载与安装环境 #CH1
【C# 群益 API 开发教学】期货演算法交易讯号检查,比较商品价格差异 #CH4 (附範例)


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章