MCP Upstox交易服务器
项目概述
最互联枢轴(MCP)Upstox交易服务器是一个自动交易应用程序,可根据市场中的高概率支撑位和阻力位进行识别和交易。该系统分析历史价格数据,以确定价格反复与特定水平相互作用的枢轴点,并在当前价格接近这些重要水平时执行交易。
什么是MCP(最连通枢轴)?
MCP是一个技术分析概念,它确定了过去充当重要支撑或阻力的价格水平。这些是以下几点:
- 价格已多次超过平均水平(枢轴)
- 多个价格点聚集在特定水平(连接)周围
- 连接最多的级别成为MCP——一个高概率反转区域
该策略假设价格更有可能尊重之前多次充当支撑/阻力的水平,为交易者提供统计优势。
先决条件
- Node.js(v14或更高版本)
- NPM(节点包管理器)
- 具有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 mainAWS EC2
- 设置EC2实例
- 安装Node.js和npm
- 克隆存储库
- 设置环境变量
- 使用PM2管理节点进程:
npm install -g pm2
pm2 start server.jsDocker部署
创建一个Docker文件:
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的要求
- 更容易维护
- API更改通过SDK更新进行处理 - 当Upstox API发展时,减少了修改代码的需要
使用MCP Trading 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);
}故障排除
- 身份验证问题:确保中的API凭据正确无误
.env文件 - 下单错误:检查数量是否符合最小批量要求
- 数据检索问题:验证符号格式是否正确(NSE_FO|symbol-I)
- 令牌刷新失败:检查您的API密钥是否已过期或已被吊销
进一步定制
MCP计算和交易逻辑可以通过修改来定制:
calculateMCP()功能-调整连接标准、枢轴点标识- 策略端点-修改偏差阈值、趋势识别逻辑
- 订单参数-变更订单类型、有效期、披露数量
贡献
欢迎投稿!请随时提交拉取请求。
许可证
该项目根据MIT许可证获得许可。
