ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Jesse MCP 配置管理工具详解:get_config / update_config 与三大配置分区实战指南

Jesse MCP 配置管理工具详解:get_config / update_config 与三大配置分区实战指南 金融科技数据分析后端AI 应用【免费下载链接】jesseAn advanced crypto trading bot written in Python项目地址https://gitcode.com/gh_mirrors/je/jesse点击查看免费下载导读本文聚焦 JessePython 编写的加密货币量化交易框架MCPModel Context Protocol服务器中的配置管理工具集系统讲解get_config()、update_config()、get_backtest_config()、get_live_config()、get_optimization_config()五个工具的作用、返回结构、底层 API 调用链与完整配置 Schema。阅读完本文你将掌握如何通过 MCP 工具读取回测、实盘与优化三大分区的全部配置如何用读取—修改—回写—验证四步工作流安全地更新配置并持久化到数据库以及各个关键参数手续费、杠杆、预热 K 线数、日志开关、目标函数等的实际含义与推荐取值。一、配置管理工具总览Jesse 的 MCP 服务器在 jesse/mcp/tools/config.py 中注册了五个与配置管理相关的工具它们的实现与 Jesse Web 控制台Dashboard的/config/get与/config/update接口完全一致只是以 MCP 工具的形式暴露给 Agent 使用。工具列表如下工具名作用返回范围get_config()读取数据库中的完整 Jesse 配置全部配置回测 实盘 优化update_config(config: str)将 JSON 字符串形式的配置写入数据库更新确认信息get_backtest_config()仅提取回测分区data.backtest对象get_live_config()仅提取实盘分区data.live对象get_optimization_config()仅提取优化分区data.optimization对象五个工具中get_config()与update_config()是核心其余三个是便捷的分区读取器内部先调用get_config()拿到完整配置再抽取指定分区返回对应服务层代码在 jesse/mcp/tools/services/config.py 中的_get_config_section_service()辅助函数。二、核心工具的调用链与底层实现从源码可以还原出每个工具的真实调用路径get_config()→get_config_service()→ POST{JESSE_API_URL}/config/get携带空对象{current_config: {}}与鉴权头update_config(config)→update_config_service(config)→ POST{JESSE_API_URL}/config/update携带{current_config: 解析后的配置}。两处服务函数都位于 jesse/mcp/tools/services/config.py其中鉴权头由 jesse/mcp/tools/services/auth.py 的hash_password()生成即对密码做 SHA256 哈希API 地址与密码来自 jesse/mcp/mcp_config.py 中由服务器启动时注入的JESSE_API_URL与JESSE_PASSWORD全局变量。在 Jesse 服务端这两个接口定义在 jesse/controllers/config_controller.pyrouter.post(/get) def get_config(json_request: ConfigRequestJson): from jesse.modes.data_provider import get_config as gc return JSONResponse({data: gc(json_request.current_config, has_livejh.has_live_trade_plugin())}, status_code200) router.post(/update) def update_config(json_request: ConfigRequestJson): from jesse.modes.data_provider import update_config as uc uc(json_request.current_config) return JSONResponse({message: Updated configurations successfully}, status_code200)请求体模型ConfigRequestJson含单个字段current_config: dict定义在 jesse/services/web.py路由通过Depends(require_auth)强制鉴权未登录请求会返回 401。2.1 数据库持久化机制真正的读写发生在 jesse/modes/data_provider.py读取get_config第 130 行起从数据库中查询Option表中type config的记录通过jh.merge_dicts(client_config, json.loads(o.json))将客户端传入的配置与数据库存储的配置递归合并再经过normalize_settings_sections()规范化后返回。若记录不存在首次使用则直接将客户端配置写入数据库并原样返回。同时它还会做两项清理删除回测配置中不再受支持的交易所、实盘配置中非当前实盘交易所的条目。写入update_config第 181 行起先读取已有配置然后执行jh.merge_dicts(existing, client_config)进行递归合并——客户端传入的叶子键值优先但客户端未提及的键会被保留。这意味着你可以只提交一个分区例如只改backtest而不会清空live与optimization分区的既有设置。配置记录存储在Option模型jesse/models/Option.py其字段为typeconfig、json存储完整配置的 JSON 文本与updated_atBigInteger 时间戳写入时都会刷新updated_at。配置的三个分区由_SETTINGS_SECTIONS (backtest, live, optimization)常量界定见 jesse/modes/data_provider.py。2.2update_config()的入参兼容性服务层的_config_update_payload()jesse/mcp/tools/services/config.py对入参做了巧妙处理由于get_config()返回的是{data: {...}}形式的 API 信封而/config/update接口期望的是内层 settings 对象因此该函数同时接受两种形状——当传入配置恰好只有data一个键时会自动解包config[data]作为更新载荷否则直接使用原配置。这正是文档中先get_config()拿到全量配置 → 修改 →update_config()回写这一标准往返流程能够无缝工作的原因。三、配置 Schema 详解3.1 根结构所有配置都包裹在data根键之下内部是三大分区{ data: { backtest: { backtest 分区配置 }, live: { 实盘分区配置 }, optimization: { 优化分区配置 } } }从工具返回结构的详细定义见 jesse/mcp/tools/config.py 中的 docstring来看各分区的类型约束为warm_up_candles是intlogging下各开关是bool交易所的balance与fee是floatfutures_leverage是intfutures_leverage_mode枚举cross | isolated交易所type枚举spot | futures。3.2 Backtest回测分区{ backtest: { warm_up_candles: 240, logging: { order_submission: true, trading_candles: true, shorter_period_candles: false, position_reduced: true, position_opened: true, position_closed: true, order_execution: true, position_increased: true, balance_update: true, order_cancellation: true }, exchanges: { Binance Futures: { balance: 10000, fee: 0.0004, type: futures, futures_leverage: 1, futures_leverage_mode: cross } } } }各参数含义参数类型默认/示例说明warm_up_candlesint240用于初始化指标的预热 K 线数量直接决定回测实际起算点K 线不足时指标值不可用logging.*bool见上控制回测期间记录哪类事件下单、交易 K 线、短周期 K 线、仓位减小/开仓/平仓/加仓、订单执行、余额更新、订单取消共 9 个开关exchanges.名称.balancefloat10000起始余额以基础货币计exchanges.名称.feefloat0.0004交易手续费率0.0004即 0.04%exchanges.名称.typestrfutures交易所类型spot现货或futures合约exchanges.名称.futures_leverageint1合约杠杆倍数默认 1 倍exchanges.名称.futures_leverage_modestrcross杠杆模式cross全仓或isolated逐仓3.3 Live实盘分区{ live: { warm_up_candles: 240, exchanges: { Binance Futures: { balance: 10000, fee: 0.0004, type: futures, futures_leverage: 1, futures_leverage_mode: cross } } } }实盘分区与回测分区结构平行但语义上有明确的安全边界源码 docstring 中特别强调实盘配置必须使用真实账户余额与真实手续费率且实盘与回测配置刻意分离避免把模拟参数误用到真实交易。实盘分区还可能包含通知notifications等实盘专属设置。3.4 Optimization优化分区{ optimization: { cpu_cores: 1, best_candidates_count: 20, warm_up_candles: 210, trials: 200, exchange: { futures_leverage: 5, fee: 0.0006, futures_leverage_mode: cross, balance: 10000, type: futures }, objective_function: sharpe } }参数默认值说明cpu_cores1优化使用的并行 CPU 核心数越大越快但更占资源best_candidates_count20保留的最优候选参数组合数量warm_up_candles210优化场景下的指标预热 K 线数trials200总试验次数参数组合数越大搜索越充分但耗时越长exchange.futures_leverage5优化所用杠杆默认比回测更激进exchange.fee0.0006优化场景手续费率0.06%exchange.balance10000优化起始余额exchange.typefutures优化固定使用合约模式objective_functionsharpe目标函数见下表可选目标函数objective_function的合法取值sharpe夏普比率衡量风险调整后收益sortino索提诺比率只考虑下行波动calmar卡尔玛比率年化收益除以最大回撤max_drawdown最小化最大回撤。目标函数的选择取决于策略目标与风险偏好追求收益/风险性价比用sharpe厌恶下行风险用sortino在意回撤控制用calmar或max_drawdown。四、使用示例从读取到更新的完整工作流4.1 读取完整配置config get_config() # config[status] success 时返回完整配置对象 backtest_settings config[config][data][backtest] fee_rate backtest_settings[exchanges][Binance Futures][fee]4.2 更新配置读取 → 修改 → 回写 → 验证官方推荐的标准四步工作流import json # 第 1 步读取当前配置 current get_config() config_data current[config] # 第 2 步按需修改仅修改目标键即可其余自动保留 config_data[data][backtest][warm_up_candles] 300 config_data[data][backtest][exchanges][Binance Spot] { balance: 50000, fee: 0.001, type: spot } # 第 3 步序列化为 JSON 字符串并回写 result update_config(json.dumps(config_data)) if result[status] success: print(Configuration updated successfully) # 第 4 步调用 get_config() 验证变更已生效也可以只提交被修改的分区部分更新new_config { data: { backtest: { warm_up_candles: 300, exchanges: { Binance Spot: { balance: 50000, fee: 0.001, type: spot } } } } } update_config(json.dumps(new_config))由于服务端与 MCP 层都执行递归合并jh.merge_dicts这种部分更新只覆盖你指定的键不会清空live与optimization分区。4.3 分区定向读取bt_config get_backtest_config() # bt_config[config][warm_up_candles]、bt_config[config][exchanges]、bt_config[config][logging] live_config get_live_config() # live_config[config][exchanges][Binance Spot][balance] 等实盘设置 opt_config get_optimization_config() # opt_config[config][cpu_cores]、opt_config[config][trials]、opt_config[config][objective_function]三个分区读取器在对应分区不存在时会返回status: error与提示并附带available_sections字段列出当前数据库中实际存在的分区便于 Agent 诊断。五、响应结构与错误处理所有工具的响应都遵循统一的信封格式{status: success|error, ...}。get_config()成功响应{ status: success, config: { data: { backtest: {}, live: {}, optimization: {} } }, message: Configuration loaded successfully }update_config()成功响应{ status: success, message: Configuration updated successfully }典型错误场景与响应源码 docstring 与实现明确列出鉴权失败密码错误API 返回 401{status: error, message: Authentication failed}配置加载/更新失败API 返回其他状态码{status: error, message: Failed to load/update config: 详情}API 不可达网络异常{status: error, error: 异常信息, message: Failed to connect to Jesse API}update_config()传入非法 JSON{status: error, error: Invalid JSON format, details: 解析错误详情, message: Failed to parse configuration JSON}传入非对象配置如数组或标量{status: error, error: Invalid configuration format, message: Configuration must be a JSON object}。服务层通过try/except对json.JSONDecodeError、ValueError、requests.exceptions.RequestException分类捕获并返回对应错误码见 jesse/mcp/tools/services/config.pyAgent 可根据status字段决定重试、修正入参或提示用户检查 Jesse 服务状态。六、配置持久化与变更生效规则配置更新立即生效update_config()一旦成功后续回测、实盘、优化任务将直接使用新配置无需重启 Jesse 服务配置持久化在数据库Option表的config记录见 jesse/models/Option.py重启应用后依然保留直到被显式修改变更可通过再次调用get_config()校验对比返回的config.data.backtest等分区内容与预期值是否一致由于 MCP 与 Dashboard 走的是同一个/config/update接口、同一份数据库存储两者对配置的修改互相可见。七、实战注意事项先读后写强烈建议任何 Agent 更新前先get_config()获取当前完整配置在内存中修改目标键后再整体回写避免覆盖未知配置项利用部分更新仅修改单个分区时可直接提交{data: {backtest: {...}}}形状的载荷递归合并会保留其余分区校验 JSON 结构update_config()的入参必须是可解析的 JSON 字符串且需符合data根键 三大分区的 Schema结构非法的配置可能导致回测/实盘运行期错误实盘安全实盘分区的balance与fee必须为真实值从源码实现看get_config()在读取时会按当前可用的实盘交易所列表过滤live.exchanges未接入的交易所条目会被剔除优化参数权衡cpu_cores与trials越高结果越充分但耗时越长建议根据本机硬件与策略复杂度折中若对回撤敏感目标函数优先考虑max_drawdown或calmar。八、进一步阅读配置工具与服务实现jesse/mcp/tools/config.py、jesse/mcp/tools/services/config.py服务端接口与数据库逻辑jesse/controllers/config_controller.py、jesse/modes/data_provider.pyMCP 服务器与 Agent 使用约束jesse/mcp/server.py、jesse/mcp/agent_rules.md其中包含不要用update_config绕过 bug的告诫配置修改仅应在用户明确要求时进行工具运行失败应如实报告并停止而不是去修补配置MCP 工具使用额度说明jesse/mcp/USAGE_LIMITS.md其他 MCP 资源参考jesse/mcp/resources/backtest_management.md、jesse/mcp/resources/optimization.md赞分享金融科技数据分析后端AI 应用【免费下载链接】jesseAn advanced crypto trading bot written in Python项目地址https://gitcode.com/gh_mirrors/je/jesse点击查看免费下载相关推荐FastMCP MCP配置工具协议配置的管理工具FastMCP MCP配置工具协议配置的管理工具 概述 FastMCP MCP配置工具是Model Context Protocol模型上下文协议生态系统人工智能MCP 服务MCP Clients工具调用100DaysOfCloudIdeas 项目教程100DaysOfCloudIdeas 项目教程 1. 项目目录结构及介绍 100DaysOfCloudIdeas/ ├── .gitignore ├── LIAI 应用开发者工具桌面应用Agno Agent 输入输出实战指南9 个示例跑通 I/O 全链路附耗时基线Agno Agent 输入输出实战指南9 个示例跑通 I/O 全链路附耗时基线 agno 是用于构建 agent 平台的 Python 框架。本文覆盖其人工智能大模型AI AgentAgent 框架多智能体工具调用RAGAgent 工作流Agent 记忆上一篇Apache SeaTunnel多引擎终极指南Zeta/Spark/Flink部署对比下一篇终极指南如何使用JNA在Java中调用OpenGL实现高性能图形渲染创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表