关于 MCP Upstox Trading Server
MCP Upstox Trading Server 是面向 Upstox 交易者的 Node.js 应用,可从历史价格计算支撑和阻力位,并通过自动策略下单。它还提供跨标的计算和交易执行接口。
主要功能
- 01识别密集连接的支撑阻力位
- 02计算多个标的的 MCP 值
- 03通过 Upstox 执行交易
- 04运行自动 MCP 策略
- 05保存并刷新身份验证令牌
适用场景
- 01根据历史行情计算枢轴位
- 02比较多个标的的 MCP 水平
- 03通过 Upstox 下单
- 04运行基于价格水平的自动策略
MCP 相关
README 描述了行情分析、MCP 计算、交易和策略执行的 HTTP 接口,但未说明其实现了 MCP 协议接口。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
MCP Upstox 交易服务
项目概述
Most Connected Pivot(MCP)Upstox 交易服务是一款自动交易应用,可识别市场中高概率的支撑位和阻力位,并据此进行交易。系统会分析历史价格数据,识别价格曾多次与特定价位交互的枢轴点,并在当前价格接近这些重要价位时执行交易。
什么是 MCP(Most Connected Pivot)?
MCP 是一种技术分析概念,用于识别过去曾发挥重要支撑或阻力作用的价格水平。这些位置具备以下特征:
- 价格多次穿过其均值(枢轴点)
- 多个价格点聚集在某个特定水平附近(连接)
- 连接数最多的水平即为 MCP——一个高概率反转区域
该策略假设,价格更有可能遵循过去曾多次发挥支撑/阻力作用的水平,从而为交易者带来统计优势。
前置条件
- Node.js(v14 或更高版本)
- NPM(Node Package Manager)
- 拥有 API 访问权限的 Upstox 开发者账户
- JavaScript 和交易概念的基础知识
安装步骤
-
创建项目目录
mkdir mcp-upstox-server cd mcp-upstox-server -
初始化项目
npm init -y -
安装所需依赖
npm install express axios cors dotenv upstox-js-sdk -
创建服务文件
- 将提供的服务代码复制到名为
server.js的文件中 - 创建
.env文件,并填入提供的配置
- 将提供的服务代码复制到名为
-
获取 Upstox API 凭据
- 登录 Upstox 开发者账户
- 创建新应用以获取 API 密钥和密钥
- 将重定向 URI 设置为
http://localhost:3000/callback或自定义域名 - 使用你的凭据更新
.env文件
环境设置
开发环境
创建 .env.development 文件,并填入以下配置:
PORT=3000
UPSTOX_API_KEY=your_development_api_key
UPSTOX_API_SECRET=your_development_api_secret
REDIRECT_URI=http://localhost:3000/callback
NODE_ENV=development
在开发模式下运行:
NODE_ENV=development node server.js
测试环境
创建 .env.test 文件:
PORT=3001
UPSTOX_API_KEY=your_test_api_key
UPSTOX_API_SECRET=your_test_api_secret
REDIRECT_URI=http://localhost:3001/callback
NODE_ENV=test
在测试模式下运行:
NODE_ENV=test node server.js
生产环境
创建 .env.production 文件:
PORT=8080
UPSTOX_API_KEY=your_production_api_key
UPSTOX_API_SECRET=your_production_api_secret
REDIRECT_URI=https://your-domain.com/callback
NODE_ENV=production
在生产模式下运行:
NODE_ENV=production node server.js
部署选项
本地部署
用于个人或开发用途:
node server.js
云部署
Heroku
-
创建 Procfile:
web: node server.js -
在 Heroku 控制面板中设置环境变量
-
部署:
git push heroku main
AWS EC2
- 设置 EC2 实例
- 安装 Node.js 和 npm
- 克隆代码库
- 设置环境变量
- 使用 PM2 管理 Node 进程:
npm install -g pm2 pm2 start server.js
Docker 部署
创建 Dockerfile:
FROM node:16
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 8080
CMD ["node", "server.js"]
构建并运行:
docker build -t mcp-upstox-server .
docker run -p 8080:8080 -d mcp-upstox-server
运行服务
-
启动服务
node server.js -
通过 Upstox 进行身份验证
- 打开浏览器并访问
http://localhost:3000/auth - 系统会将你重定向到 Upstox 登录页面
- 登录并授权应用后,系统会将你重定向回服务
- 你应会看到一条表示身份验证成功的消息
- 你的令牌现已安全存储,并会在需要时自动刷新
- 打开浏览器并访问
身份验证改进
服务现已包含以下身份验证改进:
-
令牌持久化
- 访问令牌和刷新令牌会安全地存储在本地文件(
token.json)中 - 服务启动时会加载令牌,无需重新进行身份验证
- 访问令牌和刷新令牌会安全地存储在本地文件(
-
自动刷新令牌
- 系统会自动检测令牌是否即将过期
- 令牌会在过期前 5 分钟于后台刷新
- 所有 API 调用都会使用中间件,确保有可用的有效令牌
-
登出功能
- 新增的
/logout端点允许用户完全退出登录 - 此操作会从内存和磁盘中清除所有已存储的令牌
- 新增的
Upstox SDK 集成
服务器现在使用官方 Upstox JavaScript SDK,提供以下功能:
-
简化 API 调用
- 通过统一的接口直接访问所有 Upstox API 端点
- 为 API 请求提供类型检查和更完善的错误处理
-
自动格式化请求
- SDK 会妥善格式化所有 API 请求
- 确保符合 Upstox API 要求
-
更易于维护
- 通过 SDK 更新处理 API 变更
- Upstox API 演进时,无需频繁修改代码
使用 MCP 交易 API
计算某个标的的 MCP
请求:
GET /historical-data/NSE_FO%7CNIFTY-I/1D?from=2023-01-01&to=2023-04-01
响应:
{
"symbol": "NSE_FO|NIFTY-I",
"interval": "1D",
"dataPoints": [...],
"mcp": {
"timestamp": "2023-02-15T09:15:00.000Z",
"price": 17865.75,
"connections": 12
}
}
计算多个标的的 MCP
请求:
POST /mcp/calculate
Content-Type: application/json
{
"symbols": ["NSE_FO|NIFTY-I", "NSE_FO|BANKNIFTY-I"],
"interval": "1D",
"from": "2023-01-01",
"to": "2023-04-01"
}
响应:
{
"NSE_FO|NIFTY-I": {
"timestamp": "2023-02-15T09:15:00.000Z",
"price": 17865.75,
"connections": 12
},
"NSE_FO|BANKNIFTY-I": {
"timestamp": "2023-02-18T09:15:00.000Z",
"price": 41235.50,
"connections": 9
}
}
执行交易
请求:
POST /trade
Content-Type: application/json
{
"symbol": "NSE_FO|NIFTY-I",
"quantity": 50,
"side": "BUY",
"orderType": "LIMIT",
"price": 17850
}
响应:
{
"order_id": "12345678",
"status": "success",
"message": "Order placed successfully"
}
运行自动化 MCP 策略
请求:
POST /strategy/mcp
Content-Type: application/json
{
"symbol": "NSE_FO|NIFTY-I",
"interval": "1D",
"lookbackDays": 30,
"investmentAmount": 100000
}
响应:
{
"strategy": "MCP",
"action": "BUY",
"order": {
"order_id": "12345678",
"status": "success"
},
"mcp": {
"timestamp": "2023-03-15T09:15:00.000Z",
"price": 17865.75,
"connections": 12
},
"currentPrice": 17870.25,
"analysis": {
"mcpDeviation": "0.03%",
"connectionStrength": 12
}
}
安全注意事项
开发环境
- 使用权限受限的测试 API 密钥
- 仅在内存中存储令牌(禁用文件持久化)
- 启用详细的错误日志记录
生产环境
- 使用权限受限的适当 API 密钥管理方案
- 使用安全数据库存储令牌,而非文件系统
- 为 API 访问实施 IP 白名单
- 为所有连接启用 HTTPS
- 使用 Nginx 等反向代理
- 实施速率限制
在生产模式下,将以下代码添加到 server.js:
if (process.env.NODE_ENV === 'production') {
// Force HTTPS
app.use((req, res, next) => {
if (req.header('x-forwarded-proto') !== 'https') {
res.redirect(`https://${req.header('host')}${req.url}`);
} else {
next();
}
});
// Rate limiting
const rateLimit = require('express-rate-limit');
const limiter = rateLimit({
windowMs: 15 * 60 * 1000, // 15 minutes
max: 100 // limit each IP to 100 requests per windowMs
});
app.use(limiter);
}
故障排除
- 身份验证问题:确保
.env文件中的 API 凭据正确 - 下单错误:检查数量是否符合最小手数要求
- 数据获取问题:确认标的格式正确(NSE_FO|SYMBOL-I)
- 令牌刷新失败:检查 API 密钥是否已过期或被撤销
进一步自定义
可通过修改以下内容来自定义 MCP 计算和交易逻辑:
calculateMCP()函数 — 调整连接条件和枢轴点识别- 策略端点 — 修改偏差阈值和趋势识别逻辑
- 订单参数 — 更改订单类型、有效期和披露数量
贡献
欢迎贡献!请随时提交 Pull Request。
许可证
本项目采用 MIT License 授权。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。