mcpField
L
live-feed

live-feed

github.com/marketcallsデータ・データベース20557 回インストール20 週間前に更新
リポジトリ

live-feed について

live-feedは、OpenAlgo WebSocketストリーミングを使ったリアルタイム指標フィードのスクリプトを作成するスキルです。最終取引価格から板情報や複数銘柄の表示まで、複数のモードに対応します。

主な機能

  1. 01LTP・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. indicator-expert のルールを読みます。特に以下を確認してください:
    • 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 ティック)を維持します
  • バッファ上で EMA、RSI を計算します
  • リアルタイムのインジケーター値を出力します
quote — フルクオート + インジケーター
  • クオートフィードを購読します
  • OHLC + LTP + 出来高を表示します
  • 終値バッファ上でインジケーターを計算します
  • 強気/弱気を色分けして表示します
depth — マーケットデプス分析
  • Depth フィードを購読します
  • L5 の買い板/売り板を表示します
  • 買値と売値のスプレッド、注文の不均衡を計算します
  • 買い数量と売り数量の合計を表示します
multi — マルチシンボルフィード
  • 複数の symbol を購読します
  • 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 を切断します
  • セッション時間と処理したバー数の概要を出力します

詳細ログのレベル

詳細ログのオプションについてユーザーに知らせます:

  • 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

コメント