那是周二的下午,办公室的百叶窗把阳光切成一条条细碎的影子。坐在我对面的老陈,死死盯着屏幕上那根跳动的K线,鼠标握得手心冒汗。他在等一个破位信号,那是他盯了两周的盘面,手动下单的窗口早就开好了,就差临门一脚。
突然,曲线猛地一窜,老陈叹了口气,瘫在椅背上。还是慢了,从看到信号到手指敲下回车,那几秒钟的延迟,让成交价滑了几个点。对于我们这些既想写代码又想炒股的人来说,这种“手速”的焦虑简直是家常便饭。那一刻我就在想,既然能写脚本自动抓数据,为什么不能让代码直接帮我们点那个“买入”按钮呢?
这就不得不提GitHub上那个有点意思的项目——easytrader。
很多朋友在量化交易的路上,一开始都雄心勃勃想对接券商的直连API,结果发现门槛高得吓人,要么是资金门槛,要么是申请流程能把人劝退。easytrader走了条完全不同的路,它不搞那些高大上的底层协议,而是非常接地气地做了一个“万能遥控器”。
它的核心逻辑非常简单粗暴:既然券商都有客户端,那我就用Python控制客户端,模拟你的操作。这意味着你不需要去申请什么专业接口权限,只要你的电脑上能登录交易软件,它就能干活。
先看看怎么把这个家伙请到你的电脑里。官方的安装方式没有花里胡哨的步骤,打开终端,一行命令就能搞定:
安装完之后,它不是什么黑框程序,而是一个纯粹的Python库。真正上手的时候,你会发现它的设计思路很符合程序员的直觉。它不像传统量化框架那样需要配置一堆数据源,它只需要你告诉它:我要用哪个交易客户端。
在官方文档里,目前明确支持了几个主流的客户端类型。比如同花顺(ths)、银河(yh)、国泰君安(gtja)等。这几种基本上覆盖了市面上大部分散户常用的软件。
假设你用的是同花顺客户端,代码的初始化大概是这样的:
import easytrader# 指定使用同花顺客户端user = easytrader.use('ths')# 准备连接,这里需要传入你客户端的启动路径user.prepare(r'C:\同花顺软件\xiadan.exe')
注意看这个prepare函数,这是关键的一步。它不是在后台默默连接,而是会去启动你的交易程序。这就像是你雇了一个机器人,你不仅得告诉它要干什么,还得把工具(交易软件)递到它手里。
当这行代码跑通,你的交易客户端界面就会弹出来。这时候,easytrader在底层调用了pywinauto这个库,开始通过Windows的API去识别窗口上的按钮、输入框。这也是为什么官方文档里虽然没有大书特书,但使用这个工具有一个硬性前提:你的交易软件必须运行在Windows环境下,而且交易过程中不能最小化或者被遮挡。毕竟,它得“看”得见按钮,才能“点”得下去。
连上之后,我们最关心的无非两件事:现在有多少钱?手里拿着什么票?
easytrader把这两个操作封装得极其清爽。查询资产,直接调用:
这行代码执行完,你会拿到一个包含当前资产、可用资金、持仓市值等信息的字典。不需要你去解析什么复杂的返回码,也不需要处理网络请求的异常,它就像你自己在软件上点了一下“查询”一样,把屏幕上的数据读下来给你。
查持仓也是同理:
返回的数据里会包含证券代码、名称、持仓数量、可用数量、盈亏等等。对于做轮动策略或者仓位管理的朋友来说,这两个函数基本上能满足大部分的数据获取需求。
当然,重头戏还是交易。
买卖操作的函数设计得非常直观。比如你想买一只股票,代码里是这样写的:
user.buy(stock='600000', price=10.5, amount=100)
这里的参数对应的就是交易软件上的输入项:股票代码、价格、数量。你可能会问,这么简单能行吗?实际上,它在这个简单的函数调用背后,做了一系列繁琐的“体力活”:定位到买入的输入框,清空内容,输入代码,等待系统自动带出名称,再跳到价格框输入价格,最后跳到数量框输入数量,点击“下单”按钮,甚至还要处理那个弹出的“确认”对话框。
这一套流程如果靠人工手点,大概需要五六次鼠标点击和十几次键盘敲击,而且容易出错。交给代码,只需要毫秒级的时间,而且只要参数传对了,它永远不会把“价格”填到“数量”栏里去。
卖出操作也是类似的逻辑:
user.sell(stock='600000', price=11.0, amount=100)
对于一些高频的日内交易或者网格交易策略,这种自动化的价值是巨大的。你可以把策略逻辑写在循环里,一旦满足条件,直接调用buy或sell,完全消除了人工犹豫的时间成本。
不过,这里必须得泼一盆冷水,也是官方文档里虽然没有强调但极其重要的一点:它是基于UI自动化的,不是基于API的。
这意味着它的稳定性高度依赖于交易客户端的界面是否发生变化。如果券商某天更新了软件,改了窗口的类名,或者挪动了按钮的位置,easytrader可能就会“找不到北”。这也是为什么在使用这类工具时,必须做好异常处理,绝对不能把它当成那种永不掉线的专业交易系统来用。
另外,安全性也是个大问题。你的账号密码是保存在交易客户端里的,easytrader只是控制客户端,不直接接触你的密码,这算是一种相对安全的做法。但是,一旦你的脚本里写了buy或者sell的逻辑,且没有加上严格的风控条件(比如单笔最大金额限制、止损限制),那么一个逻辑bug可能就是真金白银的损失。
GitHub上这个项目虽然看起来代码不算特别庞大,但它解决了一个非常具体的痛点:让个人投资者能够用极低的成本,实现半自动化的交易执行。它填补了“手动盯盘”和“专业量化机构”之间的巨大空白。
看着老陈还在那里盯着盘面纠结,我其实很想把这段代码发给他。但我知道,工具只是放大器。如果你的交易逻辑本身是亏钱的,那么自动化只会让你亏得更快、更彻底。
量化交易的本质,不是用代码去赌博,而是用纪律去执行你对市场的认知。
你有没有试过用代码去控制生活中的某个重复性操作?那种看着屏幕上的元素自己动起来的感觉,是不是既神奇又有点让人心里发毛?欢迎在评论区聊聊你的自动化尝试。