关于 algo-portfolio
指导配置和运行多策略 OpenAlgo 投资组合运行器的技能。运行器使用 YAML 配置和全局风险上限,将策略置于独立子进程中并监控汇总盈亏;回测则由各策略分别执行,不合并为组合回测。
主要功能
- 01通过 YAML 配置投资组合
- 02在独立子进程中运行策略
- 03监控汇总盈亏和全局上限
- 04超限时停止策略
- 05支持实盘及单策略回测
适用场景
- 01在共享风险上限下启动多个 OpenAlgo 策略
- 02达到组合限制时停止策略进程
- 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。
说明
- 阅读
algo-expert/rules/portfolio-risk.md。 - 如果配置文件不存在,则生成以下初始配置:
# 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
- 验证每个策略路径是否存在。如果不存在,建议先运行
/algo-strategy创建策略。 - 在项目根目录生成运行器脚本
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()
-
运行它:
python run_portfolio.py --config portfolio.yaml --mode live -
告知用户:
- 每个策略都在各自的子进程中运行(完全隔离)
- 达到上限或按下 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