mcpField
L
live-feed

live-feed

github.com/marketcalls数据与数据库20557 次安装20 周前更新
代码仓库

关于 live-feed

live-feed 是用于通过 OpenAlgo WebSocket 流创建实时指标行情脚本的 Agent 技能。它支持从最新成交价更新到市场深度分析和多标的展示等模式。

主要功能

  1. 01配置 LTP、quote、depth 或 multi 行情流
  2. 02维护滚动行情缓冲区
  3. 03根据流式数据计算指标
  4. 04展示市场深度与买卖盘失衡
  5. 05处理取消订阅与 WebSocket 清理

适用场景

  1. 01跟踪单个标的的实时指标
  2. 02查看带多空颜色标记的报价数据
  3. 03分析买卖价差与订单失衡
  4. 04监控多标的自选列表

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/marketcalls/openalgo-indicator-skills --skill live-feed

安装后在 Claude Code 中输入/live-feed确认已加载。

详细介绍

使用 OpenAlgo WebSocket 流式传输创建实时指标数据流。

参数

按以下格式解析 $ARGUMENTS:symbol exchange mode

  • $0 = symbol(例如 SBIN、RELIANCE、NIFTY)。默认值:SBIN
  • $1 = exchange(例如 NSE、NSE_INDEX)。默认值:NSE
  • $2 = mode(例如 ltp、quote、depth、multi)。默认值:quote

如果没有参数,请询问用户的 symbol 以及所需的数据。

说明

  1. 阅读指标专家规则,特别是:
    • rules/websocket-feeds.md — WebSocket 连接和订阅
    • rules/data-fetching.md — 用于初始化缓冲区的历史数据
  2. 按需创建 charts/live/ 目录
  3. 创建 {symbol}_live_feed.py
  4. 使用 rules/assets/live_feed/template.py 中的模板
数据流类型
ltp — 最新成交价 + 指标
  • 订阅 LTP 数据流
  • 维护滚动缓冲区(最近 200 个 tick)
  • 在缓冲区上计算 EMA、RSI
  • 实时输出指标值
quote — 完整报价 + 指标
  • 订阅 Quote 数据流
  • 显示 OHLC + LTP + 成交量
  • 在收盘价缓冲区上计算指标
  • 使用颜色区分输出(看涨/看跌)
depth — 市场深度分析
  • 订阅 Depth 数据流
  • 显示 L5 买卖盘
  • 计算买卖价差、订单失衡
  • 显示买入总量与卖出总量
multi — 多标的数据流
  • 订阅多个标的
  • 显示包含 LTP 和关键指标的自选列表
  • 自动刷新显示
脚本结构
"""
Real-Time Indicator Feed for {SYMBOL}
Mode: {mode}
"""
import os
import time
import numpy as np
from datetime import datetime, timedelta
from dotenv import find_dotenv, load_dotenv
from openalgo import api, ta

load_dotenv(find_dotenv(), override=False)

SYMBOL = "{symbol}"
EXCHANGE = "{exchange}"

client = api(
    api_key=os.getenv("OPENALGO_API_KEY"),
    host=os.getenv("OPENALGO_HOST", "http://127.0.0.1:5000"),
    verbose=1,
)

# Pre-fetch historical data for buffer initialization
df = client.history(
    symbol=SYMBOL, exchange=EXCHANGE, interval="1m",
    start_date=(datetime.now() - timedelta(days=1)).strftime("%Y-%m-%d"),
    end_date=datetime.now().strftime("%Y-%m-%d"),
)
close_buffer = list(df["close"].values[-200:])

instruments = [{"exchange": EXCHANGE, "symbol": SYMBOL}]

def on_data(data):
    ltp = data["data"].get("ltp")
    if ltp is None:
        return

    close_buffer.append(float(ltp))
    if len(close_buffer) > 200:
        close_buffer.pop(0)

    if len(close_buffer) >= 20:
        arr = np.array(close_buffer, dtype=np.float64)
        ema_val = ta.ema(arr, 20)[-1]
        rsi_val = ta.rsi(arr, 14)[-1] if len(arr) >= 15 else float("nan")

        timestamp = datetime.now().strftime("%H:%M:%S")
        print(f"[{timestamp}] {SYMBOL} LTP:{ltp:>10.2f} | "
              f"EMA(20):{ema_val:>10.2f} | RSI(14):{rsi_val:>6.2f}")

# Connect and subscribe
client.connect()
client.subscribe_ltp(instruments, on_data_received=on_data)

print(f"Streaming {SYMBOL} on {EXCHANGE} — Press Ctrl+C to stop")
try:
    while True:
        time.sleep(1)
except KeyboardInterrupt:
    print("Stopping feed...")

client.unsubscribe_ltp(instruments)
client.disconnect()
清理

脚本必须:

  • 正确处理 Ctrl+C
  • 取消订阅所有数据流
  • 断开 WebSocket 连接
  • 输出会话时长和处理的 K 线数量摘要

详细程度

告知用户可用的详细程度选项:

  • verbose=0:静默模式(仅输出错误)
  • verbose=1:连接和订阅日志
  • verbose=2:所有数据更新(调试模式)

示例用法

/live-feed SBIN NSE ltp /live-feed NIFTY NSE_INDEX quote /live-feed SBIN NSE depth /live-feed multi NSE

评论

支持 Markdown