easytrader 是一个非常流行的 Python 开源库,主要用于模拟券商的登录和交易操作,它通过解析券商网页或客户端的界面元素,实现程序化的登录、查询持仓、查询资金、下单等操作。

核心特点
- 模拟交易:这是
easytrader最核心的用途,它不连接真实的券商交易接口,而是模拟用户的操作,因此非常适合用于量化策略的回测和模拟盘验证,无需担心真实资金的风险。 - 支持多家券商:支持市面上主流的券商,如华泰证券(涨乐财富通)、中信证券(信e投)、东方财富(东方财富网/Choice)、平安证券(平安证券)、招商证券(智远理财)等。
- 易于使用:封装了复杂的底层操作(如网页解析、元素定位),提供了简洁的 Python API,让用户可以快速上手。
- 功能全面:支持登录、获取账户信息(资金、持仓)、买入、卖出、撤单等大部分常见的交易操作。
安装
你需要通过 pip 安装它:
pip install easytrader
基本使用流程
使用 easytrader 的基本流程通常分为三步:
- 创建客户端对象。
- 登录:需要提供用户名、密码,以及可能需要的交易密码或验证码。
- 执行操作:调用对象的方法进行交易或查询。
详细示例
下面我们以最常用的华泰证券(涨乐财富通)为例,展示一个完整的流程。
准备工作
- 安装
easytrader。 - 确保你已经开通了对应券商的账户,并安装了其官方交易软件(如涨乐财富通)。
- 重要提示:在首次使用前,你需要先手动登录一次券商的交易软件或网页版,并勾选“记住密码”或“自动登录”选项。
easytrader正是读取这些保存的登录信息来实现自动登录的。
示例代码:登录并获取账户信息
import easytrader
# 创建客户端对象
# 对于华泰证券,使用 'yh_client' 类型
user = easytrader.use('yh_client') # 或者 easytrader.use('ht')
# --- 登录信息 ---
# easytrader 会自动在本地查找你之前登录时保存的 cookies 和信息
# 所以通常情况下,你只需要指定用户名和密码
# 如果找不到自动登录信息,可能需要手动指定路径或提供更多信息
user.prepare('username', 'password')
# 如果你需要指定配置文件的路径(例如在服务器上运行)
# user_path = '/path/to/your/easytrader_config.json'
# user = easytrader.use('yh_client')
# user.prepare(user_path=user_path)
try:
# 登录
print("正在登录...")
user.login()
print("登录成功!")
# --- 获取账户信息 ---
# 获取资金信息
balance_info = user.balance
print("\n--- 资金信息 ---")
print(f"总资产: {balance_info['total_assets']}")
print(f"可用资金: {balance_info['available']}")
print(f"持仓市值: {balance_info['market_value']}")
# 获取持仓信息
positions = user.position
print("\n--- 持仓信息 ---")
if positions:
for pos in positions:
print(f"股票代码: {pos['stock_code']}, 名称: {pos['stock_name']}, "
f"持仓: {pos['volume']}股, 成本价: {pos['cost_price']}, "
f"当前价: {pos['current_price']}, 市值: {pos['market_value']}")
else:
print("当前无持仓。")
except Exception as e:
print(f"操作失败: {e}")
print("请检查:")
print("1. 用户名和密码是否正确。")
print("2. 是否已手动登录券商软件并勾选'记住密码'。")
print("3. 券商软件或网页是否有更新,导致元素定位失败。")
示例代码:买入/卖出股票
import easytrader
# 假设已经登录成功(复用上面的登录代码)
user = easytrader.use('yh_client')
user.prepare('username', 'password')
user.login()
# --- 买入操作 ---
# 注意:模拟交易,不会真实扣款
stock_code = '600519' # 贵州茅台
stock_name = '贵州茅台'
buy_price = 1800.0 # 买入价格
buy_volume = 100 # 买入数量(必须是100的整数倍,根据券商规则)
print(f"\n尝试买入 {stock_name} ({stock_code})...")
try:
# 买入方法
user.buy(stock_code, price=buy_price, volume=buy_volume)
print(f"模拟买入成功!委托价格: {buy_price}, 数量: {buy_volume}股")
except Exception as e:
print(f"买入失败: {e}")
# --- 卖出操作 ---
# 假设你上面已经成功买入,现在想卖出一部分
sell_volume = 50 # 卖出数量
print(f"\n尝试卖出 {stock_name} ({stock_code})...")
try:
# 卖出方法
user.sell(stock_code, price=buy_price, volume=sell_volume)
print(f"模拟卖出成功!委托价格: {buy_price}, 数量: {sell_volume}股")
except Exception as e:
print(f"卖出失败: {e}")
支持的券商列表
easytrader 支持多种券商,创建客户端时需要指定对应的类型,以下是部分支持的券商及其对应的类型字符串:

| 券商名称 | 客户端类型字符串 | 备注 |
|---|---|---|
| 华泰证券 | 'yh_client' |
最常用,基于涨乐财富通 |
| 中信证券 | 'zx_client' |
基于信e投 |
| 东方财富 | 'gf_client' |
基于东方财富网或Choice终端 |
| 平安证券 | 'pa_client' |
基于平安证券 |
| 招商证券 | 'zs_client' |
基于智远理财 |
| 广发证券 | 'gf_client' |
与东方财富类似,可能需要配置区分 |
| 银河证券 | 'yh_client' |
部分版本支持 |
| 海通证券 | 'ht_client' |
基于e海通财 |
| 国泰君安 | 'gj_client' |
基于君弘APP |
如何查看所有支持的券商?
你可以查看 easytrader 的源代码,在 clients 目录下会列出所有支持的客户端。
import easytrader
import os
# 查看支持的客户端类型
clients_dir = os.path.join(os.path.dirname(easytrader.__file__), 'clients')
supported_brokers = [f for f in os.listdir(clients_dir) if f.endswith('.py') and f != '__init__.py']
print("支持的券商列表:")
for broker in supported_brokers:
print(broker.replace('.py', ''))
重要注意事项和局限性
- 模拟交易,非实盘:这是最重要的一点!
easytrader的所有操作都是模拟的,不会影响你的真实资金,它主要用于策略验证。 - 依赖券商界面稳定性:
easytrader的底层原理是“屏幕抓取”或“网页解析”,如果券商更新了其软件或网站界面,可能会导致easytrader无法正常工作(元素定位失败),这是此类工具最大的不确定性。 - 安全性问题:由于需要读取本地保存的登录信息(cookies),请确保你的电脑环境安全,不要将相关配置文件随意分享。
- 性能限制:相比官方提供的 API(如 REST API),
easytrader的性能要低得多,不适合进行高频交易或需要极低延迟的策略。 - 功能限制:并非券商官方提供的所有功能都能通过
easytrader实现,它主要覆盖了常见的交易和查询功能。
easytrader 是一个非常适合 Python 初学者和量化爱好者的工具,它极大地降低了进行量化交易回测的门槛,让你可以专注于策略逻辑本身,而无需关心复杂的券商接口对接。
如果你的需求是:
- 快速验证一个交易想法。
- 学习如何用 Python 进行程序化交易。
- 进行策略的模拟盘测试。
easytrader 是一个绝佳的选择。
如果你的需求是:
- 进行实盘交易。
- 追求高性能和低延迟。
- 需要使用券商提供的全部高级功能。
那么你应该考虑使用券商官方提供的 API 接口。
