mcpField
A
algo-portfolio

algo-portfolio

github.com/marketcallsその他941 回インストール26 週間前に更新
リポジトリ

algo-portfolio について

複数のOpenAlgo戦略を実行するポートフォリオランナーの設定と運用を案内するスキルです。YAML設定と全体のリスク上限を使い、戦略を別々のサブプロセスで動かして損益を監視します。バックテストは統合せず、戦略ごとに実行します。

主な機能

  1. 01YAMLによるポートフォリオ設定
  2. 02戦略を独立したサブプロセスで実行
  3. 03合計損益と全体上限の監視
  4. 04上限超過時の戦略停止
  5. 05ライブと個別バックテストに対応

活用シーン

  1. 01共通のリスク上限で複数のOpenAlgo戦略を起動
  2. 02ポートフォリオの上限到達時に戦略プロセスを停止
  3. 03構成戦略を個別にバックテスト

MCP 対応

このスキルでは、OpenAlgoのクライアントとプラットフォーム操作を使ったポジション監視や注文管理を説明します。MCPサーバーやMCPクライアントとの連携については記載されていません。

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/marketcalls/openalgo-execution-skills --skill algo-portfolio

インストール後、Claude Code で/algo-portfolioを入力して読み込まれたか確認します。

詳細

グローバルリスク上限を設定して、複数戦略のポートフォリオを起動します。

引数

  • $0 = YAML 設定ファイルのパス。デフォルト:現在のディレクトリにある portfolio.yaml
  • 設定ファイルのパスの後に --mode backtest または --mode live を指定します

設定ファイルが存在しない場合は、ひな形の portfolio.yaml を生成します。

手順

  1. algo-expert/rules/portfolio-risk.md を読みます。
  2. 設定ファイルが存在しない場合は、次のひな形を生成します。
# Portfolio Runner Configuration
# See algo-expert/rules/portfolio-risk.md for cap explanations

capital: 1000000

portfolio_caps:
  portfolio_sl_pct: 0.02         # halt all at -2% capital
  portfolio_tp_pct: 0.03         # halt all at +3% capital
  daily_loss_pct: 0.015          # daily loss limit
  daily_target_pct: 0.025        # daily target
  max_concurrent_positions: 5
  max_symbol_concentration: 0.30 # max 30% of capital in one symbol

strategies:
  # List your generated strategies. The runner spawns each as a subprocess.
  - name: ema_sbin
    path: strategies/ema_crossover_SBIN/strategy.py
    env:
      SYMBOL: SBIN
      INTERVAL: 5m
  - name: rsi_reliance
    path: strategies/rsi_RELIANCE/strategy.py
    env:
      SYMBOL: RELIANCE
      INTERVAL: 15m
  1. 各戦略のパスが存在することを確認します。存在しない場合は、先に /algo-strategy を実行して作成するよう提案します。
  2. プロジェクトのルートに、core/portfolio_runner.py をラップする実行スクリプト run_portfolio.py を生成します(存在する場合は更新します)。
"""Portfolio runner entry point."""
import argparse, logging, os, sys
from pathlib import Path
from dotenv import find_dotenv, load_dotenv

# Add core helpers to path
_HERE = Path(__file__).resolve().parent
for p in [_HERE, *_HERE.parents]:
    c = p / ".claude" / "skills" / "algo-expert" / "rules" / "assets" / "core"
    if c.exists():
        sys.path.insert(0, str(c.parent)); break

from openalgo import api
from core.portfolio_runner import PortfolioRunner

logging.basicConfig(level=os.getenv("LOG_LEVEL", "INFO"),
                    format="%(asctime)s [%(levelname)s] %(name)s - %(message)s",
                    stream=sys.stdout)
load_dotenv(find_dotenv(usecwd=True))

def make_client():
    return api(
        api_key=os.getenv("OPENALGO_API_KEY", ""),
        host=os.getenv("HOST_SERVER") or os.getenv("OPENALGO_HOST", "http://127.0.0.1:5000"),
    )

def main():
    p = argparse.ArgumentParser()
    p.add_argument("--config", default="portfolio.yaml")
    p.add_argument("--mode", choices=["backtest", "live"], default="live")
    args = p.parse_args()

    runner = PortfolioRunner(args.config, client_factory=make_client, mode=args.mode)
    runner.start()
    runner.join()

if __name__ == "__main__":
    main()
  1. 実行します。

    python run_portfolio.py --config portfolio.yaml --mode live
    
  2. ユーザーに次の内容を伝えます。

    • 各戦略はそれぞれ独立したサブプロセスで実行されます(完全に分離されています)
    • 上限に達した場合、または Ctrl-C を押した場合、SIGTERM が伝播されます
    • ランナーは client.positionbook() を使って、15 秒ごとに合計 P&L を監視します
    • 上限に達すると、プラットフォーム全体で cancelallorder と closeposition が呼び出されます
    • ライブとサンドボックスの切り替えは、OpenAlgo の UI アナライザーのトグルで決まります(単一の戦略と同じです)

バックテストモード

複数の戦略を対象とする合計エクイティのバックテストには、カスタムのマージロジック(ウェイトのリバランス、上限の適用タイミング)が必要です。デフォルトのランナーはバックテストモードではこれを行わず、各子プロセスがそれぞれ独立して VectorBT バックテストを実行します。真のポートフォリオバックテストを行うには、algo-expert/rules/portfolio-risk.md のエクイティ統合パターンを参照してください。

上限の優先順位

複数の上限が同時に発動した場合、最も厳しい上限が優先されます。キルスイッチはセッションごとに一度だけ発動します。ランナーを再実行すると、IST の午前0時に日次カウンターがリセットされます。

上限到達時の Telegram アラート

ポートフォリオ停止時に Telegram アラートを送信するには、.env に TELEGRAM_USERNAME を設定し、core/portfolio_runner.py の stop_all() メソッドを拡張します。logging-and-alerts.md を参照してください。

避けること

  • アイコンや絵文字を使わないでください
  • 上限に達したときに、上限を黙って引き上げないでください。安全策が無効になります
  • 同じ OpenAlgo インスタンスに対して、2 つの PortfolioRunner プロセスを実行しないでください。どちらも上限到達時にポジションを解消しようとするため、競合します

コメント