印度股票市场智能服务

一个基于免费API的模型上下文协议(MCP)服务器,提供实时印度股票市场情报,包括实时价格、期权链、交易信号、投资组合跟踪和虚拟交易。

  • by Ahmed-Armaan
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 Ahmed-Armaan/indiaquant-mcp-server

使用说明

IndiaQuant MCP

一个模型上下文协议(MCP)服务器,为Claude提供实时印度股市情报——实时价格、期权链、交易信号、投资组合跟踪和虚拟交易。完全基于免费API构建。


建筑

Claude Desktop通过stdio与MCP服务器通信。每个工具调用都会命中一个服务模块,该模块在发出API请求之前检查内存中的缓存。虚拟投资组合保存在SQLite中。

├── mcp/          # tool registration
├── services/     # market data, signals, greeks, scanner
├── portfolio/    # virtual trading, P&L, SQLite
├── types/        # shared interfaces
└── utils/        # cache

数据流

Claude Desktop (or any LLM of choice)
     │  MCP (stdio)
     ▼
 server.ts  ──► services/*  ──► yfinance / NewsAPI / Alpha Vantage
                    │
                 cache.ts  (TTL per data type)
                    │
              portfolio/db.ts  (SQLite)

免费API堆栈

用途 API 限制
实时价格+OHLC+期权链 雅虎金融 无限
新闻与情绪 NewsAPI.org 每天100个要求

没有付费API。不需要经纪人帐户。


跑

先决条件

1.克隆并安装

git clone https://github.com/your-username/indiaquant-mcp
cd indiaquant-mcp
npm install

2.建造

npx tsc

输出转到 dist/.

3.连接到克劳德桌面

查找您的Claude Desktop配置文件:

操作系统 路径
macOS ~/Library/Application Support/Claude/claude_desktop_config.json
窗户 %APPDATA%\Claude\claude_desktop_config.json

添加以下内容(用实际项目路径替换路径):

{
  "mcpServers": {
    "indiaquant": {
      "command": "node",
      "args": ["/absolute/path/to/indiaquant-mcp/dist/main.js"],
      "env": {
        "NEWS_API_KEY": "your_newsapi_key",
      }
    }
  }
}

4.启动克劳德桌面

完全启动克劳德桌面。你应该看看 已编入索引的 在聊天界面的MCP工具图标下列出。

验证它是否正常工作

问克劳德:

What's the live price of RELIANCE.NS?

如果您收到实时价格,则服务器已连接并正常工作。


MCP工具

get_live_price

获取任何NSE/BSE股票的实时价格、日变化百分比和交易量。

symbol: "RELIANCE.NS"
→ { price, changePercentage, volume }

get_options_chain

返回给定到期日的所有看涨/看跌未平仓合约。

symbol: "NIFTY", expiry: "2025-06-26" (optional)
→ { calls: [{ strike, oi }], puts: [{ strike, oi }] }

analyze_sentiment

通过NewsAPI获取某个符号的最新10个新闻标题,并使用正面/负面单词词典对其进行评分。

symbol: "INFY"
→ { score: 0.45, signal: "BUY" }

generate_signal

将6个加权指标组合成一个具有置信度(0-100)的买入/卖出/持有信号。

指标 重量
EMA 20/50交叉 20%
RSI(14) 20%
MACD 20%
布林带 15%
交易量与平均值 10%
新闻情绪 15%
symbol: "TCS.NS", frame: "1d"
→ { signal: "BUY", confidence: 72 }

get_portfolio_pnl

从SQLite读取所有未结头寸,并使用实时价格计算未实现损益。

→ { positions: [...], totalPnL, totalValue, cashBalance, netWorth }

place_virtual_trade

执行纸质交易。购买从现金中扣除;卖出可以增加现金。如果资金不足或没有头寸可供出售,则拒绝。

symbol: "HDFCBANK.NS", qty: 10, side: "BUY"
→ order confirmation with execution price and remaining cash

calculate_greeks

纯Black-Scholes实现——没有外部数学库。自动获取实时现货价格。如果没有提供,则从期权链中读取隐含波动率。

希腊人回来了:

  • 德尔塔 --价格对现货变动的敏感性
  • 伽马 --δ变化率
  • 西塔 --每个日历日的时间衰减(₹)
  • 织女星 --对1%静脉注射的敏感性
symbol: "NIFTY", strike: 24000, expiry: "2025-06-26", type: "CE"
→ { delta, gamma, theta, vega, intrinsic, timeValue, spot }

detect_unusual_activity

扫描期权链和股票交易量是否存在异常:

  • OI峰值:单次打击OI>2倍平均值
  • Vol/OI比值>3倍(激进定位)
  • 看跌/看涨比率>1.5(看跌)或<0.5(看涨)
  • 最大疼痛发作计算
  • 股票交易量>2×3个月平均值
symbol: "RELIANCE"
→ { alerts: [...], summary }

scan_market

使用AND逻辑过滤器筛选6个行业的约30只NSE股票。分批运行4次,以遵守速率限制。

sector: "IT", rsi_below: 30
→ oversold IT stocks sorted by RSI ascending

支持的筛选器: sector, rsi_below, rsi_above, change_above, change_below, signal, min_volume

get_sector_heatmap

按行业返回平均日变化百分比:IT、银行、能源、快速消费品。


设计决策

为什么选择stdio传输? Claude Desktop通过stdin/stdout连接到MCP服务器。无需HTTP服务器或端口管理,更简单、更可靠,适合本地使用。

为什么选择SQLite作为投资组合? 轻量级、零配置、基于文件的持久性。无需单独的数据库进程,即可在服务器重启后继续运行。

为什么要从头开始实施Black-Scholes? 分配需要它,并且它保持了较小的依赖性足迹。这 normCdf 使用Abramowitz&Stegun有理逼近(最大误差<1.5×10⁻⁷),这对于零售期权分析来说足够准确。

缓存策略

基于Map构建的内存缓存用于所有数据类型。每个缓存条目都将值与到期时间戳(Date.now()+ttl)一起存储。读取时,如果条目已过期,则将其删除并返回null,从而触发新的获取。

数据 TTL
市场价格 20s
选项链 1分钟
情绪 5分钟
希腊语 5分钟

在并发请求的情况下,将应用程序保持在免费API速率限制范围内。

局限性

  • NewsAPI免费层:每天100个请求。情绪调用被积极缓存以保持在限制范围内。
  • NSE的金融期权数据延迟约15分钟。不适合活体剥头皮。
  • 如果删除SQLite文件,虚拟投资组合将重置。
  • scan_market 随着 signal 过滤器运行缓慢(~10-15s) generate_signal 每只股票。