功能

AI 研究助手

与基于 VBT 文档和示例的助手对话,使用工具与推理

熟悉 VBT 的助手能否帮助您编写和修复研究代码?ChatVBT 是面向 Python 量化研究的 AI 助手,将 VBT 文档、代码示例和社区讨论带入对话。您无需离开 notebook 或终端,就能询问功能用法、调整回测或排查错误。

Ask the Portfolio class how to add a trailing stop
vbt.PF.chat("How do I add a 10% trailing stop to a signal backtest?")  
Answer
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 服务器并定义模型可以调用的自定义函数,而且无需额外配置!这对于复杂查询、研究任务,以及希望模型代您完成特定任务或计算的交互应用尤其有用。

Ask VBT a question using ChatGPT and let it use the MCP server
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 现在能够显示受支持模型的推理摘要和思考片段,帮助您在阅读回答时跟上解释过程。这对于需要多个步骤才能回答的复杂问题尤其有用。

Ask VBT a question using ChatGPT and see its reasoning steps
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"
)

ChatVBT

✅ 与 SearchVBT 类似,ChatVBT 获取搜索结果并将其转发给您选择的模型。这样便能针对 VBT 知识库提问,并获得基于检索资料的回答。

Ask VBT a question using ChatGPT
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 消息和代码示例。您甚至可以通过模型直接向它提问!

Ask portfolio optimizer a question
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 语法树将代码拆分成块,使用模型逐块重构,再合并结果。您可以选择返回结果、直接更新源代码,或复制到剪贴板。为确保过程透明,还可直接在浏览器中预览差异 ✏️

Complete a signal function
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 以及教育用途。任何其他用途,包括开发或支持竞争产品或服务,均须事先取得书面同意。