在日常工作中,业务部门经常会向我们IT部门提出,每天、每周、每月需要定期从很多系统进行重复的操作,比如每天定期从网银导出对账单,录入SAP系统,与SAP的过账数据做核对,又比如每到月底,需要从用友、金蝶系统导出各种报表进行汇总计算,生成相应的报表,提交给公司的管理层,等等。这些定期的大量重复的操作,如果使用人工操作,一来浪费人力资源,二来手工操作,容易出错。RPA软件,虽然能帮助企业很好的解决这些问题,但是RPA软件和实施,费用不便宜,而且每年的维护成本也高,一般中小型企业扛不住这些高昂的成本。
曾经有一家小型私幕基金有这样的需求,每天需要从通达信交易软件导出全部的股票的分时交易明细,然后导入Mysql数据库系统。私幕基金公司的各种量化交易策略,是基于每个股票过往的交易明细,也就是说每只股票的每笔交易明细,是量化交易策略的基石,无论怎么强调其重要性,都不过份。大A股,目前上市大约有4千多只股票,每个交易日结束后,手工进去一只一只导交易数据,大约需要几个小时。写到这里,也许有人会问,为什么不直接向证券公司要数据接口,直接对接呢?这个问题问得非常好,因为证券公司一般只向大中型基金公司或大型头部私幕基金开放数据接口。也有好奇者问,网上有大把股票交易明细数据,某宝上也有,花点小钱,直接买过来就是了,针对这个问题,私幕基金的老板讲到,网上的或某宝的交易明细数据,很难保证百分百正确,只要数据有一点错误,那量化交易策略就有可能失之毫厘,谬以千里。所以最可靠的股票交易数据,就是直接从通达信股票交易软件下载,通达信的数据是直接从交易所过来的数据。以下截图是其中一只股票的分时成交明细,是txt格式。
为了解决这家小型私幕基金的痛点,我使用C#写了一个工具。此工具总得来讲,分成4个步骤:1、每个交易日15:10准时自动登录通达信交易软件,2、登录进去后,自动下载每只股票的交易明细数据,下载成txt格式,3、全部股票交易明细下载完毕后,自动把txt格式的数据导进Mysql,4、导进Mysql完毕后,自动关闭通达信交易软件。全程是由软件自动执行,不需要人工参与。
开发这个工具的时候,碰到2个难点:
1、 通达信软件登录界面,是需要录入验证码的,为了解决验证码的问题,我使用了Google的OCR插件,此插件是Google开源免费的,网上可以下载,使用某度就可以查到,如果不能下载的人,可以关注我的微信公众号。使用Google的OCR插件的时候,需要注意.Net Framework的版本。
2、 登录或操作通达信软件,要合法合规,也就是跟人工操作一样,与RPA软件一样的操作方法。所以我选C#和微软提供的SPY++去实现。SPY++是微软Visual Studio开发工具自带。SPY++如何使用,请自行网上查找相关资料,本文不做具体的展开。
以下将具体展开整个项目,全文分成三部份,本文是第一部份:c#调用Google的OCR读取验证码
1、 新建一个Winform的工程,命名为:GetCode。
2、引用tessnet2_32.dll,这是Google的OCR插件
3、把窗体改名为:ImageOpt,拉进三个控件:pictureBox1、textBox1、button1
4、修改Program.cs
5、在ImageOpt.cs里面添加以下引用
6、加一个类
7、加3个变量
8、加一个函数ImageOpt
9、修改ImageOpt窗体的Load事件
10、加函数GetCode(string code01)
11、加函数GetCode01(Bitmap _bitmap)
12、加函数SaveCode(Bitmap _bitmap)
13、加函数GetCode(Bitmap _bitmap, Panel p)
14、加函数CutMap(Bitmap _bitmap)
15、加函数Bitmap[] SplitImg(Bitmap _bitmap, int row, int col)
16、修改button1控件的click事件
17、测试运行,点击“button1”
就会出来以下结果
需要全部源代码者,请关注我的微信公众号:技术小客栈。
网友评论