股票量化系统QTYX开启全自动实盘之路——第一弹easytrader库搭建本地自动交易环境...

搭建全自动化量化系统

股票量化交易 系统QTYX最终形态是一款全自动化的量化交易系统。

接下来我们通过一个系列逐步把QTYX升级为全自动的系统。当前为第一篇:使用easytrader库搭建本地自动交易环境

股票的自动化交易接口在2015年之后就被管制了,于是对于普通股民来说只能通过手动下单方式完成量化交易最后一个环节。

当然,对于股票交易来说,大部分人更偏向于中低频的交易范畴,毕竟高频交易在政策限制下一般人并没有什么优势。因此大多数股民大可不必对自动下单有如此强烈的需求。

不过仍然有不少股民希望能够实现自动下单功能,特别是对于特别容易上头买卖股票,或者平时没时间操作股票的人群。

于是出现了一种曲线救国的方法------用程序自动操作同花顺交易客户端。


概述原理

通常使用PC时,与PC交互的主要途径是看屏幕显示、听声音,点击鼠标和敲键盘等等。

在自动化办公的趋势下,繁琐的工作可以让程序自动完成,比如自动化测试等,这时会使用到不少的软件程序。

很多软件除了可以GUI方式操作外还可以用CLI接口操作,不过当一些软件未提供CLI接口时,我们应该怎么办呢?

答案是我们可以用程序控制桌面上的窗口、模拟点击鼠标或按下键盘等动作来释放自己。这类方案当前只适用在windows桌面软件。

所以目前市面上股票量化交易中所谓的外挂软件、easytrader库等等,它们即是基于这个原理,利用程序登陆证券账号客户端,模仿人的交易行为。


安装与部署

不同券商的客户端操作方法是不一样的,所以自动交易程序也都不一样。

同花顺客户端是可以用来登陆其他证券公司账户的,这样就不用再使用其他证券客户端了。

接下来,我们主要以同花顺客户端为例进一步介绍自动交易股票的实现方案。

实现自动交易股票的核心是pywinauto这个Python库。它可以将鼠标和键盘操作发送到窗口对话框和控件,常用于在Windows平台上自动化操作GUI界面。

目前比较流行的easytrader库就是基于这个原理实现了调用一些券商客户端完成股票自动化交易的功能。

接下来介绍下如何安装和部署easytrader库。

如何安装和使用easytrader库可以参考官网的介绍:

ruby 复制代码
https://easytrader.readthedocs.io/zh/master/

此处记录下我自己部署自动交易环境的整个过程。

第一步,安装easytrader库。

nginx 复制代码
pip install easytrader

第二步,安装tesseract-ocr,用于解决验证码识别。

在操作账户的时候有时候会跳出输入"图形验证码"窗口,上面显示一些不规则(字符稍加扭曲变换得到的)的字符。tesseract-ocr(Optical Character Recognition)能够扫描字符,根据字符形状将其翻译成电子文本的过程。因此需要安装tesseract-ocr自动识别验证码。

tesseract下载地址:

javascript 复制代码
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,如果出现如下图所示,说明环境变量配置成功

css 复制代码
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

然后找个样例图片进行测试,下载链接:

javascript 复制代码
https://raw.githubusercontent.com/Python3WebSpider/TestTess/master/image.png。

首先用命令行进行测试。把图片下载到C盘Downloads文件夹,保存为image.png,然后在该文件夹中打开命令行,用tesseract命令测试:

css 复制代码
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进行安装。

swift 复制代码
import tesserocr
from PIL import Image
text = tesserocr.image_to_text(Image.open('tmp.png'))
print(text)

如果成功输出结果,则证明tesseract已经安装成功。

第五步,安装同花顺客户端。

同花顺客户端必须是V8.0,可以在官网下载,也可以在星球对应的主题附件中下载。把自己的登陆帐号信息同步到xiadan.exe中,之后直接运行xiandan.exe就可以了。

事先勾选自动登录、保存密码配置,这样打开后则自动完成登录。记得先用模拟账户进行测试,调稳定后再换上实盘账户。

需要注意的是,有些可以简化的步骤选择默认确定:

第六步,测试自动下单程序。

python 复制代码
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!!!")

效果展示

这里展示下自动下单的效果,我们将QTYX筛选出来的股票事先加到下单的例程中,然后按现价买入。

本篇内容介绍了市面上推行的股票自动交易原理,揭开这层神秘的面纱,另外也给想实现自动交易的朋友们指引一个可行的方向。

不同券商客户端具体的下单、撤单、查询资金、查询持仓等方法略有不同,更多地是需要不断地去调试出模拟的方法。

说明

想要加入知识星球《玩转股票量化交易》的小伙伴记得先微信call我获取福利!目前处于宣传期,随着影响力扩大、实战功能增加、会员人数增多,逐步提高会费。

知识星球介绍点击:知识星球《玩转股票量化交易》精华内容概览