搭建过程 每个交易者都应该形成一套自己的交易系统。 概述原理 通常使用PC时,与PC交互的主要途径是看屏幕显示、听声音,点击鼠标和敲键盘等等。 在自动化办公的趋势下,繁琐的工作可以让程序自动完成,比如自动化测试等,这时会使用到不少的软件程序。 很多软件除了可以GUI方式操作外还可以用CLI接口操作,不过当一些软件未提供CLI接口时,我们应该怎么办呢? 答案是我们可以用程序控制桌面上的窗口、模拟点击鼠标或按下键盘等动作来释放自己。这类方案当前只适用在windows桌面软件。 所以目前市面上股票量化交易中所谓的外挂软件、easytrader库等等,它们即是基于这个原理,利用程序登陆证券账号客户端,模仿人的交易行为。 安装与部署 不同券商的客户端操作方法是不一样的,所以自动交易程序也都不一样。 同花顺客户端是可以用来登陆其他证券公司账户的,这样就不用再使用其他证券客户端了。 接下来,我们主要以同花顺客户端为例进一步介绍自动交易股票的实现方案。 实现自动交易股票的核心是pywinauto这个Python库。它可以将鼠标和键盘操作发送到窗口对话框和控件,常用于在Windows平台上自动化操作GUI界面。 目前比较流行的easytrader库就是基于这个原理实现了调用一些券商客户端完成股票自动化交易的功能。 接下来介绍下如何安装和部署easytrader库。 如何安装和使用easytrader库可以参考官网的介绍: https://easytrader.readthedocs.io/zh/master/此处记录下我自己部署自动交易环境的整个过程。 第一步,安装easytrader库。 pip install easytrader第二步,安装tesseract-ocr,用于解决验证码识别。 在操作账户的时候有时候会跳出输入“图形验证码”窗口,上面显示一些不规则(字符稍加扭曲变换得到的)的字符。tesseract-ocr(Optical Character Recognition)能够扫描字符,根据字符形状将其翻译成电子文本的过程。因此需要安装tesseract-ocr自动识别验证码。 tesseract下载地址: https://digi.bib.uni-mannheim.de/tesseract/进入下载页面,可以看到有各种.exe文件的下载列表,其中文件名中带有dev的为开发版本,不带dev的为稳定版本,可以选择下载不带dev的版本。我下载的是 tesseract-ocr-setup-3.05.01.exe。 下载完成后双击,此时会出现如下图所示的页面。 然后连续点击Next按钮,直到安装完成。记得勾上“Additional language data(download)”选项安装OCR识别支持的语言包,这样OCR便可以识别多国语言。 第三步,安装完成后要确保命令行下 tesseract 可用。 为了在全局使用方便,先配置下环境变量。比如安装路径为C:\Program Files (x86)\Tesseract-OCR,将该路径添加到环境变量的path中。 配置完成后在命令行输入tesseract -v,如果出现如下图所示,说明环境变量配置成功 C:\Program Files (x86)\Tesseract-OCR>tesseract -v tesseract 3.05.01 leptonica-1.74.1 libgif 4.1.6(?) : libjpeg 8d (libjpeg-turbo 1.5.0) : libpng 1.6.20 : libtiff 4.0.6 : zlib 1.2.8 : libwebp 0.4.3 : libopenjp2 2.1.0然后找个样例图片进行测试,下载链接: https://raw.githubusercontent.com/Python3WebSpider/TestTess/master/image.png。首先用命令行进行测试。把图片下载到C盘Downloads文件夹,保存为image.png,然后在该文件夹中打开命令行,用tesseract命令测试: C:\Users\Administrator\Downloads>tesseract image.png result Tesseract Open Source OCR Engine v3.05.01 with Leptonica这里我们调用了tesseract命令,其中第一个参数为图片名称,第二个参数result 为结果保存的目标文件名称。 运行结果便是图片的识别结果:Python3WebSpider。可以在Download文件夹中看到result.txt,这时已经成功将图片文字转为电子文本了。 第四步,通过Python代码测试tesseract功能。 首先安装tesserocr 库,可以下载tesserocr-2.6.0-cp39-cp39-win_amd64.whl进行安装。 import tesserocr from PIL import Image text = tesserocr.image_to_text(Image.open('tmp.png')) print(text)如果成功输出结果,则证明tesseract已经安装成功。 第五步,安装同花顺客户端。 同花顺客户端必须是V8.0,可以在官网下载,也可以在星球对应的主题附件中下载。把自己的登陆帐号信息同步到xiadan.exe中,之后直接运行xiandan.exe就可以了。 事先勾选自动登录、保存密码配置,这样打开后则自动完成登录。记得先用模拟账户进行测试,调稳定后再换上实盘账户。 需要注意的是,有些可以简化的步骤选择默认确定: 第六步,测试自动下单程序。 import easytrader import tesserocr import time user = easytrader.use('ths') user.connect(u"C:\\同花顺软件\\同花顺\\xiadan.exe") # 类似 r'C:\htzqzyb2\xiadan.exe' # 设置客户端编辑文本形式:type_keys user.enable_type_keys_for_editor() #user.prepare('THS_client.json') # 配置文件路径 # 获取资金状况 balance = user.balance print(f"资金余额:{balance['资金余额']}") print(f"可用金额:{balance['可用金额']}") print(f"可取金额:{balance['可取金额']}") print(f"股票市值:{balance['股票市值']}") print(f"总资产:{balance['总资产']}") # 获取持仓 position = user.position for item in position: print(item) # 买入 buy_result = user.buy('603220', price=19.05, amount=100) print(buy_result) buy_result = user.buy('603220', price=19.08, amount=100) print(buy_result) buy_result = user.buy('603220', price=19.07, amount=100) print(buy_result) buy_result = user.buy('603220', price=19.06, amount=100) print(buy_result) # 查询当日成交 today_trades_result = user.today_trades for item in today_trades_result: print(item) # 查询当日委托 entrusts_result = user.today_entrusts for item in entrusts_result: print(item) print("test over!!!")封装成类 调通了基础例程后,我们把这些交易的功能封装成一个类,以供系统整体的调用。 类名为ThsTrader,其中包括了“连接客户端”、“获取资金状况”、“获取当前仓位”、“查询当日成交”、“买入”、“卖出”等方法。 class ThsTrader: def __init__(self, exe=r'C:\同花顺软件\同花顺\xiadan.exe', tesseract_cmd = r'C:\Program Files (x86)\Tesseract-OCR\tesseract', is_slippage=True, slippage=0.01): pass # "略" def get_balance(self): ''' 获取资金状况 ''' pass # "略" return pd.DataFrame() def get_position(self): ''' 获取持股 ''' pass # "略" return pd.DataFrame() def today_trades(self): ''' 当日成交 ''' pass # "略" return pd.DataFrame() def today_entrusts(self): ''' 当日委托 ''' pass # "略" return pd.DataFrame() def make_buy(self, security='600031', price=16.5, amount=100): pass # "略" return True def make_sell(self, security='300780', price=14, amount=100): pass # "略" return False def connect(self, client='universal_client'): print('链接同花顺') user=easytrader.use(client) #path=self.exe[:-9]+'xiadan.exe' user.connect('{}'.format(self.exe)) #不使用这个可能无法输入数据 user.enable_type_keys_for_editor() self.user=user效果展示 比如查询当日成交: 比如查询资金股票: 这里展示下自动下单的效果,我们将筛选出来的股票事先加到下单的例程中,然后按现价买入。 本篇内容介绍了市面上推行的股票自动交易原理,揭开这层神秘的面纱,另外也给想实现自动交易的朋友们指引一个可行的方向。 不同券商客户端具体的下单、撤单、查询资金、查询持仓等方法略有不同,更多地是需要不断地去调试出模拟的方法。 总结 实现了自动下单这个环节之后,接下去我们可以形成闭环的量化交易系统,全自动化交易。 说明 此系列为连载专栏,完整代码会上传知识星球《玩转股票量化交易》!作为会员们的学习资料。 想要加入知识星球《玩转股票量化交易》的小伙伴记得先微信call我获取福利! 非星球会员需要的话,需要单独联系我购买! 知识星球介绍点击:知识星球《玩转股票量化交易》精华内容概览 |