fastquant
fastquant 是一款专为量化交易设计的 Python 开源库,旨在让投资策略的回测与优化变得前所未有的简单。它核心解决了传统金融量化分析门槛高、代码实现复杂的问题,让用户仅需三行代码即可完成从数据获取到策略验证的全过程。
该工具非常适合希望尝试数据驱动投资的开发者、金融研究人员以及量化交易初学者使用。无论是想要快速验证想法的程序员,还是缺乏深厚编程背景但渴望探索量化领域的投资者,都能通过 fastquant 轻松上手。
fastquant 的技术亮点在于其高度集成的功能模块:它不仅支持直接拉取雅虎财经(Yahoo Finance)的历史股票数据和币安(Binance)的加密货币行情,还内置了多种经典交易策略模板(如移动平均线交叉策略)。更强大的是,它支持自动化网格搜索,帮助用户自动测试多组参数组合,从而快速找到最优策略配置。此外,项目团队还推出了无代码平台 Hawksight,为不愿编写代码的用户提供了另一种便捷选择。通过简化繁琐的数据处理和建模流程,fastquant 真正致力于将专业的量化分析能力带给每一位感兴趣的探索者。
使用场景
一位个人量化交易者想要验证“双均线交叉策略”在菲律宾股市(如 Jollibee 食品公司)的历史表现,以决定是否投入真实资金。
没有 fastquant 时
- 数据获取繁琐:需要手动编写复杂的爬虫脚本或去多个金融网站下载 CSV 文件,还要处理日期格式不统一和缺失值问题。
- 回测代码冗长:必须从零搭建回测框架,编写几十行甚至上百行代码来计算移动平均线、生成交叉信号并模拟买卖逻辑。
- 参数优化困难:若想测试不同周期组合(如 15 日 vs 40 日,或 20 日 vs 50 日),只能手动修改代码反复运行,效率极低且容易出错。
- 可视化门槛高:为了直观查看收益曲线和交易点位,还需额外引入绘图库并编写专门的图表渲染代码。
使用 fastquant 后
- 一行代码取数:直接调用
get_stock_data即可获取雅虎财经或菲律宾交易所的历史行情,自动清洗并对齐数据格式。 - 三行代码回测:仅需导入
backtest函数并指定策略名称(如 'smac')及参数,瞬间完成从策略逻辑到资金曲线的完整回测。 - 自动化网格搜索:通过传入列表或范围参数,fastquant 能自动遍历多种均线周期组合,快速找出历史最优参数配置。
- 结果即时呈现:执行完毕后自动输出初始与最终资产值,并直接生成包含买卖标记的策略收益走势图,无需额外编码。
fastquant 将原本需要数天搭建的量化回测流程压缩至几分钟,让投资者能专注于策略逻辑本身而非工程实现。
运行环境要求
- 未说明 (通常支持 Linux
- macOS
- Windows)
未说明 (无需 GPU,适用于常规回测任务)
未说明

快速开始
fastquant :nerd_face:
让回测回归主流
fastquant 使您只需短短 3 行 Python 代码即可轻松地对投资策略进行回测。它的目标是通过让金融量化分析触手可及,从而推动数据驱动型投资的发展。
如果您不想编写代码就能进行此类分析,也可以试试最近刚刚推出的 Hawksight!:smile:
如果您想直接与我们交流,也可以在 Hawksight 的 Discord 上找到我们。欢迎在 #feedback-suggestions 和 #bug-report 频道中提问关于 fastquant 的问题。
功能
- 轻松获取历史股票数据
- 仅需 3 行代码即可回测和优化交易策略
* - Yahoo Finance 和菲律宾股市的数据均可直接从 fastquant 获取
请查看 fastquant 网站上的博客文章,以及这篇 Medium 上的介绍性 文章!
安装
Python
pip install fastquant
或
python -m pip install fastquant
获取股票数据
可通过 get_stock_data 访问来自 Yahoo Finance 和菲律宾证券交易所 (PSE) 的所有股票代码。
Python
from fastquant import get_stock_data
df = get_stock_data("JFC", "2018-01-01", "2019-01-01")
print(df.head())
# dt close
# 2019-01-01 293.0
# 2019-01-02 292.0
# 2019-01-03 309.0
# 2019-01-06 323.0
# 2019-01-07 321.0
获取加密货币数据
数据来源于 Binance,所有可用的交易对都可以在 这里找到。
Python
from fastquant import get_crypto_data
crypto = get_crypto_data("BTC/USDT", "2018-12-01", "2019-12-31")
crypto.head()
# open high low close volume
# dt
# 2018-12-01 4041.27 4299.99 3963.01 4190.02 44840.073481
# 2018-12-02 4190.98 4312.99 4103.04 4161.01 38912.154790
# 2018-12-03 4160.55 4179.00 3827.00 3884.01 49094.369163
# 2018-12-04 3884.76 4085.00 3781.00 3951.64 48489.551613
# 2018-12-05 3950.98 3970.00 3745.00 3769.84 44004.799448
回测交易策略
简单移动平均线交叉策略(15 日均线 vs 40 日均线)
2018 年 1 月 1 日至 2019 年 1 月 1 日每日 Jollibee 的股价
from fastquant import backtest
backtest('smac', df, fast_period=15, slow_period=40)
# 初始投资组合价值:100000.00
# 最终投资组合价值:102272.90

想完全不用编程来做这件事吗?
如果您希望在完全无需编码的情况下进一步简化这类分析(或者想避免繁琐的设置过程),可以免费注册并试用 Hawksight——这是我正在开发的一款新型无代码工具,旨在让数据驱动的投资更加普及。
希望能让更多人享受到这种强大的分析能力!
使用自动化网格搜索优化交易策略
fastquant 允许您自动评估交易策略在多种参数组合下的表现。您只需将参数值以迭代器的形式输入即可(例如列表或范围)。
简单移动平均线交叉策略(15 至 30 日均线 vs 40 至 55 日均线)
2018 年 1 月 1 日至 2019 年 1 月 1 日每日 Jollibee 的股价
from fastquant import backtest
res = backtest("smac", df, fast_period=range(15, 30, 3), slow_period=range(40, 55, 3), verbose=False)
# 最优参数:{'init_cash': 100000, 'buy_prop': 1, 'sell_prop': 1, 'execution_type': 'close', 'fast_period': 15, 'slow_period': 40}
# 最优指标:{'rtot': 0.022, 'ravg': 9.25e-05, 'rnorm': 0.024, 'rnorm100': 2.36, 'sharperatio': None, 'pnl': 2272.9, 'final_value': 102272.90}
print(res[['fast_period', 'slow_period', 'final_value']].head())
# fast_period slow_period final_value
#0 15 40 102272.90
#1 21 40 98847.00
#2 21 52 98796.09
#3 24 46 98008.79
#4 15 46 97452.92
交易策略库
| 策略 | 别名 | 参数 |
|---|---|---|
| 相对强弱指数 (RSI) | rsi | rsi_period, rsi_upper, rsi_lower |
| 简单移动平均线交叉 (SMAC) | smac | fast_period, slow_period |
| 指数移动平均线交叉 (EMAC) | emac | fast_period, slow_period |
| 移动平均线收敛发散 (MACD) | macd | fast_perod, slow_upper, signal_period, sma_period, dir_period |
| 布林带 | bbands | period, devfactor |
| 买入并持有 | buynhold | 无 |
| 情感策略 | sentiment | keyword , page_nums, senti |
| 自定义预测策略 | custom | upper_limit, lower_limit, custom_column |
| 自定义三元策略 | ternary | buy_int, sell_int, custom_column |
相对强弱指数 (RSI) 策略
backtest('rsi', df, rsi_period=14, rsi_upper=70, rsi_lower=30)
# 初始投资组合价值:100000.00
# 最终投资组合价值:132967.87

简单移动平均线交叉 (SMAC) 策略
backtest('smac', df, fast_period=10, slow_period=30)
# 初始投资组合价值:100000.00
# 最终投资组合价值:95902.74

指数移动平均线交叉 (EMAC) 策略
backtest('emac', df, fast_period=10, slow_period=30)
# 初始投资组合价值:100000.00
# 最终投资组合价值:90976.00

移动平均线收敛发散 (MACD) 策略
backtest('macd', df, fast_period=12, slow_period=26, signal_period=9, sma_period=30, dir_period=10)
# 初始投资组合价值:100000.00
# 最终投资组合价值:96229.58

布林带策略
backtest('bbands', df, period=20, devfactor=2.0)
# 初始投资组合价值:100000.00
# 最终投资组合价值:97060.30

新闻情绪策略
使用雅虎财经的特斯拉(TSLA)股票数据和商业时报的新闻文章:
from fastquant import get_yahoo_data, get_bt_news_sentiment
data = get_yahoo_data("TSLA", "2020-01-01", "2020-07-04")
sentiments = get_bt_news_sentiment(keyword="tesla", page_nums=3)
backtest("sentiment", data, sentiments=sentiments, senti=0.2)
# 初始投资组合价值:100000.00
# 最终投资组合价值:313198.37
# 注意:遗憾的是,由于get_bt_news_sentiment抓取的日期和情绪存在不一致,您无法重现此场景。为了快速开始使用新闻情绪策略,您需要确保抓取的情绪与对应的日期一致。
from fastquant import get_yahoo_data, get_bt_news_sentiment
from datetime import datetime, timedelta
# 获取当前日期及30天前的日期
current_date = datetime.now().strftime("%Y-%m-%d")
delta_date = (datetime.now() - timedelta(30)).strftime("%Y-%m-%d")
data = get_yahoo_data("TSLA", delta_date, current_date)
sentiments = get_bt_news_sentiment(keyword="tesla", page_nums=3)
backtest("sentiment", data, sentiments=sentiments, senti=0.2)

多策略
可以将多个已注册的策略以“或”的方式同时使用,当至少有一个策略发出买入或卖出信号时,就会执行相应的交易。
df = get_stock_data("JFC", "2018-01-01", "2019-01-01")
# 使用单一参数集
strats = {
"smac": {"fast_period": 35, "slow_period": 50},
"rsi": {"rsi_lower": 30, "rsi_upper": 70}
}
res = backtest("multi", df, strats=strats)
res.shape
# (1, 16)
# 使用自动网格搜索
strats_opt = {
"smac": {"fast_period": 35, "slow_period": [40, 50]},
"rsi": {"rsi_lower": [15, 30], "rsi_upper": 70}
}
res_opt = backtest("multi", df, strats=strats_opt)
res_opt.shape
# (4, 16)
用于回测机器学习和统计模型预测的自定义策略
这一强大的策略允许您使用任何类型的模型来回测自己的交易策略,只需在预测结果之后添加短短三行代码即可!
基于任何模型的预测都可以作为自定义指标,利用fastquant进行回测。您只需在输入数据框中添加一个custom列,并设置upper_limit和lower_limit的值。
该策略的结构类似于RSIStrategy,您可以设置一个upper_limit,当指标高于该值时卖出资产(视为“超买”),以及一个lower_limit,当指标低于该值时买入资产(视为“超卖”)。默认情况下,upper_limit设为95,而lower_limit设为5。
在下面的例子中,我们展示了如何使用自定义策略来回测基于样本外时间序列预测的自定义指标。这些预测是使用Facebook的Prophet包对比特币价格生成的。
from fastquant import get_crypto_data, backtest
from fbprophet import Prophet
import pandas as pd
from matplotlib import pyplot as plt
# 获取加密货币数据
df = get_crypto_data("BTC/USDT", "2019-01-01", "2020-05-31")
# 在收盘价上拟合模型
ts = df.reset_index()[["dt", "close"]]
ts.columns = ['ds', 'y']
m = Prophet(daily_seasonality=True, yearly_seasonality=True).fit(ts)
forecast = m.make_future_dataframe(periods=0, freq='D')
# 预测并绘制
pred = m.predict(forecast)
fig1 = m.plot(pred)
plt.title('BTC/USDT: 预测的每日收盘价', fontsize=25)

# 将预测转换为预期的1日收益率
expected_1day_return = pred.set_index("ds").yhat.pct_change().shift(-1).multiply(100)
# 回测这些预测:当预测的次日收益率大于+1.5%时买入比特币,小于-1.5%时卖出。
df["custom"] = expected_1day_return.multiply(-1)
backtest("custom", df.dropna(),upper_limit=1.5, lower_limit=-1.5)

更多示例请参见这里。
fastquant API
完整fastquant API列表请查看这里。
加入不断壮大的fastquant社区
想与其他用户及我们的开发团队讨论更多关于fastquant的内容吗?
您可以通过Hawksight Discord联系我们。欢迎在#feedback-suggestions和#bug-report频道中提问有关fastquant的问题。
在Docker容器中运行fastquant
# 构建镜像
docker build -t myimage .
# 运行容器
docker run -t -d -p 5000:5000 myimage
# 获取容器ID
docker ps
# SSH进入fastquant容器
docker exec -it <CONTAINER_ID> /bin/bash
# 运行Python并使用fastquant
python
>>> from fastquant import get_stock_data
>>> df = get_stock_data("TSLA", "2019-01-01", "2020-01-01")
>>> df.head()
常见问题
相似工具推荐
openclaw
OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
everything-claude-code
everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上
ComfyUI
ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
gemini-cli
gemini-cli 是一款由谷歌推出的开源 AI 命令行工具,它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言,它提供了一条从输入提示词到获取模型响应的最短路径,无需切换窗口即可享受智能辅助。 这款工具主要解决了开发过程中频繁上下文切换的痛点,让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用,还是执行复杂的 Git 操作,gemini-cli 都能通过自然语言指令高效处理。 它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口,具备出色的逻辑推理能力;内置 Google 搜索、文件操作及 Shell 命令执行等实用工具;更独特的是,它支持 MCP(模型上下文协议),允许用户灵活扩展自定义集成,连接如图像生成等外部能力。此外,个人谷歌账号即可享受免费的额度支持,且项目基于 Apache 2.0 协议完全开源,是提升终端工作效率的理想助手。
markitdown
MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具,专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片(含 OCR)、音频(含语音转录)、HTML 乃至 YouTube 链接等多种格式的解析,能够精准提取文档中的标题、列表、表格和链接等关键结构信息。 在人工智能应用日益普及的今天,大语言模型(LLM)虽擅长处理文本,却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点,它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式,成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外,它还提供了 MCP(模型上下文协议)服务器,可无缝集成到 Claude Desktop 等 LLM 应用中。 这款工具特别适合开发者、数据科学家及 AI 研究人员使用,尤其是那些需要构建文档检索增强生成(RAG)系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性,但其核心优势在于为机器
