自动交易服务器

MCP Upstox交易服务器是一款基于历史价格数据分析并自动执行交易的应用程序,专注于识别市场中的高概率支撑和阻力水平。

  • by lonelypx
  • JavaScript
  • 本地部署
  • 更新于
在 GitHub 查看 lonelypx/mcp-upstox-server

使用说明

MCP Upstox交易服务器

项目概述

最互联枢轴(MCP)Upstox交易服务器是一个自动交易应用程序,可根据市场中的高概率支撑位和阻力位进行识别和交易。该系统分析历史价格数据,以确定价格反复与特定水平相互作用的枢轴点,并在当前价格接近这些重要水平时执行交易。

什么是MCP(最连通枢轴)?

MCP是一个技术分析概念,它确定了过去充当重要支撑或阻力的价格水平。这些是以下几点:

  1. 价格已多次超过平均水平(枢轴)
  2. 多个价格点聚集在特定水平(连接)周围
  3. 连接最多的级别成为MCP——一个高概率反转区域

该策略假设价格更有可能尊重之前多次充当支撑/阻力的水平,为交易者提供统计优势。

先决条件

  • Node.js(v14或更高版本)
  • NPM(节点包管理器)
  • 具有API访问权限的Upstox开发人员帐户
  • 对JavaScript和交易概念的基本理解

安装步骤

  1. 创建项目目录

    mkdir mcp-upstox-server
    cd mcp-upstox-server
    
  2. 初始化项目

    npm init -y
    
  3. 安装所需的依赖项

    npm install express axios cors dotenv upstox-js-sdk
    
  4. 创建服务器文件

    • 将提供的服务器代码复制到名为的文件中 server.js
    • 创建一个 .env 提供配置的文件
  5. 获取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

  1. 创建Procfile:

    web: node server.js
    
  2. 在Heroku仪表板中设置环境变量

  3. 部署:

    git push heroku main
    

AWS EC2

  1. 设置EC2实例
  2. 安装Node.js和npm
  3. 克隆存储库
  4. 设置环境变量
  5. 使用PM2管理节点进程:
    npm install -g pm2
    pm2 start server.js
    

Docker部署

创建一个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

运行服务器

  1. 启动服务器

    node server.js
    
  2. 使用Upstox进行身份验证

    • 打开浏览器并导航到 http://localhost:3000/auth
    • 您将被重定向到Upstox登录页面
    • 登录并授权应用程序后,您将被重定向回服务器
    • 您应该看到一条成功消息,指示身份验证成功
    • 您的令牌现在已安全存储,并将在需要时自动刷新

身份验证改进

服务器现在包括以下身份验证改进:

  1. 令牌持久性

    • 访问和刷新令牌安全地存储在本地文件中(token.json)
    • 令牌在服务器启动时加载,无需重新进行身份验证
  2. 自动令牌刷新

    • 系统会自动检测令牌何时到期
    • 令牌在到期前5分钟在后台刷新
    • 所有API调用都使用确保有效令牌可用的中间件
  3. 注销功能

    • 一个新的 /logout 端点允许用户完全注销
    • 这将从内存和磁盘中清除所有存储的令牌

Upstox SDK集成

服务器现在使用官方的Upstox JavaScript SDK,提供:

  1. 简化的API调用

    • 通过一致的接口直接访问所有Upstox API端点
    • API请求的类型检查和更好的错误处理
  2. 自动请求格式化

    • SDK处理所有API请求的正确格式
    • 确保符合Upstox API的要求
  3. 更容易维护

    • 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计算和交易逻辑可以通过修改来定制:

  1. calculateMCP() 功能-调整连接标准、枢轴点标识
  2. 策略端点-修改偏差阈值、趋势识别逻辑
  3. 订单参数-变更订单类型、有效期、披露数量

贡献

欢迎投稿!请随时提交拉取请求。

许可证

该项目根据MIT许可证获得许可。