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

news2024/11/18 23:36:20

b66c0864375dab431db2a1ff795528c7.png


搭建全自动化量化系统

5a3843cf57438ad5f73ef39890ad94fa.png

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

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

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

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

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

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


aabd6109d59a7ccd02b32b757e10c0c4.png

概述原理

c2c548a2f6034d069f4c30b93d2d7612.png

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

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

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

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

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


569ef250a713cc007908fd4bd79e8365.png

安装与部署

0bb515067a649dde2d8ace09ff953608.png

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

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

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

实现自动交易股票的核心是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。

下载完成后双击,此时会出现如下图所示的页面。

22c73db437652dd2d1f276a15735b698.png

然后连续点击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

b71e06012ae82b6e8ba666a2813c068f.png

这里我们调用了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就可以了。

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

aae7e77529e99c4b07cbe8cf712387e5.png

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

731a433d70f4c3af591d0d0c8f280db7.png

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

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!!!")

c5dfce831896e98a408b3449c4fa2642.png

效果展示

e5a02f75b2811a54155ad8c95fbbbeed.png

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

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

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

说明

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

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

74e90fdade09b819724604834f66e3b9.jpeg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1025080.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

黑马JVM总结(十七)

(1)G1_简介 下面介绍一种Grabage one的垃圾回收器,在jdk9的时候称为默认的回收器,废除了之前的CMS垃圾回收器,它的内部也是并发的垃圾回收器 我们可以想到堆内存过大,肯定会导致回收速度变慢,因…

游戏开发玩法设计的重要性

玩法设计在游戏开发中非常重要,因为它直接影响着玩家的游戏体验和游戏的吸引力。一个精心设计的玩法可以使游戏更具趣味性、挑战性和可玩性,从而吸引更多的玩家并提高游戏的成功度。以下是玩法设计的重要性: 吸引力和沉浸感: 精心…

2023_Spark_实验九:Scala函数式编程部分演示

需求: 1、做某个文件的词频统计//某个单词在这个文件出现次数 步骤: 1、文件单词规律(空格分开) 2、单词切分 3、单词的统计 (k,v)->(k:单词,V:数量) 4、打印 框…

手游模拟器长时间运行后,游戏掉帧且不恢复

1)手游模拟器长时间运行后,游戏掉帧且不恢复 2)FrameBuffer Fetch无论哪种模式在确定支持的手机上显示全紫 3)协程中yield return CoFunction()和yield return StartCoroutine(CoFunction())的区别 这是第353篇UWA技术知识分享的推…

山石网科国产化入侵防御系统,打造全生命周期的安全防护

随着互联网的普及和网络安全的威胁日益增加,botnet感染成为了企业面临的重要问题之一。botnet是一种由分散的客户端(或肉鸡)组成的网络,这些客户端被植入了bot程序,受控于攻击者。攻击者通过这些客户端的bot程序&#…

win10 查看已连接过的wifi的密码

1 打开管理员模式的CMD 2 输入命令查看WIFI名称 netsh wlan show profiles 上面的列表右边,就是wifi名称 3 输入指令,查看wifi密码 netsh wlan show profile name"WIFI名称" keyclear

淘宝商品详情数据采集

淘宝商品详情数据采集的方法如下: 确定采集目标:明确要采集的商品信息,如商品标题、价格、销量、评论、图片等。选择采集工具:可以选择Scrapy框架、Java的WebMagic框架等。编写爬虫程序:进入目标文件夹,输…

Python语言学习实战-内置函数property()的使用(附源码和实现效果)

实现功能 property()是Python内置函数,用于创建一个特殊的属性,该属性可以像普通属性一样访问,但其值是通过方法计算得出的。它通常用于控制对类的私有属性的访问,以实现更好的封装性和安全性。 property()函数的语法如下&#x…

ThreeJS-3D教学二基础形状展示

three中提供了22 个基础模型,此案例除了 EdgesGeometry、ExtrudeGeometry、TextGeometry、WireframeGeometry,涵盖 17 个形状。 Fog 雾化设置,这是scene场景效果EdgesGeometry , WireframeGeometry 更多地可能作为辅助功能去查看几何体的边和…

解决kali beef启动失败问题及实战

文章目录 一、解决方法二、靶场实战应用1.首先打开dvwa这个靶场,设置难度为low2.打开xss-stored3.准备payload4.提交payload5.利用 一、解决方法 首先需卸载 ruby apt remove ruby 卸载 beef apt remove beef-xss 重新安装ruby apt-get install ruby apt-get insta…

外国电影字幕翻译,怎么把英文字幕翻译成中文字幕?

我们知道,在国内外文化交流中,影视字幕翻译扮演着重要的角色,不仅让观众领略到异国风情,更能达到文化传播的功能。那么,针对外国电影字幕翻译,怎么把英文字幕翻译成中文字幕呢,有什么好的技巧呢…

C++数据结构 -- 哈希表

目录 一、哈希概念二、 哈希冲突三、 哈希函数四、 减少哈希冲突常用的方法4.1 闭散列4.1.1 闭散列的开放定址法的增容4.1.2 闭散列的开放定址法的哈希结构的实现 4.3 开散列4.3.1 开散列概念4.3.2 插入元素4.3.2 删除元素4.3.3 开散列的哈希桶的增容4.3.4 开散列的哈希桶(拉链…

VB将十进制整数转换成16进制以内的任意进制数

VB将十进制整数转换成16进制以内的任意进制数 数值转换,能够将十进制整数转换成16进制以内的任意进制数 Private Function DecToN(ByVal x%, ByVal n%) As StringDim p() As String, y$, r%p Split("0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F", ",")I…

基于Java学生档案管理系统设计实现(源码+lw+部署文档+讲解等)

博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…

重磅发布!汉威科技燃气安全一站式解决方案全面覆盖燃气安全最新需求

近年来,我国陆续出台相关国家政策、标准等文件,对燃气安全建设提出一系列新要求,尤其是近期国务院安委会印发的《全国城镇燃气安全专项整治工作方案》,将燃气安全建设提升至新的高度。要实现全链条整治并做到标本兼治,…

【Vue】浏览器自定义格式化工具

当我们不启用浏览器自定义格式化工具,输出 Ref 或者 Reactive 类的值出输出完整的返回值对象,而且 value 值需要再次点击才可以得到。 为了解决这个问题,我们可以开启浏览器自定义格式化工具。 点击 setting 齿轮 依次找到 preference ->…

【探索C++】C++对C语言的扩展

(꒪ꇴ꒪ ),Hello我是祐言QAQ我的博客主页:C/C语言,数据结构,Linux基础,ARM开发板,网络编程等领域UP🌍快上🚘,一起学习,让我们成为一个强大的攻城狮&#xff0…

30.链表练习题(1)(王道2023数据结构2.3.7节1-8题)

【前面使用的所有链表的定义在第29节】 试题1: 设计一个递归算法,删除不带头结点的单链表L中所有值为x的结点。 首先来看非递归算法,暴力遍历: int Del(LinkList &L,ElemType x){ //此函数实现删除链表中为x的元素LNode *…

oracle分组排序取第一条数据

row_number()over(partition by 分组字段 order by 排序字段) 例:select * from ( select id,dealer_name,row_number()over(partition by dealer_name order by create_time ) r from mr) where r1

欧盟对中反补贴引发恐慌 | 百能云芯

中德汽车产业链紧密交织,欧盟对中国电动汽车反补贴的调查可能对欧洲本土产业造成负面影响。欧盟计划到2035年停售非零碳排放汽车,这为中国电动汽车在欧洲市场寻求机会提供了契机,但中国电动车的快速崛起引发了国际社会的警惕。 欧盟委员会主席…