前言

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

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

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

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


概述原理

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

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

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

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

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


实现方案

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

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

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

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

不过easytrader对于同花顺客户端已经无法跑通了,另外一个THSTrader库,测试了下目前也是失效的(有可能和不同版本的客户端不一致了)。

我在THSTrader库的基础上做了二次调整完成了查余额、查持仓自动买卖的功能。

自动下单的第一步是打开交易软件并且登陆上去。

选择登陆同花顺交易客户端的原因是同花顺客户端是可以用来登陆其他证券公司账户的,这样就不用再使用广发、方正等证券客户端了。

从交易客户端可以看到需要填入验证码,说明一下的是,当有验证码要识别的时候,可以使用esseract库完成。

不过如果事先勾选了自动登录的话就不需要输入验证码了,打开后则自动完成登录。

登陆以后,再接下来的工作就是调用pywinauto提供的处理窗体句柄的接口,配合上鼠标和键盘操作来模拟人操作界面上的一些菜单项。

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

在pywinauto中Application()实例是与自动化的应用程序的所有工作的联系点。 因此,Application实例需要连接到进程。有两种方法可以做到这一点:

start(self, cmd_line, timeout=app_start_timeout)  # 实例方法:
connect(self, **kwargs)  # instance method:
  • start() 在应用程序未运行且需要启动它时使用。

  • connect() 是指定已在运行的应用程序,也就是说在使用connect ()之前,应用程序必须已经打开了。

我们这里使用的是以下语句,其中exe_path为:r"C:\同花顺软件\同花顺\xiadan.exe"

self.app = pywinauto.Application().connect(path=exe_path, timeout=10)

一旦应用程序实例知道它连接到哪个应用程序,就需要指定要处理的对话框。

我们可以使用标题或者属性来选择对话框。比如:

self.main_wnd = self.app.window(title_re="网上股票交易系统5.0")

然后在对话框上通过control_id和class_name指定控件进行操作。对于如何确定要操作控件的control_id和class_name,可以使用Spy++ 小工具。

self.main_wnd.window(control_id=129, class_name='SysTreeView32')

发送键盘和鼠标处理是用以下方式:

pywinauto.keyboard.send_keys("{ENTER}")
self.app.top_window().window(control_id=0x417, class_name='CVirtualGridCtrl').double_click(coords=(x, y))

效果展示

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

我们基于THSTrader库做了二次更改调通了关键的功能。比如自动下单的效果展示如下,我们将全市场中筛选出来的双底形态按现价买入。

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

说明

1. 我们会把完整的源码上传到知识星球《玩转股票量化交易》中,帮助小伙伴们更好地掌握这个方法。

2. 想要加入知识星球《玩转股票量化交易》的小伙伴记得先微信call我获取福利,名额有限先到先得!

元宵大师的量化交易书籍开售!!
京东、当当、天猫有售!!

小散量化炒股记|要克服人性弱点?激活股票全自动化交易!相关推荐

  1. 小散量化炒股记|趋势指标金叉死叉策略在震荡行情中怎么处理

    前言 相信大家都听说了量化交易这个东西了吧!量化交易是一种新兴的系统化金融投资方法. 那么,什么才是普通股民所适合的量化交易打开方式呢? 本文就用一个接地气的股票分析场景--典型的趋势指标金叉死叉策略 ...

  2. 小散量化炒股记|股价如波浪起伏,教你用量化识别波段的极值点

    前言 相信大家都听说了量化交易这个东西了吧!量化交易是一种新兴的系统化金融投资方法. 那么,什么才是普通股民所适合的量化交易打开方式呢? 本文就用一个接地气的股票分析场景 -- 用量化方法识别股价波段 ...

  3. 小散量化炒股记|搭建本地化的股票量化数据库这么几步就够了

    前言 相信大家都听说了量化交易这个东西了吧! 量化交易是一种新兴的系统化金融投资方法,它综合多个学科的知识,用先进的数学模型代替人的主观思维制定交易策略,利用计算机强大的运算力从庞大的股票.债券. 期 ...

  4. 小散量化炒股记|说某个指标能赚钱?不盲从,先量化回测一番!

    前言 相信大家都听说了量化交易这个东西了吧!量化交易是一种新兴的系统化金融投资方法. 那么,什么才是普通股民所适合的量化交易打开方式呢? 本文就用一个接地气的股票分析场景 -- 用量化回测来识别技术指 ...

  5. python 主力资金_小散量化炒股记|一文揭秘主力、散户资金流入流出的来龙去脉...

    前言 我们经常听到这样的股市要闻:"主力资金全天净流出140.95亿元--" 目前很多行情软件也提供了主力资金流入流出.散户资金流入流出等数据. 很多交易者会依据这些"主 ...

  6. 小散量化炒股记|手把手教你转换通达信公式,盘整后均线粘合突破

    前言 通达信的公式编写功能非常流行,很多高手都是在通达信上编写公式来分析股票的. 作为过来人,建议大家在初期的策略研究阶段,选一个通用的平台进行策略研究,因为有现成的功能模块可以调用,这样就能把精力聚 ...

  7. 小散量化炒股记|基于多任务爬虫技术, 实现A股实时行情Level1采样

    前言 股票行情数据对量化交易者来说非常重要,无论是短线交易者还是中长线交易着. 对于短线交易者来说,获取实时行情数据的方案涉及到盘中分析和买卖点监测的时效性. 对于中长线交易中来说,盘后更新全市场数据 ...

  8. 小散量化炒股记|如何研判主力的踪迹!计算筹码分布图有妙用!

    前言 "筹码分布"自从问世以来一直受到广大投资者的追捧,它是把股票按不同价位上的流通数量做了排布,从而反映了这个股票对于全体投资者来说持仓成本的分布情况. 我们知道主力的常用手段是 ...

  9. 小散量化炒股记|MySQL搭建股票量化数据库完整模版来袭

    前言 数据是量化交易的源头,如何高效地管理大量数据是量化交易分析中非常关键的环节.数据库就是最佳的解决方案. 通过API接口获取到股票行情数据之后,我们可以存入到数据库之中,这样下次调用的时候只需要从 ...

最新文章

  1. How to Convert Array to ArrayList in Java?
  2. php yield 递归,递归运行所有yield请求h的废弃输出文件
  3. kubeadm 线上集群部署(四) k8s node 节点初始化安装
  4. 下列哪个不是目前python里的内置模块-不吹不擂,你想要的Python面试都在这里了【315+道题】...
  5. can硬件滤波 stm32cubemx_STM32CubeMX系列教程12:控制器局域网络(CAN)
  6. GoogleClosureLibrary 中的Component 模型纪要
  7. 解决安装XMind出现Invalid Configuration Location The configuration area at ‘C:\Users\Administrator\Applicat
  8. 「我去,这也能行!」令人惊叹的8个深度学习应用
  9. pc端vue项目打开pdf文件;网页查看pdf文件;浏览器直接打开pdf文件
  10. 实验五:编写、调试具有多个段的程序
  11. C# 给Excel添加水印
  12. java8中的date和joda time中的日期相互转换
  13. [ERROR] No plugin found for prefix ‘mybatis-generator‘ in the current project and in the plugin grou
  14. TVDI中线性拟合干湿边的步骤
  15. 计算机中year函数怎么使用,excel2010中YEAR函数的使用方法
  16. jwt的token自动续约_关于JWTToken自动续期的解决方案
  17. 《大学》修身、齐家、治国、平天下
  18. 009Java知识点小结--继承和多态
  19. 26岁零基础想转行做软件测试可行吗?多方面分析
  20. 本体(Ontology)综述

热门文章

  1. jPlayer插件使用踩过的坑
  2. 设计模式-静态代理和动态代理
  3. 看看人家那网页版聊天室系统,那叫一个优雅
  4. C++ IO标准库 文件操作
  5. oracle 日期函数(reprint)
  6. Git 16. 配置Git忽略文件
  7. FTP的两种传输模式
  8. 两圆圆心距离计算及位置关系判断(C++实现)
  9. 你不是一个人在战斗——软件项目团队模型
  10. 《RPC实战与核心原理》学习笔记Day1