Easytrader 超简单的股市自动交易神器
在量化投资系列教程中,我们从理论上介绍了量化回测的基本原理和思路,并进行了一定的实战分析和演练。但是并没有涉及到实际交易的场景。
在开始之前,我们需要明确什么策略需要使用自动交易的方式。我们前面的教程都是基于日线的策略,这样的日线策略并不需要自动化交易,因为你只需要提前一天算好第二天需要买入的股票即可。
什么情况下需要本文的自动交易?
1.你的策略是基于 分钟线 (1,5,15,60) 的。
2.你的日线策略在购买的时候需要判断前一天封盘前的股票数据,并提前一天买入。
3.你希望能自动打新。
除了这三种情况,其他的策略都不适合使用本文的自动交易,包括秒级别的策略,因为Easytrader是基于GUI层面(图形界面)实现的自动化接口,而非API层面,因此实时性不会很高,而且是串行形式的,并不适合秒级策略。
此外,Easytrader对券商有一定的要求:
目前支持 海通客户端、华泰客户端、国金客户端、雪球,还有通用同花顺客户端(指的是那些基于同花顺修改的券商软件版本)。
在开始自动交易前,请确认你的策略是可靠的,否则不要轻易尝试自动交易。另外交易逻辑的处理也需要非常谨慎,错一行代码可能损失的是几千块甚至不止。所以,一开始执行自动交易的时候,推荐只用很小一部分的本金。
本文只会介绍Easytrader的安装方法和基本使用方法及构建监控股票池的重要性,其他深入介绍将于后面的 量化投资系列教程10 中介绍,敬请期待。
一个小小的预告
1.准备
开始之前,你要确保Python和pip已经成功安装在电脑上,如果没有,可以访问这篇文章:超详细Python安装指南 进行安装。
如果你用Python的目的是数据分析,可以直接安装Anaconda:Python数据分析与挖掘好帮手—Anaconda,它内置了Python和pip.
此外,推荐大家用VSCode编辑器,它有许多的优点:Python 编程的最好搭档—VSCode 详细指南。
输入命令安装依赖:
1. Windows 环境 打开 Cmd (开始-运行-CMD)。
2. MacOS 环境 打开 Terminal (command+空格输入Terminal)。
3. 如果你用的是 VSCode编辑器 或 Pycharm,可以直接使用界面下方的Terminal.
pip install easytrader
看到 Successfully installed xxx 则说明安装成功。
某些券商在登录的时候可能需要识别验证码,这时候需要下载tesseract:
1.下载并安装tesseract
前往 tesseract-ocr 官网下载二进制包,此外你也可以在Python实用宝典公众号后台回复: tesseract,直接获得tesseract的安装包。
双击下载下来的安装包,然后傻瓜式安装就可以,这里只需要注意一点:
安装过程中有一个让你选择 Additional language data(download) 表示选择的话帮你下载语言包,这里最好不要选择勾选,因为勾选的话,安装过程非常慢,本教程只需要用到数字和英文识别而已。
2.配置环境变量
右击我的电脑/计算机,选择属性,然后选择高级属性设置,选择环境变量,在系统变量的path变量中添加你的 tesseract 目录就可以了
3.判断是否安装成功
在命令行中输入:
tesseract --version
出现下面的提示说明安装成功:
2.Easytrader 基本使用
这一章将介绍Easytrader的基本使用方法、包括客户端连接、获取资金状况、获取持仓、买入、卖出、一键打新、撤单。
在开始之前,请对客户端调整以下设置,不然会导致下单时价格出错以及客户端超时锁定。
系统设置 > 界面设置: 界面不操作超时时间设为 0
系统设置 > 交易设置: 默认买入价格/买入数量/卖出价格/卖出数量 都设置为 空
同时客户端不能最小化也不能处于精简模式。
2.1 自动登录客户端:
在Windows机器上下载好我们在文首提到的几个券商客户端、准备好Python相关的依赖,即可开始尝试自动登录客户端:
import easytrader # 海通客户端 user = easytrader.use('htzq_client') user.prepare(user='用户名', password='明文密码') # 华泰客户端 user = easytrader.use('ht_client') user.prepare(user='用户名', password='明文密码', comm_password='华泰通讯密码,其他券商不用') # 国金客户端 user = easytrader.use('gj_client') user.prepare(user='用户名', password='明文密码') # 雪球 user = easytrader.use('xq') user.prepare(user='用户名', password='明文密码') # 通用同花顺客户端, 指对应券商官网提供的基于同花顺修改的软件版本, 如(银河的双子星) user = easytrader.use('ths') user.prepare(user='用户名', password='明文密码')
选择你的客户端,将其他的客户端去掉,运行这个py文件,程序就会开始自动登录,期间会识别很多次验证码,经常会识别错误,没关系,让他慢慢重试即可。
如果你识别验证码的时候报了错,程序停止了下来,那是因为你没安装 tesseract, 回到第一步安装tesseract即可。
价值一个亿的密码应该没有泄露吧?
2.2 获取资金、持仓情况
获取资金、持仓情况的时候,程序都会自动化地进入相关界面获取信息。有时候也需要输入验证码,这时候easytrader也会自动识别,请不要介入。
import easytrader # 国金客户端 user = easytrader.use('gj_client') user.prepare(user='用户名', password='明文密码') # 获取资金状况 balance = user.balance print(balance) # [{'参考市值': 21642.0, # '可用资金': 28494.21, # '币种': '0', # '总资产': 50136.21, # '股份参考盈亏': -90.21, # '资金余额': 28494.21, # '资金账号': 'xxx'}] # 获取持仓情况 position = user.position print(position) # [{'买入冻结': 0, # '交易市场': '沪A', # '卖出冻结': '0', # '参考市价': 4.71, # '参考市值': 10362.0, # '参考成本价': 4.672, # '参考盈亏': 82.79, # '当前持仓': 2200, # '盈亏比例(%)': '0.81%', # '股东代码': 'xxx', # '股份余额': 2200, # '股份可用': 2200, # '证券代码': '601398', # '证券名称': '工商银行'}]
2.3 买入、卖出、一键打新、撤单
买入卖出时设定股票代码,价格和数量即可:
import easytrader # 国金客户端 user = easytrader.use('gj_client') user.prepare(user='用户名', password='明文密码') # 买入 user.buy('162411', price=0.55, amount=100) # {'entrust_no': 'xxxxxxxx'} # 卖出 user.sell('162411', price=0.55, amount=100) # {'entrust_no': 'xxxxxxxx'} # 一键打新 user.auto_ipo() # 撤单 user.cancel_entrust('buy/sell 获取的 entrust_no') # {'message': '撤单申报成功'}
如果资金不足或可用证券数量不足,程序会报错,这时候请注意把错误except出来,不然你的检测周期可能因此中断,如果是无人值守的程序,可能整个程序都会停止。
PS:使用前请构建监控股票池
使用Easytrader前为什么需要构建股票池?如我们前面提到的,Easytrader是基于GUI层面的自动化交易接口,它会进入如下模样的界面进行自动化操作:
如果你的监控对象太多,有多个对象同时符合策略,它会一个一个地进行操作,容易耽误下个周期的计算,因此推荐构建一个50只股票左右的股票池。
你可以根据基本面构造你的股票池,比如最近几年年报中,扣非净利润均有所增长的企业,或是在你的策略下表现最好的50只股票(当然未来不一定靠谱)。
无论你怎么构造,请记录下这些股票(最好是数组变量的形式),证券市场的前缀在前,代码在后,比如 sh600519:
# 以2000元的价格买入100股sh600519, 贵州茅台 user.buy('sh600519', 2000, 100)
当然,此时会报错: