Quant2Ptrader-MCP
Automatically converts JoinQuant quantitative trading strategies to Ptrade platform format, supporting direct code input or file paths, with automatic API mapping and detailed conversion reports.
README
🔄 Quant2Ptrader-MCP
一键转换聚宽策略到Ptrade平台的MCP服务器
📖 简介
Quant2Ptrader-MCP 是一个基于 Model Context Protocol (MCP) 的服务器,专门用于将聚宽(JoinQuant)量化策略代码自动转换为Ptrade平台格式。
✨ 核心功能
- 🚀 一键转换:输入完整聚宽策略代码,自动输出Ptrade格式
- 📁 文件支持:支持直接传入文件路径(.py、.txt等),方便长代码文件转换
- 💾 自动保存:转换结果自动保存为.py文件,返回文件路径,可直接使用 ⭐ 新功能
- 🔍 智能识别:自动识别所有需要修改的API调用
- 📊 详细报告:生成完整的转换报告,包含所有修改详情
- ⚠️ 风险提示:标注可能需要手动调整的部分
- 🎯 高兼容性:基于两个平台的API相似性,实现无缝转换
🚀 快速开始
安装依赖
npm install
构建项目
npm run build
本地运行
⭐ stdio 模式(推荐)
npm run start:stdio
🌐 HTTP 模式
npm run start:http
# 服务将运行在 http://localhost:3000/mcp
📱 客户端配置
Claude Desktop 配置
stdio 模式(推荐)
在 Claude Desktop 的配置文件中添加:
macOS/Linux: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"quant2ptrader": {
"command": "npx",
"args": ["-y", "quant2ptrader-mcp"]
}
}
}
HTTP 模式
{
"mcpServers": {
"quant2ptrader": {
"type": "streamableHttp",
"url": "http://localhost:3000/mcp",
"timeout": 600
}
}
}
🛠️ 使用方法
1. 启动服务
使用上述任一方式启动MCP服务器
2. 在AI助手中调用
方式1: 直接输入代码
在Claude或其他支持MCP的AI助手中:
请帮我把这个聚宽策略转换为Ptrade格式:
from jqdata import *
def initialize(context):
set_benchmark('000300.XSHG')
def handle_data(context, data):
order('000001.XSHE', 100)
方式2: 传入文件路径(推荐长代码使用)
请将这个聚宽策略文件转换为Ptrade格式:
文件路径: C:\path\to\your\strategy.py
或者:
转换这个文件: /home/user/my_strategy.txt
支持的文件格式: .py, .txt, .text, .code, .strategy
方式3: 指定输出目录(可选)
转换这个文件并保存到指定目录:
文件: C:\strategies\my_strategy.py
输出目录: D:\ptrade_strategies\
3. 获取转换结果
AI助手会返回:
- 📄 源文件信息
- ✅ 转换状态
- 💾 输出文件路径(自动保存的.py文件)⭐ 重点
- 📝 详细的代码修改列表
- ⚠️ 需要注意的兼容性问题
- 📋 代码预览(折叠显示)
文件命名规则:
- 输入:
my_strategy.py→ 输出:my_strategy_ptrade.py - 输入:
strategy.txt→ 输出:strategy_ptrade.py - 直接代码输入 → 输出:
strategy_ptrade.py
输出位置:
- 有文件路径:保存在原文件同目录
- 无文件路径:保存在当前工作目录
- 指定output_dir:保存在指定目录
📋 转换示例
示例1: 直接输入代码
输入(聚宽策略):
from jqdata import *
def initialize(context):
set_benchmark('000300.XSHG')
set_option('use_real_price', True)
def handle_data(context, data):
stock = '000001.XSHE'
price = data[stock].close
order(stock, 100)
输出(Ptrade策略):
from ptrade.api import *
def initialize(context):
set_benchmark('000300.XSHG')
set_option('use_real_price', True)
def handle_data(context, data):
stock = '000001.XSHE'
price = data[stock].close
order(stock, 100)
示例2: 文件路径输入
命令:
转换这个策略文件: /path/to/strategy.py
报告包含:
- 📄 源文件:
strategy.py - 📝 修改了第1行的导入语句
- ⚠️ 所有检测到的兼容性注意事项
- 🎯 完整转换后的代码
示例3: 真实策略案例(58行)
查看 test_strategy.py 了解完整的双均线策略示例,包含:
- 完整的初始化配置
- 历史数据获取
- 交易逻辑
- 日志输出
- 账户管理
转换结果: ✅ 完美转换,仅修改1行(导入语句)
🔧 开发指南
项目结构
quant2ptrader-mcp/
├── src/
│ ├── index.ts # stdio模式入口
│ ├── httpServer.ts # HTTP模式入口
│ └── tools/
│ └── convertStrategy.ts # 核心转换逻辑
├── build/ # 编译输出目录
├── package.json
├── tsconfig.json
└── README.md
脚本命令
npm run build # 构建项目
npm run watch # 监听模式编译
npm run start:stdio # 启动stdio模式
npm run start:http # 启动HTTP模式
npm run dev # 开发模式(HTTP)
添加新的转换规则
编辑 src/tools/convertStrategy.ts 中的 apiMappings 数组:
const apiMappings = [
{
pattern: /your_pattern/g,
replacement: 'your_replacement',
reason: '转换原因说明'
},
// ... 更多规则
];
🤝 API差异说明
✅ 完全兼容的API
以下聚宽API在Ptrade中完全兼容,无需修改:
initialize(context)- 初始化函数handle_data(context, data)- 数据处理函数order(),order_target(),order_value(),order_target_value()- 下单函数set_benchmark()- 设置基准set_slippage()- 设置滑点get_price()- 获取价格数据get_fundamentals()- 获取财务数据context.portfolio.total_value- 总资产context.portfolio.available_cash- 可用资金context.portfolio.market_value- 持仓市值
🔄 自动转换的API(关键差异)
转换工具会自动处理以下API差异:
导入模块
from jqdata import *→from ptrade.api import *import jqdata→import ptrade
日志函数 ⭐
log.info()→log()log.debug()→log()log.warn()→log()log.error()→log()
持仓访问 ⭐
context.portfolio.positions→get_positions()context.portfolio.positions[stock]→get_position(stock)
历史数据获取
attribute_history()→get_history()history()→get_history()
行情数据
get_current_data()→get_snapshot()
市场数据
get_all_securities()→get_market_list()
手续费设置
set_order_cost()→set_commission()
交易函数
order_target_percent()→order_target_value()⚠️ 需手动计算金额
定时任务
run_weekly()→run_daily()⚠️ 需添加日期判断run_monthly()→run_daily()⚠️ 需添加日期判断
⚠️ 需要注意的转换
- 按比例下单:
order_target_percent()已转换为order_target_value(),需要手动计算目标金额 - 定时任务:
run_weekly/monthly转换为run_daily后,需在函数内添加日期判断逻辑 - 财务数据查询:
get_fundamentals()在Ptrade中支持,但查询语法可能需要微调 - 日期时间参数:建议使用字符串格式,符合Ptrade要求
📦 发布到npm
# 登录npm
npm login
# 发布
npm publish
🐛 已知问题
- 部分聚宽特有的研究环境API可能无法完全转换
- 自定义函数和第三方库需要手动检查兼容性
- 建议转换后在Ptrade上进行小规模回测验证
🛣️ 未来计划
- [ ] 支持批量文件转换
- [ ] 增强财务数据查询API的转换
- [ ] 添加策略语法检查
- [ ] 支持双向转换(Ptrade → 聚宽)
- [ ] 提供Web界面
📄 许可证
Apache License 2.0 - 查看 LICENSE 文件了解详情
👨💻 作者
Xingyu Chen
- LinkedIn: https://www.linkedin.com/in/xingyu-chen-b5b3b0313/
- Email: guangxiangdebizi@gmail.com
- GitHub: https://github.com/guangxiangdebizi/
- NPM: https://www.npmjs.com/~xingyuchen
🙏 致谢
- 感谢 Model Context Protocol 提供的优秀协议
- 感谢聚宽和Ptrade平台提供的量化交易基础设施
📞 支持
如有问题或建议,欢迎:
- 提交 GitHub Issue
- 发送邮件至 guangxiangdebizi@gmail.com
⭐ 如果这个项目对你有帮助,欢迎 Star!
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。