GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — GitHub - AllenPan-Git/SimpleQuant: 低代码的 A 股量化回测工具 · Low-code quant backtesting for China A-shares

BranchesTags
Open more actions menu

Latest commit

 

History

137 Commits
137 Commits

Folders and files

NameName
Last commit message
Last commit date
.github
.github
 
 
docs
docs
 
 
gui
gui
 
 
installer
installer
 
 
simplequant
simplequant
 
 
tests
tests
 
 
tools
tools
 
 
ui
ui
 
 
.gitattributes
.gitattributes
 
 
.gitignore
.gitignore
 
 
CHANGELOG.md
CHANGELOG.md
 
 
LICENSE
LICENSE
 
 
README.en.md
README.en.md
 
 
README.md
README.md
 
 
SimpleQuant.spec
SimpleQuant.spec
 
 
build.bat
build.bat
 
 
constraints.txt
constraints.txt
 
 
main.py
main.py
 
 
paper_daily.bat
paper_daily.bat
 
 
paper_daily.sh
paper_daily.sh
 
 
pytest.ini
pytest.ini
 
 
requirements.txt
requirements.txt
 
 
start.bat
start.bat
 
 
start.sh
start.sh
 
 

Repository files navigation

SimpleQuant

简体中文 · English

Windows / macOS / Linux 桌面程序 · 回测引擎 Backtrader · GPLv3 开源

视频教程:不会编程也能做量化:14 分钟走完数据 → 策略 → 回测 → 优化 → 模拟盘(B 站)

SimpleQuant 是面向 A 股的低代码量化回测工具,覆盖股票、ETF(含债券 ETF)与可转债。通过点选即可完成「准备数据 → 搭建策略 → 回测 → 参数优化 → 模拟盘」的完整流程;需要时也可以直接编写 Python 策略、进行多因子选股(股票或可转债)、根据风险测评在多类资产之间进行配置,或将策略导出到聚宽、掘金、QMT 复核。

免责声明:本软件仅供学习与研究使用,不构成任何投资建议。回测与模拟盘结果不代表未来收益;据此进行实盘交易的风险由使用者自行承担。

回测报告

界面

左侧栏按用途分组(3.0 起的默认界面):

分组 栏目
今日:继续上次的工作、今天的模拟盘、开始新的工作
研究 择时策略(工作台)、多因子选股、资产配置、因子实验室
跟踪 模拟盘
资料 数据(行情、选股数据、可转债、利率)、工具(个股概览、持仓诊断)

择时策略与多因子选股都是一页完成:设置、回测报告与验证放在同一页,顶部的四步进度(01 设置 — 02 回测 — 03 验证 — 04 模拟盘)表示当前这个策略走到了哪一步,并给出建议的下一步,点击即可前往。回测用到的数据缺失时,提示旁直接提供「下载」,在原地显示进度。

首页

数据

AKShare 日线(东方财富;连接失败时 ETF 与股票自动改用新浪,回测报告会注明数据来源)、BaoStock 5~60 分钟线与股票日线(含 PE、PB、PS、换手率)、通达信本地 1 / 5 分钟线,一键下载到本地数据库;AKShare 下载沪深300、中证500 等常见宽基 ETF / 指数时,附带所跟踪指数的市盈率与市净率(每月更新),可用于估值百分位条件;也可导入 CSV(K 线,或含 last 列的快照 / Tick,自动合成 N 秒 / N 分钟 K 线)。另可下载中债收益率曲线(10 年期国债收益率、期限利差、信用利差),用于择时规则。

择时策略:编写

在工作台的设置区编写策略,四种方式,任选其一:

  • 策略模板:买入持有、双均线、RSI、布林带、动量轮动(可做股债轮动)、定比再平衡(如股债 60/40)、定期定额定投、估值定投等,调整参数即可使用。
  • 条件组件:以 MA、EMA、MACD、RSI、KDJ、布林带、ATR、量比、估值与估值历史百分位、利率与信用利差、股债利差、持仓收益率等指标,配合上穿 / 下穿 / 大于 / 小于组合买卖规则,可设止损。可设置交易节奏:条件须连续 N 根 K 线成立(过滤一两天的假突破)、卖出后 N 根 K 线内不再买入、分批建仓(仓位分成几份,按上涨 / 下跌幅度或买入条件再次满足时加仓)。
  • 自然语言描述(AI):例如「MACD 金叉且 RSI 低于 70 时买入,死叉或亏损超过 8% 卖出」,由大模型转换为规则(只生成规则,不生成代码),并列出无法表达的部分。结果附「条件解读」:逐条标明是「状态」条件(大于 / 小于,每根 K 线都检查)还是「事件」条件(上穿 / 下穿,只在穿越当天成立);描述与规则的说法不一致、或同一段描述两次生成的规则不同时给出提醒。
  • 编写代码:编写 Python 策略类,整手、T+1、交易费用照常计算,参数可直接用于优化。

择时策略:回测

支持多标的(资金平均分配)、自选区间与费率;分红可选「分红再投资」或「现金分红并扣红利税」。报告先给出结论段落,再列出收益、年化、夏普、回撤、胜率、盈亏比,以及资产曲线、K 线买卖点、每笔交易盈亏和成交明细,并提供 Backtrader 原生图。报告还会进行可信度检查:交易次数是否足够、收益是否集中于少数交易、按交易重抽样的收益区间、与相同笔数和持有时间的随机买卖相比好于多少比例(判断收益来自买卖时机还是持有期间的整体涨跌)、期末未卖出的持仓是否有较大浮亏。配置大模型后,可由 AI 解读结果:先将年化收益与无风险收益比较,再参照夏普、卡玛比率的常用区间评价,基准下跌时说明超额收益的来源;还会参考交易明细,指出收益是否依赖少数几笔交易、期末未平仓的持仓是否有较大浮亏。

可设每期追加资金(每月 / 每周,即定投):收益按累计投入计算并给出资金加权年化(XIRR),基准为同样的资金、同样的日期买入持有,回撤按扣除追加资金后的净值计算(详见下方「定投」)。

A 股交易规则:100 股整手(按真实股价计算,复权数据附带不复权价;成交明细显示真实股数和成交价)、按品种执行 T+1(股票与境内股票 ETF 为 T+1;债券、货币、黄金、商品、跨境 ETF 及可转债为 T+0,按代码和名称自动判断)、卖出印花税、最低佣金、滑点;信号在 K 线收盘时产生,下一根 K 线开盘成交。

择时策略:验证

工作台的「验证」标签列出各项检验及完成情况:可信度检查、随机买卖对照、调仓日检验(随回测自动完成),以及参数优化与滚动优化。参数优化对任意数值参数进行网格搜索(最多 3 个参数、500 组,多进程并行),以热力图查看参数表现的分布;以前段数据选择参数、后段数据做样本外检验,并提示过拟合(测试的组合过多、多数组合亏损、样本外表现明显下降等);「最优参数逐年排名」列出最优参数在每个自然年排在所有组合的第几名,多数年份排不进前一半时给出警告。另提供滚动优化(Walk-forward),拼接出完全样本外的资产曲线。

参数优化

模拟盘

以已保存的策略开设模拟账户,无需券商账户。每个交易日收盘后更新数据,以与回测相同的代码推进账户,并给出下一交易日开盘需执行的交易;可设置定时任务每日自动运行(Windows、macOS、Linux 均支持);尚未设置定时任务、上次运行失败或数据多日未更新时,首页会给出提示。

模拟盘

多因子选股

基于 BaoStock 免费数据,在沪深300、中证500 的历史成分股中按价值、动量、低波动、质量、成长等因子评分,定期调仓;也可以在全部可转债(含已退市的)中按双低、溢价率等因子选债。提供因子研究(Rank IC、分层回测、因子相关性)、行业 / 市值中性化、IC / ICIR 加权、机器学习合成因子、自定义因子与滚动优化;AI 因子挖掘由 AI 逐轮提出因子、软件只用挖掘期评估并反馈,结束后再用留出的检验期检验一次,并与现有因子比较;可以用一句话描述选股思路,再在当前方案基础上逐步修改(AI);因子研究、自定义因子与 AI 因子挖掘集中在「因子实验室」,与选股页共用股票池与已整理好的数据,检验完的因子可一键加入选股回测;选股策略同样可以开设模拟账户。

多因子选股

可转债选股

AI 因子挖掘

资产配置

参照证券公司投资者适当性管理的问卷进行风险测评(C1 保守型 ~ C5 进取型,并给出可承受的最大回撤),在现金、国债 ETF、宽基 ETF、黄金 ETF 以及自己的择时 / 选股策略之间给出参考配置:按风险等级确定大类比例,大类内部按风险平价分配,组合历史回撤超过可承受范围时自动提高稳健资产的比例。组合回测支持多种再平衡方式,并列出各成分的收益贡献、风险贡献与相关系数;权重可以手动调整后重新回测。确定配置后,可按当前权重与再平衡方式一键开设组合模拟账户,每个交易日与其他模拟账户一同推进,到再平衡时点给出下一交易日开盘的调整交易。

资产配置

组合模拟账户

导出

  • Python 脚本:可独立运行,成交与 SimpleQuant 回测逐笔一致。
  • 聚宽 / 掘金 / QMT:生成可直接导入平台的策略文件(择时与选股),用于在其他平台复核结果。

界面支持中文 / English,并提供浅色与深色主题。

安装

支持 Windows 10 / 11(64 位)、macOS 11 及以上(Apple 芯片)、Linux(x86_64)。在本仓库的 Releases 页面下载对应的文件:

系统 文件
Windows SimpleQuant-<版本>-Setup.exe
macOS(Apple 芯片:M1 及以后) SimpleQuant-<版本>-macos-arm64.dmg
Linux SimpleQuant-<版本>-linux-x86_64.tar.gz

Intel 芯片的 Mac 最后支持的版本是 0.2.5,已安装的可以继续使用,之后的版本不再提供。

GitHub 下载较慢时,可使用国内网盘(123 云盘,无需登录,提取码 ZfDO):https://1829763294.share.123pan.cn/123pan/mv2ejv-wbhtA?pwd=ZfDO

安装后,在「01 数据」页下载所需数据(AKShare、BaoStock 均为免费数据源)。

Windows

  1. 运行安装程序。程序安装到 %LOCALAPPDATA%\Programs\SimpleQuant,无需管理员权限,并创建开始菜单快捷方式(桌面快捷方式可选)。
  2. 首次运行时 Windows SmartScreen 可能提示「已保护你的电脑」,请点击「更多信息 → 仍要运行」。

macOS

  1. 打开 dmg,将 SimpleQuant 拖入「应用程序」文件夹。
  2. 本程序未经 Apple 公证(公证需要付费的开发者账号),首次打开时系统会阻止运行。放行方法(任选其一,只需一次):
    • 打开「系统设置 → 隐私与安全性」,在页面下方找到关于 SimpleQuant 的提示,点击「仍要打开」;
    • 或在终端运行:xattr -dr com.apple.quarantine /Applications/SimpleQuant.app(提示「已损坏,无法打开」时也用此方法)。
  3. 如不希望运行未经公证的程序,也可以从源码运行(见下文),步骤同样简单。

Linux

  1. 解压后运行:tar -xzf SimpleQuant-<版本>-linux-x86_64.tar.gz,然后执行 SimpleQuant/SimpleQuant。建议解压到用户目录下(自动更新需要能写入程序所在的文件夹)。
  2. 界面所需的 Qt 组件已内置。较精简的发行版如提示缺少系统库,Debian / Ubuntu 可安装:sudo apt install libxcb-cursor0 libxkbcommon-x11-0 libegl1。

说明

  • 自动更新(Windows 0.1.1 起;macOS、Linux 自首个版本起):程序启动后在后台检查 GitHub Releases 上的新版本,通常只下载有变化的文件;下载完成后提示重启,重启时替换文件并自动重新打开。需要下载完整安装包(超过 30 MB)时先询问。更新文件经签名与 SHA256 校验,替换失败时保留原版本。可在「设置」页手动检查或关闭自动检查;无法连接 GitHub 时,可在 Releases 页面手动下载新版本。Windows 0.1.0 需手动安装一次新版本。
  • 数据目录(行情库、选股数据、模拟账户、保存的策略、AI 模型设置):Windows 为 %LOCALAPPDATA%\SimpleQuant,macOS 为 ~/Library/Application Support/SimpleQuant,Linux 为 ~/.local/share/SimpleQuant(设置了 XDG_DATA_HOME 时位于其下)。升级与卸载均不会删除这些数据。可在「设置 → 数据保存位置」移到其他磁盘(复制后重启生效,原位置的数据随后自动删除)。报错日志位于数据目录下的 logs/app.log。
  • 模拟盘每日自动运行:在「模拟盘」页一键设置。Windows 使用任务计划程序,macOS 使用 launchd,Linux 使用 systemd 用户定时器(没有 systemd 时使用 crontab)。
  • 命令行:SimpleQuant --paper 不打开界面、直接推进全部模拟账户(定时任务即使用此命令);SimpleQuant --run-script 选股.py 运行导出的选股脚本。macOS 上的可执行文件为 /Applications/SimpleQuant.app/Contents/MacOS/SimpleQuant。
  • 安装版不含 LiteLLM,AI 模型请使用 Claude、OpenAI 或兼容 OpenAI 协议的服务(DeepSeek、通义千问、Kimi、智谱、Gemini、本地 Ollama 等)。

从源码运行

需要 Python 3.10 及以上版本(开发和测试使用 3.14)。

  • Windows:双击 start.bat:首次运行时自动创建虚拟环境并安装依赖,之后打开桌面窗口。
  • macOS / Linux:在终端进入项目目录,运行 sh start.sh,首次运行同样自动完成安装。
    • macOS 系统自带的 Python 版本过低,请从 python.org 或 Homebrew(brew install python)安装。
    • Linux 的桌面窗口使用系统的 GTK WebKit,Debian / Ubuntu 需安装:sudo apt install python3-venv python3-gi gir1.2-webkit2-4.1(start.sh 检测到后会让虚拟环境使用它)。缺少时程序自动改为在浏览器中打开。
  • 也可手动执行:python -m venv .venv,安装依赖 pip install -r requirements.txt -c constraints.txt,运行 python main.py(加 --browser 在浏览器中打开)。
  • 依赖版本:constraints.txt 记录经过测试的版本(Python 3.12 及以上适用),启动脚本按它安装,依赖文件更新后会自动重新安装;requirements.txt 只规定最低版本。
  • LiteLLM 为可选依赖,需要时执行 pip install litellm -c constraints.txt。
  • 源码版的数据保存在项目目录下的 data_cache、user_strategies、user_factors,与安装版相互独立。

打包

PyInstaller 不能跨系统打包,各系统的版本需在该系统上生成,输出分别位于 dist/windows、dist/macos、dist/linux。

  1. 安装打包工具:pip install pyinstaller pillow;Windows 制作安装包另需 Inno Setup 6(winget install JRSoftware.InnoSetup),Linux 另需 pip install "pywebview[qt]"(安装版的窗口使用内置的 Qt)。
  2. 修改 simplequant/__init__.py 中的版本号 __version__。
  3. Windows:双击 build.bat,生成 dist\windows\SimpleQuant\ 与安装包 SimpleQuant-<版本>-Setup.exe(配置见 SimpleQuant.spec、installer/SimpleQuant.iss)。macOS / Linux:运行 sh tools/build_unix.sh,生成 .app 与 .dmg,或程序文件夹与 .tar.gz。
  4. 发布新版本使用 tools/release.py:在本机打包 Windows 版,生成更新清单(每个文件的 SHA256,Ed25519 签名)与补丁包,打标签并上传为 GitHub Releases 草稿;标签同时触发 GitHub Actions(.github/workflows/build.yml)在 macOS 与 Linux 上测试、打包并上传,release.py 等待完成后为这些平台的清单签名。用法见文件开头。签名私钥只保存在发布者本机,程序内置对应的公钥。
  5. 图标 gui/static/icon.ico 由 tools/make_icon.py 生成;README 中的横幅与截图由 tools/readme_assets.py 生成(均需要 Microsoft Edge)。

功能详解

多因子选股
  • 数据:BaoStock 免费数据。按月查询历史成分股(避免幸存者偏差);个股下载不复权价与复权因子(收益使用后复权价,整手按真实价格计算),包含停牌、ST、涨跌停、PE / PB / PS、换手率。多进程并行、断点续传、增量更新;沪深300 首次下载约 8~10 分钟、约 80 MB。支持导出 / 导入数据包(分发前请确认数据源条款)。
  • 因子:EP、BP、SP、5 / 20 / 60 日收益、中期动量(120 日,跳过最近 20 日)、60 日波动率、20 日换手率、Amihud 非流动性,以及 ROE、毛利率、净利率、净利润 / 营收同比、总市值等财务因子,资产负债率、流动比率、经营现金流 / 净利润等排雷因子(也可作为选股条件,排除负债率过高、利润没有现金支撑的股票)。按日 MAD 去极值、z-score 标准化,多因子按方向与权重合成。
  • 财务数据:来自 BaoStock 季频数据,自首次公告日的下一个自然日起生效;迟到的旧报告期不覆盖新报告期;超过 15 个月未更新视为缺失。排雷数据(资产负债表、现金流量表)单独下载,请求次数是财务数据的两倍;资产负债率由权益乘数换算(BaoStock 的资产负债率字段 2024 年中至 2025 年报被多除了 100)。未使用 AKShare 业绩报表,因其「最新公告日期」会随后续报告更新,可能引入未来信息。
  • 因子研究:Rank IC(均值、年化 ICIR、t 值、IC>0 比例)、分层回测(各组净值、年化收益、多空组合、单调性、顶组换手)、全部因子一览、因子相关性矩阵。
  • 中性化:逐日横截面回归,去除行业(证监会分类)和 / 或市值暴露后再标准化。
  • IC / ICIR 加权:各因子的权重与方向取过去 N 个交易日的平均 Rank IC(或 IC / 标准差),仅使用当时已完全实现的 IC。
  • 机器学习合成因子:以所选因子为特征、未来收益排名为目标,在每个调仓日只用当时已知的数据滚动训练模型,用预测值选股。可选岭回归、K 近邻、随机森林、梯度提升树(均用 numpy 实现,不需要额外安装,结果可复现);结果页对比模型、ICIR 加权与各单因子的样本外 IC,列出因子重要性,并在可信度检查中提示过拟合(训练集 IC 远高于样本外 IC)。
  • AI 因子挖掘(仅股票池):将区间按时间切成「挖掘期」与末尾的「检验期」(默认约 30%)。每轮调用一次大模型提出一批因子代码,软件只在挖掘期计算 Rank IC、t 值以及与现有因子 / 已入选因子的相关性,将结果反馈给 AI 改进或更换方向;|t| 达到下限且不与已有因子重复的入选。全部轮次结束后,才对入选因子计算一次检验期 IC,并与挖掘期最好的几个现有因子、两者的等权合成并排比较。可信度检查列出共尝试了多少个因子及相应的多重检验门槛(Bonferroni 校正),以及入选因子是否「达到门槛」「通过检验期」。AI 写的代码在本机自动运行:运行前做严格检查(禁止 import、读写文件等),并在截到较早日期的数据上重算,使用未来数据的因子不会入选。挖掘记录(设置、全部候选的结果与代码、模型每轮的说明)可导出为 Markdown;入选因子可一键保存为自定义因子。
  • 选股回测:每月 / 每周 / 每 N 天在调仓日收盘评分,选出前 N 只,次日开盘执行;先卖出落选股票,再等额买入新入选股票;停牌或开盘跌停无法卖出(此后每日重试),停牌或开盘涨停无法买入;基准为对应指数的全收益指数(含分红再投资,与策略收益口径一致;中证指数公司)。
  • 分红处理:默认「分红再投资」(后复权)。可选「现金分红并扣红利税」:除息日现金到账、送转增加股数,卖出时按持股期限扣缴红利税(≤1 个月 20%,1 个月至 1 年 10%,超过 1 年免税),与聚宽及实盘一致。BaoStock 分红表中缺失的特别分红、中期分红根据交易所除权参考价补齐。
  • 大盘条件与回撤停手:支持设定大盘空仓条件与恢复条件(基于对应基准指数日线均线、MACD 等指标);支持「净值回撤停手」,当策略净值从历史高点回撤达到设定比例时清仓并暂停调仓,待基准指数满足恢复条件(默认站上 20 日均线)企稳后在下一个调仓日恢复选股买入。
  • 另有:以自然语言描述选股(AI,可勾选「在当前方案基础上修改」,如「加入低波动因子,持股数量改为 30 只」,仅调整所述部分,其余设置保持不变)、选股回测结果的 AI 解读、每期选股的行业分布、自定义因子(编写 def factor(p),可试算覆盖率、IC 与分组收益;也可以用一句话描述,由 AI 写出代码,阅读后再试算)。
  • 个股概览(「工具」页,仅股票):输入代码或名称,查看市盈率 / 市净率走势及其在本地历史中的百分位、历年 ROE 与毛利率、逐年分红与股息率、排雷指标;只列出事实,不打分。在选股回测结果的「每期选股」中点击某一期,可查看入选股票当天的各因子值(原始值与标准分),再点击某只股票打开它的概览。
  • 持仓诊断(「工具」页,仅股票):逐只输入、粘贴券商软件中的持仓表或读取模拟账户,查看集中度(有效持仓数)、行业分布、风格(总市值、市盈率、市净率、股息率、ROE 在所选股票池中的百分位)、过去一年的相关系数,以及假设一直持有过去一年的收益、波动与回撤(与指数对照);只列出事实,不打分。
可转债选股
  • 数据:东方财富(转债列表含已退市的、条款、每日纯债价值 / 转股价值 / 转股价)、新浪(日线)、中证指数公司(中证转债指数,作为基准)。首次下载约 1000 只、约 40 MB、6~10 分钟,之后只更新仍在交易的转债。
  • 因子:双低(价格 + 转股溢价率)、转债价格、转股溢价率、纯债溢价率、转股价值、发行规模、剩余期限、正股 20 日涨幅、正股 60 日波动率、强赎触发天数;收益、动量、波动率、Amihud 等价量因子与股票通用。2018–2026 年实测双低 20 日 Rank IC 约 −0.06(t ≈ −3.3),五组收益单调。
  • 选股条件:价格上限、20 日日均成交额下限、剩余期限下限、转股溢价率上限、强赎触发天数上限。
  • 交易规则:每手 10 张、T+0;2022-08-01 起涨跌幅 ±20%,上市首日 +57.3% / −43.3%(相对面值);转债按全价交易,付息按税后利息(扣 20%)计入复权。
  • 强赎与到期:发布强制赎回或到期赎回公告的转债,公告当日起不再入选,下一个交易日开盘卖出;因停牌、违约、正股退市等意外停止交易的,当时无法预知,持仓保留、无法卖出(与实际一致)。强赎提示性公告没有历史数据,以「强赎触发天数」近似:近 30 个交易日中转股价值不低于 130 的天数(多数转债满 15 天即可强赎;2018–2026 年的强赎公告中约 97% 在公告日已达到 15 天),可作为因子或选股条件,在公告前回避。
  • 行业中性化使用正股所属行业,市值中性化使用发行规模。因子研究、选股回测、滚动优化、模拟盘、导出 Python 脚本、自然语言选股均支持;暂不支持导出到聚宽 / 掘金 / QMT,也不模拟转股、回售与下修。
  • 可转债开户有投资者适当性要求(2022 年起:前 20 个交易日日均资产不低于 10 万元,且有 2 年以上证券交易经验)。
资产配置
  • 风险测评:10 道单选题(年龄、收入、拟投资比例、收入稳定性、投资经验、投资过的品种、投资期限、投资目标、可承受的最大亏损、下跌 20% 时的处理)。总分在最低分与最高分之间的相对位置按五等分对应 C1~C5;「不能接受任何亏损」最高评为 C1,「投资期限 1 年以内」最高评为 C2。可承受的最大回撤分为 3%、10%、20%、35%、50% 五档。
  • 配置候选:现金类(按固定年化收益率计息)、ETF 买入持有、择时策略 + 标的、已保存的选股策略。内置候选为现金、国债 ETF(511010)、十年国债 ETF(511260)、沪深300ETF、中证500ETF、黄金 ETF(518880),缺少行情时可一键下载。各候选的风险等级 R1~R5 由共同区间内的年化波动率(2% / 6% / 15% / 25%)与最大回撤(3% / 10% / 20% / 35%)分档,取较高的一级;回撤分档与 C1~C5 一致。
  • 参考配置:按风险等级确定现金类、债券类、权益类与其他(黄金、可转债等)的比例,候选中缺少的大类按比例分摊;大类内部按波动率倒数分配(风险平价)。未使用均值-方差优化:它对预期收益的估计误差极为敏感。组合在共同区间内的最大回撤超过可承受回撤时,每次将 5% 的权重从权益类及其他移至债券类,其次由债券类移至现金类,直到满足约束。
  • 组合回测:各成分的日收益按权重合成,可选每月、每季度、每年、偏离超过 5 个百分点时或不再平衡,每次再平衡按换手金额的 0.05% 扣除成本;以全部候选等权配置为参照。结果包括年化收益、波动率、最大回撤、夏普、组合风险等级、各成分的收益贡献与风险贡献、相关系数,以及共同区间长度、回撤是否超限、组合等级是否高于风险承受能力等提示。
  • 组合模拟账户:在组合回测结果下方开设,开户时保存权重、再平衡方式以及择时 / 选股成分的策略(此后修改同名策略不影响账户)。各成分按与回测相同的方式逐日推进:现金类按固定收益率计息,ETF 买入持有按前复权收盘价,择时与选股成分以 100 万元子账户运行回测代码后按成分金额折算持仓与信号;组合合成与再平衡使用组合回测的同一函数,测试保证逐日推进与一次推进、与组合回测的结果一致。到再平衡时点(定期规则的最后一个交易日收盘,或偏离超过阈值)时,按收盘价计算各成分的调整金额,于下一交易日开盘执行;折算后不足一手的交易不列出。模拟盘页显示各成分的目标与当前权重、对应持仓、资产曲线(与各成分等权配置对比)和再平衡记录。
  • 回撤约束与风险等级均依据历史数据,未来的波动与回撤可能超过历史水平;页面结果仅供研究参考。
回测图表
  • 交互式策略图:对应 Backtrader 原生图,但可缩放、拖动、悬停联动:每笔交易盈亏、K 线(叠加指标与买卖点)、成交量及各指标栏共用时间轴;提供 1 月 / 3 月 / 6 月 / 1 年 / 全部快捷区间,并去除非交易日空白。规则策略绘制规则中实际使用的指标线及阈值参考线。
  • Backtrader 原生图:Backtrader 自带的 matplotlib 图表,可选择显示区间并下载 PNG;与回测共用同一套设置,测试保证画图时的成交与回测完全一致。
定投
  • 追加资金:每月 / 每周第一个交易日开盘前到账,初始资金视为第一期。回测、参数优化、滚动优化(「延续持仓」方式)、单标的与选股模拟账户、导出 Python 脚本均支持;模拟盘在追加日的前一天提醒转入资金。
  • 定期定额定投:每笔追加资金到账当天收盘按整手买入,下一交易日开盘成交;多个标的平分,凑不满一手的零头留到下一期。
  • 估值定投:按市盈率在过去 N 年(默认 5 年)的历史百分位调整每期投入——低于 30% 投 2 倍,高于 70% 投 0.5 倍(可设为 0,即高估时暂停),其余 1 倍。少投的钱留作储备,低估时多投先用储备;储备按设定的年化收益计息(默认 2%,相当于放在货币基金)。需要带市盈率的数据:股票日线,或下载时附带指数估值的 ETF / 指数(指数估值每月更新一次)。
  • 指标:总收益 = 期末市值 ÷ 累计投入 − 1;XIRR 为资金加权年化,计入每笔资金的投入时间;时间加权收益、年化、夏普、最大回撤按扣除追加资金后的单位净值计算,追加的钱不会掩盖亏损。
  • 选股回测:追加的钱先留作现金,到下一个调仓日开盘再买——先卖落选、买新入选,剩下的按目标仓位补到继续持有的股票上(只补不减);空仓月份、大盘空仓期间一直留作现金。基准为同样的资金与日期买入持有股票池指数。
  • 暂不支持:选股的滚动优化(按一次性投入计算)、组合模拟账户的追加资金,以及导出到聚宽 / 掘金 / QMT。
滚动优化(Walk-forward)
  • 按训练期 / 测试期切分窗口(滚动:训练期长度固定;锚定:从最早数据开始逐渐变长)。每个窗口仅用训练期选择参数,在紧随其后的测试期检验,拼接出完全样本外的资产曲线,并与「始终使用原参数」「买入持有」对比。
  • 更换参数时的衔接方式:延续持仓(视为新参数一直在运行)或每段重新开始(每段空仓起步、资金接力,更为保守)。
  • 输出样本外收益、年化、夏普、回撤、滚动效率 WFE、参数稳定性图与各窗口明细。择时策略与选股策略均支持。
模拟盘
  • 每次运行:更新数据 → 以回测代码从开始日重放到最新数据 → 新成交追加到账本(只追加、不改写)→ 最后一根 K 线上尚未成交的委托即为「今日信号」(下一交易日开盘执行)。测试保证逐日推进与一次性回测的结果完全一致。
  • 仅使用「此刻应已发布」的完整日线,避免使用盘中未走完的 K 线;错过的交易日在下次运行时自动补齐;交易日历包含节假日。
  • 单标的账户可选「现金分红」,信号股数按真实价格计算;选股账户跟随选股策略的分红设置。
  • 今日信号与持仓可导出 CSV,用于在券商端手动下单;数据修订导致重放与账本不一致时会给出提示。
  • 定时任务:周一至周五,默认 19:00(BaoStock 当日数据通常在 18:40 前发布);源码版运行 paper_daily.bat(macOS / Linux 为 paper_daily.sh),安装版运行 SimpleQuant --paper。
导出策略
  • 择时「导出 Python 脚本」:生成可独立运行的 .py(仅需 backtrader pandas akshare baostock),包含数据设置、策略与费率;测试保证每一笔成交都与 SimpleQuant 回测相同。
  • 择时「导出到聚宽 / 掘金 / QMT」:嵌入与平台无关的信号核心 simplequant/export/signal_core.py(纯 numpy,兼容 Python 3.6,指标算法与预热期逐项对照 Backtrader),加上各平台的对接代码。时序与 SimpleQuant 相同:上一交易日收盘产生信号,当日开盘成交。聚宽已实测,交易日期与 SimpleQuant 一致。
  • 选股「导出策略」:Python 脚本(更新数据 → 回测 → 保存最新选股 picks.csv,可定时运行);聚宽 / 掘金 / QMT 的「平台计算」版本(在平台上以其自身数据按相同算法选股)与「按 SimpleQuant 名单调仓」版本(写入回测得出的每期名单)。聚宽已实测,成交逐笔对应。
  • 聚宽、掘金免费注册即可回测;QMT 需要券商账户。暂不支持:择时规则中的估值 / 换手 / 利率类因子、分钟线、可转债选股(利率条件、基于 AKShare ETF / 指数数据的估值百分位也不能导出为 Python 脚本);机器学习合成因子导出到平台时请用「按名单调仓」。
择时因子

价格:收盘 / 开盘 / 最高 / 最低、前 N 日最高 / 最低;趋势:MA、EMA、MACD、均线斜率、乖离率 BIAS、DMI / ADX、N 日涨幅;摆动:RSI、KDJ、CCI、威廉 WR;量能:成交量、均量、量比、OBV;波动:布林带、ATR、收益波动率;估值 / 换手:换手率、PE(TTM)、PB、PS(TTM)(需要 BaoStock 股票日线)、市盈率 / 市净率历史百分位(当前估值在过去 N 年中的位置,0 为最低、100 为最高;BaoStock 股票日线,或 AKShare 下载的常见宽基 ETF / 指数);利率 / 信用利差:10 年期国债收益率、期限利差(10 年 − 1 年)、信用利差(3 年 AAA 中短期票据 − 3 年国债),来自中债收益率曲线,需先下载(数据页的「利率」标签,或规则用到时就地更新);股债利差(100 / 市盈率 − 10 年期国债收益率)及其历史百分位,需要市盈率与利率数据;持仓:持仓收益率(止盈止损)。KDJ、OBV 按国内软件的算法实现,并与独立实现逐值核对。

数据来源说明
  • AKShare 的 ETF 与股票日线来自东方财富,东方财富连接失败时改用新浪。复权一律为等比复权(分红再投资,与 BaoStock、选股一致):股票为不复权价 × BaoStock 复权因子(新浪则用新浪的复权因子),ETF 由不复权价与新浪累计分红计算(并处理份额拆分与折算)。东方财富自带的复权价是加法复权(复权价 = 不复权价 + 上市以来的累计分红),每天的涨跌幅会被压缩(红利 ETF 510880 约为真实涨跌的三分之二),只在取不到复权因子时使用(如北交所股票),回测与参数优化时会提示。回测报告标题下注明数据来源(如「东方财富·不复权 × BaoStock 复权因子 · 后复权」)。
  • ETF / 指数估值来自乐咕乐股,只有月末数据和最近一天;已下载的 ETF / 指数需重新下载才会带上估值。
  • 改为等比复权之前下载的 ETF / 股票数据是加法复权,回测时会提示;在「数据」页勾选「忽略本地已有数据,重新下载」即可更新。
  • BaoStock 当日日线在收盘后发布(实测 18:40 前已发布)。
  • 可转债:新浪日线为不复权价、成交量单位为「张」,个别转债缺上市初期的日线(这些天只用东方财富的收盘价计算因子、不交易);东方财富给出的评级是最新评级,用于历史回测会有前视偏差,因此没有作为选股条件。
  • 利率:中债收益率曲线每次最多查询约 1 年;没有企业债曲线,信用利差使用中短期票据(AAA)。曲线在交易日傍晚发布,日线策略用当天数值(次日开盘成交),分钟线用前一天的数值。
目录结构与扩展
main.py                    程序入口(桌面窗口 / --browser / --paper / --run-script)
gui/                       界面(NiceGUI):app(路由)、layout(侧栏)、pages/(各页)、components、widgets、theme
ui/                        与界面框架无关的部分:texts(界面文字)、charts(图表)、shared(页面逻辑)
simplequant/data/          数据源(akshare / baostock / tdx_local / csv)、本地数据库、现金分红行情
simplequant/engine/        回测执行、A 股成本模型、策略基类(整手 / T+1 / 分红)、绩效指标、参数优化、滚动优化、可信度检查
simplequant/strategies/    模板、规则策略、代码策略
simplequant/rules/         规则 JSON 结构、校验与描述
simplequant/stocks/        多因子选股:数据下载、宽表、因子、因子研究、选股回测、机器学习合成(ml)、AI 因子挖掘(mining)、分红、股票池入口(universe)
simplequant/bonds/          可转债数据与面板、利率与信用利差
simplequant/paper/         模拟盘:账户、重放与账本、资产配置组合账户、交易日历、定时任务、异常检查
simplequant/allocation/    资产配置:风险测评、配置候选与风险等级、参考配置、组合回测
simplequant/export/        导出:Python 脚本、聚宽 / 掘金 / QMT
simplequant/llm/           大模型接入:预设与配置、Claude / OpenAI / LiteLLM 适配、自然语言转规则 / 选股方案 / 因子代码、因子挖掘的提示词
simplequant/update/        自动更新:检查与下载、更新清单与签名校验、替换文件的脚本
installer/                 安装包脚本(Inno Setup)
tools/                     发布(release.py)、macOS / Linux 打包(build_unix.sh、smoke_test.py)、图标、README 图片等辅助脚本
.github/workflows/         GitHub Actions:macOS / Linux 的测试与打包
tests/                     pytest
  • 新增数据源:继承 simplequant.data.base.DataSource,实现 fetch() 并返回标准 OHLCV DataFrame,再加入 simplequant/data/__init__.py 的 SOURCES。
  • 新增模板:在 simplequant/strategies/templates.py 中继承 _PerAsset 或 BaseStrategy,以 register(Template(...)) 注册,界面自动生成参数表单。
  • 新增指标:在 rules/schema.py 的 INDICATORS 中添加说明,并在 strategies/rule_strategy.py 的 _build_line 中实现。
  • 界面文字:界面文字位于 ui/texts.py,核心文字(指标名、日志、错误)位于 simplequant/i18n.py,均写作 L("中文", "English");测试会检查每个用到的键都有中英文。
  • 系统差异:数据目录、程序目录、打开文件夹等集中在 simplequant/system.py;定时任务见 simplequant/paper/schedule.py,自动更新替换文件的脚本为 simplequant/update/apply_update.ps1(Windows)与 apply_update.sh(macOS / Linux)。
  • 测试:.venv\Scripts\python -m pytest -q tests(macOS / Linux:.venv/bin/python -m pytest -q tests)

支持本项目

SimpleQuant 免费开源,所有功能对所有人开放。如果它对你有帮助,欢迎在爱发电支持后续开发;赞助完全自愿,不影响任何功能。也欢迎在 GitHub 点 Star。使用问题和建议欢迎到 Discussions 交流,程序出错请在 Issues 反馈;也可在软件「设置 → 使用统计与反馈」中匿名提交意见,无需 GitHub 账号。

隐私与使用统计

自 3.1 起,软件第一次打开时会在首页询问是否发送匿名使用统计(默认勾选,点「确定」后生效),之后可随时在「设置 → 使用统计与反馈」中关闭,旁边的「查看会发送什么」显示将要发送的原文。

  • 发送的内容:随机生成的安装编号(与个人信息无关)、版本、系统、界面语言与界面版本;首次完成下载数据、回测、验证、模拟盘等步骤距安装的天数;按天汇总的页面打开与主要按钮使用次数;报错的类型与出错的程序位置(不含错误内容)
  • 不发送的内容:策略内容、股票代码、资金、回测结果、文件路径、API Key。IP 地址只用于服务器限频,不保存
  • 频率:每天最多一次;联网失败时留到下次,不影响使用
  • 反馈:「设置」中的反馈框匿名提交,附带版本与系统,不关联安装编号、不收集联系方式
  • 接收端为 Cloudflare 上的 api.simplequant.org;源码运行时设置环境变量 SIMPLEQUANT_TELEMETRY=0 可完全关闭统计功能

许可证

本项目以 GNU General Public License v3.0(GPLv3)发布:可以自由使用、修改和再发布,但再发布(包括分发修改后的版本或打包的程序)时须以相同许可证提供完整源码。采用 GPLv3 是因为所依赖的回测引擎 Backtrader 采用 GPLv3。

第三方组件

  • 主要依赖:Backtrader(GPLv3+)、NiceGUI(MIT)、pywebview(BSD)、AKShare(MIT)、BaoStock(BSD)、mootdx(MIT)、pandas / NumPy(BSD)、Plotly(MIT)、PyArrow(Apache-2.0)、Anthropic / OpenAI SDK(MIT / Apache-2.0)。各自的许可证随软件包一同分发。
  • 字体:Inter、JetBrains Mono、思源宋体(Noto Serif SC,GB2312 子集)均采用 SIL Open Font License,许可证文本见 gui/static/fonts/。
  • 安装包由 Inno Setup 制作;简体中文界面文件 installer/ChineseSimplified.isl 来自 Inno Setup 官方仓库的非官方翻译。
  • 数据:AKShare、BaoStock、通达信等数据的版权归各数据提供方所有。本仓库不包含任何行情数据;导出或分发数据包前,请确认相应数据源的使用条款。

About

低代码的 A 股量化回测工具 · Low-code quant backtesting for China A-shares

Topics

a-sharesbacktestingbacktraderchina-stockniceguiquantquantitative-finance

Resources

Readme
GPL-3.0 license
Activity

Stars

130 stars

Watchers

8 watching

Forks

12 forks
Report repository

Releases

Sponsor this project

Packages

Contributors

Languages

You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.