当前位置:首页>python>走向实盘:如何利用 Python 库 easytrader 探索 A 股自动化交易

走向实盘:如何利用 Python 库 easytrader 探索 A 股自动化交易

  • 2026-10-11 07:39:06
走向实盘:如何利用 Python 库 easytrader 探索 A 股自动化交易

在量化投资的完整生命周期中,我们通常会经历数据获取、指标计算、策略构建、历史回测和可视化等多个阶段。然而,当策略在历史数据上表现优异,并在实盘中生成了明确的交易信号时,如何快速、准确地执行交易往往成为个人开发者面临的痛点。

手动下单不仅存在延迟,还容易受到情绪干扰。为了解决从“策略信号”到“实际交易”的最后一公里问题,开源社区提供了一个实用的技术探索工具——easytrader。

目前,该项目在 GitHub 上获得了较多关注(约 9.7k+ Stars),它允许开发者通过 Python 代码对交易客户端进行控制,以实现自动化下单及账户查询。

  • 项目地址:https://github.com/shidenggui/easytrader

  • 协议:MIT License


一、 ⚠️ 重要风险提示与合规说明

在介绍任何自动化交易工具之前,必须首先强调风控与合规。程序化交易直接涉及资金安全,请务必知悉以下风险:

  1. 资金损失风险:代码中的逻辑缺陷、网络延迟、客户端卡顿或券商系统异常,均可能导致重复下单、漏下单或异常方向交易,从而造成不可逆的真金白银亏损。

  2. 合规性与技术风险:easytrader 早期主要通过模拟客户端的 UI 操作(如点击、输入)来实现交易。这种方式属于灰色地带,且极其依赖客户端版本的稳定性,一旦软件更新界面,自动化脚本可能瞬间失效。

  3. 合规建议:相比于模拟操作,更推荐使用券商官方提供的合规量化接口(如 miniQMT)。在任何实盘运行前,建议在模拟盘中进行至少 1-3 个月的充分测试,并从极小资金开始验证,同时必须在代码中加入严格的硬止损和异常报警机制。


二、 easytrader 的核心功能与通道对比

easytrader 的设计初衷是提供统一的 API 接口,用以驱动不同的交易通道。其主要功能包括:

  • 基础交易:支持 A 股的限价/市价买入与卖出。

  • 账户管理:支持查询账户可用余额、当前持仓、今日委托、今日成交。

  • 订单控制:支持根据委托编号自动撤单。

  • 信号跟踪:支持跟踪 JoinQuant(聚宽)、RiceQuant(米筐)的模拟信号或雪球组合的调仓动作。

交易通道对比

交易方式实现原理合规性与稳定性推荐度
miniQMT券商官方 API 接口直接通信✅ 官方合规,速度快,运行稳定⭐⭐⭐⭐⭐ (强烈推荐)
同花顺客户端通过 pywinauto 模拟鼠标键盘操作⚠️ 依赖本地 Windows 环境,易因客户端更新失效⭐⭐
雪球组合模拟网页/App 协议跟踪组合调仓✅ 适合模拟盘跟踪,无法直接用于真实证券账户⭐⭐⭐

三、 环境安装与快速上手

1. 安装库

在终端中执行以下命令安装:

pip install easytrader

2. 基础用法:连接同花顺客户端(模拟操作)

若使用同花顺客户端方式,需要确保是在 Windows 系统下,且同花顺客户端处于登录并运行状态。

import easytrader# 初始化并连接本地已登录的同花顺客户端交易程序user = easytrader.use('ths')user.connect(r'C:\同花顺\xiadan.exe')  # 替换为您本地的交易程序路径# 1. 获取账户基本信息balance = user.balanceprint("账户资金状况:", balance)# 2. 查询当前持仓positions = user.positionprint("当前持仓:", positions)# 3. 提交限价委托# 买入 平安银行 1000 股,价格 10.5 元user.buy('000001', price=10.5, amount=1000)# 卖出 平安银行 500 股,价格 11.0 元user.sell('000001', price=11.0, amount=500)# 4. 撤单操作# 先获取今日委托entrusts = user.entrustprint("今日委托列表:", entrusts)# 根据委托编号进行撤单# user.cancel_entrust('你的委托编号')

3. 推荐用法:接入券商官方 miniQMT

miniQMT 是目前量化个人投资者较为推崇的合规通道。通过 easytrader 接入 miniQMT,代码结构保持高度一致,但执行速度和稳定性将大幅提升。

import easytrader# 指定使用 miniqmt 驱动user = easytrader.use('miniqmt')# 连接本地极简版客户端(需要券商开通相关权限并运行客户端)user.connect(    xt_path=r'C:\国金证券QMT\bin.x64',  # 替换为实际的 QMT 路径    account='你的资金账号')# 后续的交易与查询 API 与上方保持一致positions = user.positionprint(positions)

四、 高级特性:同步第三方模拟盘信号

对于习惯在第三方平台(如聚宽、雪球)运行模拟策略的开发者,easytrader 提供了方便的跟单接口。

1. 跟踪 JoinQuant 模拟信号

import easytraderuser = easytrader.use('ths')user.connect(r'C:\同花顺\xiadan.exe')# 每隔 60 秒检测一次指定的聚宽模拟策略,一旦产生调仓信号则在本地自动同步user.follow(    'joinquant',    strategy_id='您的策略ID',    track_interval=60)

2. 跟踪雪球组合调仓

import easytraderuser = easytrader.use('xq')# 跟踪特定的雪球组合user.follow(    'xueqiu',    portfolio_code='ZH123456',  # 替换为目标雪球组合代码    track_interval=60)

五、 实战串联:从行情计算到自动下单的完整闭环

为了展示如何将这一环节融入到日常量化研究中,我们可以将数据源获取、技术指标计算与自动化交易结合,构建一个极简的闭环示例。

注:以下策略仅作为技术链路演示,不构成任何投资建议。

import akshare as akimport pandas_ta as taimport easytraderimport timedef run_strategy_flow():    # 1. 获取日线历史数据 (以平安银行 000001 为例)    df = ak.stock_zh_a_hist(        symbol="000001", period="daily",        start_date="20260101", adjust="qfq"    )    df.columns = ['date', 'open', 'close', 'high', 'low', 'vol', 'amount', 'amp', 'pct', 'chg', 'turn']    # 2. 利用 pandas_ta 计算 RSI 与 MACD 指标    df.ta.rsi(length=14, append=True)    df.ta.macd(append=True)    # 获取最新一根 K 线的数据    last_row = df.iloc[-1]    current_close = last_row['close']    rsi_val = last_row['RSI_14']    macd_hist = last_row['MACDh_12_26_9']    print(f"当前收盘价: {current_close}, RSI(14): {rsi_val:.2f}, MACD_Hist: {macd_hist:.4f}")    # 3. 制定简单的逻辑信号    signal = 'HOLD'    if rsi_val < 30 and macd_hist > 0:        signal = 'BUY'    elif rsi_val > 70:        signal = 'SELL'    # 4. 信号执行 (这里以 miniQMT 示例)    if signal == 'BUY':        print("触发买入信号,正在下单...")        user = easytrader.use('miniqmt')        user.connect(xt_path=r'C:\QMT\bin.x64', account='YOUR_ACCOUNT')        # 限价买入 100 股        user.buy('000001', price=current_close, amount=100)        print("✅ 买入指令已发送")    elif signal == 'SELL':        print("触发卖出信号,正在下单...")        user = easytrader.use('miniqmt')        user.connect(xt_path=r'C:\QMT\bin.x64', account='YOUR_ACCOUNT')        # 限价卖出 100 股        user.sell('000001', price=current_close, amount=100)        print("✅ 卖出指令已发送")    else:        print("维持现状,不进行交易操作。")if __name__ == "__main__":    run_strategy_flow()

六、 项目配套生态与局限性

配套生态

除了交易执行,作者还开源了两个相辅相成的项目:

  1. easyquotation:用于实时获取 A 股行情(支持新浪、腾讯等源)。

  2. easyquant:一个简单的事件驱动量化交易框架,将行情获取与 easytrader 的交易执行整合在了一起。

局限性说明

  • 系统环境限制:若采用同花顺客户端模拟方式,必须在 Windows 物理机或云服务器上运行,无法在 Linux 纯无头(Headless)环境下直接运行。

  • 界面变动敏感:模拟操作极易因同花顺等客户端的版本升级、弹窗打扰(如升级提示、活动弹窗)而失效,需要开发者定期维护并处理弹窗。

  • 缺乏内置风控:easytrader 仅是一个底层的“执行器”,不带有资金比例控制、单笔上限、异常熔断等风控功能。这些逻辑必须由开发者在自己的上层策略代码中严密实现。


七、 结语

easytrader 为个人量化爱好者提供了一条低门槛连接实盘的通道。但在实际操作中,“自动交易”并不等同于“自动盈利”。糟糕的策略配合高频的自动交易,只会加速本金的磨损。

建议有志于实盘自动化的朋友,先从模拟盘或极小资金的合规接口(如 miniQMT)开始探索,不断优化系统容错率与异常处理机制,敬畏市场,稳健前行。


免责声明:本文仅作为开源技术项目的客观分享,不构成任何投资建议或要约。程序化交易具有高度风险,读者需对自身账户的资金安全与交易合规性承担全部责任。

最新文章

随机文章