mcpField
A
algo-portfolio

algo-portfolio

github.com/marketcalls其他941 次安装26 周前更新
代码仓库

关于 algo-portfolio

指导配置和运行多策略 OpenAlgo 投资组合运行器的技能。运行器使用 YAML 配置和全局风险上限,将策略置于独立子进程中并监控汇总盈亏;回测则由各策略分别执行,不合并为组合回测。

主要功能

  1. 01通过 YAML 配置投资组合
  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. 在项目根目录生成运行器脚本 run_portfolio.py(如果已存在,则更新),用于封装 core/portfolio_runner.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() 每 15s 监控一次总盈亏
    • 达到上限时,将在整个平台范围内调用 cancelallorder + closeposition
    • 实盘还是沙盒由 OpenAlgo 的 UI 分析器开关决定(与单个策略相同)

回测模式

多个策略的总权益回测需要自定义合并逻辑(权重再平衡、上限触发时机)。默认运行器在回测模式下不会执行此操作——每个子进程都会独立运行自己的 VectorBT 回测。如需进行真正的投资组合回测,请参阅 algo-expert/rules/portfolio-risk.md 中的合并权益模式。

上限优先级

多个上限同时触发时,以限制最严格的上限为准。每个会话只触发一次熔断开关——重新运行运行器会在 IST 午夜重置每日计数器。

上限触发时发送 Telegram 警报

若要在投资组合停止时发送 Telegram 警报,请在 .env 中设置 TELEGRAM_USERNAME,并扩展 core/portfolio_runner.py 的 stop_all() 方法。请参阅 logging-and-alerts.md。

避免

  • 不要使用图标或表情符号
  • 达到上限时,不要悄悄提高上限——这会使安全网失去作用
  • 不要针对同一个 OpenAlgo 实例运行两个 PortfolioRunner 进程——达到上限时,它们都会尝试平仓,从而发生冲突

评论

支持 Markdown