功能
AI 研究助手
与基于 VBT 文档和示例的助手对话,使用工具与推理
熟悉 VBT 的助手能否帮助您编写和修复研究代码?ChatVBT 是面向 Python 量化研究的 AI 助手,将 VBT 文档、代码示例和社区讨论带入对话。您无需离开 notebook 或终端,就能询问功能用法、调整回测或排查错误。
vbt.PF.chat("How do I add a 10% trailing stop to a signal backtest?") You want to add a 10% trailing stop to a signal-based portfolio backtest.
Use the `tsl_stop` argument in `vbt.PF.from_signals` and set it to `0.1`.
```python
import vectorbtpro as vbt
data = vbt.YFData.pull("BTC-USD")
fast_ma = data.run("vbt:ma", window=20, hide_params=True)
slow_ma = data.run("vbt:ma", window=50, hide_params=True)
entries = fast_ma.ma_crossed_above(slow_ma)
exits = fast_ma.ma_crossed_below(slow_ma)
pf = vbt.PF.from_signals(
data,
entries=entries,
exits=exits,
tsl_stop=0.1
)
print(pf.sharpe_ratio)
```
If you want to combine it with other stops, you can also pass
`sl_stop` and/or `tp_stop` in the same call.
...问题发送给了 Portfolio 类,因此模型收到了使用该类的代码示例作为上下文。返回的代码无需修改即可运行,并在 2026 年 10 月 2 日针对完整比特币历史数据输出了 1.28
的夏普比率。不同运行和模型的回答可能不同,因此请像对待同事提供的代码一样:阅读、运行,并检查结果。
帮助您推进研究的下一步
从具体修改或问题开始。例如:
- “如何为这个信号回测添加移动止损?”
- “如何在多个资产上测试多种均线窗口?”
- “向信号回调传入数组时,这条错误是什么意思?”
- “如何获取每个投资组合分组的交易统计?”
附上相关函数、代码或错误消息,让回答能够针对您的设置。随后可以沿用同一个 chat_history 继续追问,例如添加手续费或改变资产共享现金的方式。请助手提供能在您自己的研究中运行和检查的
Python 代码。
选择使用方式
| 您的需求 | 使用方式 |
|---|---|
| 基于 VBT 文档和示例的回答 | vbt.chat,或使用关键词检索的 vbt.quick_chat。 |
| 针对某个类或方法的帮助 | 类级对话,例如 vbt.PF.chat,使用该类的相关资料。 |
| 回答时能够查资料或运行计算的助手 | 搭配支持工具调用的模型使用 vbt.interact。 |
| 在现有项目中跨文件修改 | 具备 VBT 技能、文档和您的安装环境访问权限的编程智能体。 |
基于资料的对话
vbt.chat 针对问题搜索整个知识库,对最相关的页面、示例和讨论进行排名,再连同问题一起发送给模型。vbt.quick_chat
使用关键词搜索而非嵌入进行排名,速度更快;知识资产已保存在本地后,除模型本身外均可离线运行。两者都接受 chat_history 以继续对话,支持流式回答,并可将内容打印为纯文本、在
notebook 中渲染,或作为 HTML 页面在浏览器中打开。同样的命令也能在终端中以 vbt chat 和 vbt quick-chat 运行,如下方
ChatVBT 功能介绍所示。
模型可来自 OpenAI、Anthropic、Google Gemini、Hugging Face Inference、本地 Ollama 服务器,或 LiteLLM 支持的任何提供商。VBT
会选择第一个已配置密钥的提供商,每次调用也可以指定提供商、模型及提供商自己的参数。vbt.chat
还需要嵌入来对知识库排名,其设置方法见知识搜索页面。
向助手提供代码、数据或错误消息,以处理具体任务。每次回答都会使用您的问题、对话历史和相关 VBT 资料。通过 vbt.interact
启用工具后,助手便可检查环境并运行代码。下载知识资产后,也可使用本地 Ollama
模型和本地嵌入。模型提供商与搜索提供商可以独立选择,因此本地搜索也能搭配托管对话模型使用。跨文件修改请参阅下方编程智能体。
工具与推理
vbt.interact 让模型在回答时调用工具。它可以通过与 MCP 服务器相同的工具搜索文档、查询对象 API、阅读源代码并运行
Python,您也可以将自己的函数添加为工具。支持的模型可以显示其提供商给出的推理摘要或思考片段。请参阅下方函数调用和推理步骤功能介绍。
向任意对象提问
带有知识接口的 VBT 类可以查找与自身有关的资料。find_api、find_docs、find_examples 和 find_messages 返回该类的 API
页面、文档、代码示例和社区讨论。chat 默认使用代码示例作为上下文,asset_names
则可添加其他资料类型,如下方具备自我认知的类功能介绍所示。
编程智能体
ChatVBT 帮助您处理问题和代码片段。对于整个项目中的工作,Claude Code、Codex 等编程智能体可以直接使用 VBT:
- 智能体技能:
vbt agents install添加与您安装版本相匹配的分步操作流程,涵盖生成信号、回测和参数优化等常见任务。 - 文档: 会员可获得
llms.txt索引、每个页面的 Markdown 版本,以及可供智能体搜索的知识资产下载。 - 工具: MCP 服务器及其可直接从 Python 调用的同名函数,让智能体在您的安装环境中搜索文档并运行代码。可用工具见 MCP 服务器。
- 重构:
vbt.refactor_source结合模型与 VBT 知识改进代码,如下方源代码重构器功能介绍所示。
指南
会员专属的使用 AI(英文)指南逐步介绍智能体技能、文档访问和 MCP 服务器的设置。
✅ VBT 现已支持兼容模型的函数调用,让您使用 MCP 服务器并定义模型可以调用的自定义函数,而且无需额外配置!这对于复杂查询、研究任务,以及希望模型代您完成特定任务或计算的交互应用尤其有用。
env["OPENAI_API_KEY"] = "<YOUR_OPENAI_API_KEY>"
vbt.interact(
"How to backtest a weekly rebalancing strategy with vbt.PF.from_orders?",
tool_display_format="compact",
formatter="html",
)
✅ VBT 现在能够显示受支持模型的推理摘要和思考片段,帮助您在阅读回答时跟上解释过程。这对于需要多个步骤才能回答的复杂问题尤其有用。
env["GITHUB_TOKEN"] = "<YOUR_GITHUB_TOKEN>"
env["OPENAI_API_KEY"] = "<YOUR_OPENAI_API_KEY>"
vbt.chat(
"How to backtest a weekly rebalancing strategy with vbt.PF.from_orders?",
reasoning=dict(effort="low", summary="auto"),
formatter="html"
)
✅ 与 SearchVBT 类似,ChatVBT 获取搜索结果并将其转发给您选择的模型。这样便能针对 VBT 知识库提问,并获得基于检索资料的回答。
env["GITHUB_TOKEN"] = "<YOUR_GITHUB_TOKEN>"
env["OPENAI_API_KEY"] = "<YOUR_OPENAI_API_KEY>"
vbt.chat("How to rebalance weekly?", formatter="html")
✅ 每个 VBT 类都提供方法来探索其功能,包括 API、相关文档、Discord 消息和代码示例。您甚至可以通过模型直接向它提问!
env["GITHUB_TOKEN"] = "<YOUR_GITHUB_TOKEN>"
env["OPENAI_API_KEY"] = "<YOUR_API_KEY>"
vbt.PortfolioOptimizer.find_assets().get("link")['https://members.vectorbt.pro/api/portfolio/pfopt/base/#vectorbtpro.portfolio.pfopt.base',
'https://members.vectorbt.pro/api/generic/analyzable/#vectorbtpro.generic.analyzable.Analyzable',
'https://members.vectorbt.pro/api/base/wrapping/#vectorbtpro.base.wrapping.Wrapping',
...
'https://members.vectorbt.pro/features/optimization/portfolio-optimization/#riskfolio-lib',
'https://members.vectorbt.pro/features/optimization/portfolio-optimization/#portfolio-optimization',
'https://members.vectorbt.pro/features/optimization/portfolio-optimization/#pyportfolioopt',
...
'https://discord.com/channels/x/918629995415502888/1064943203071045753',
'https://discord.com/channels/x/918629995415502888/1067718833646874634',
'https://discord.com/channels/x/918629995415502888/1067718855734075403',
...]vbt.PortfolioOptimizer.chat("How to rebalance weekly?", formatter="html")
✅ 使用源代码重构器自动改进任意 Python 代码,无论是完整软件包、Python 对象还是原始字符串。对于较大的源代码,它利用 Python 语法树将代码拆分成块,使用模型逐块重构,再合并结果。您可以选择返回结果、直接更新源代码,或复制到剪贴板。为确保过程透明,还可直接在浏览器中预览差异 ✏️
env["GITHUB_TOKEN"] = "<YOUR_GITHUB_TOKEN>"
env["OPENAI_API_KEY"] = "<YOUR_OPENAI_API_KEY>"
source = """
@njit
def signal_func_nb(ctx, entries, exits):
is_entry = vbt.pf_nb.select_nb(ctx, entries)
is_exit = vbt.pf_nb.select_nb(ctx, exits)
# TODO: Enter only if no other asset is active
return is_entry, is_exit, False, False
"""
new_source = vbt.refactor_source(
source,
attach_knowledge=True,
model="gpt-5-mini",
reasoning=dict(effort="high"),
show_diff=True,
)
print(new_source)@njit
def signal_func_nb(ctx, entries, exits):
is_entry = vbt.pf_nb.select_nb(ctx, entries)
is_exit = vbt.pf_nb.select_nb(ctx, exits)
for col in range(ctx.from_col, ctx.to_col):
if col != ctx.col and ctx.last_position[col] != 0:
is_entry = False
break
return is_entry, is_exit, False, False
版权所有 © 2021–2026 Oleg Polakow。保留所有权利。
本站内容与文档供使用和评估 VectorBT PRO 以及教育用途。任何其他用途,包括开发或支持竞争产品或服务,均须事先取得书面同意。




