mcpField
A
algo-host

algo-host

github.com/marketcalls云与 DevOps941 次安装26 周前更新
代码仓库

关于 algo-host

为 OpenAlgo 策略准备上传到 `/python` 托管页面的验证与上传指南,供策略开发者检查主机兼容性。它会检查信号处理、环境变量、日志和启动模式,并生成 HOST_UPLOAD.md。

主要功能

  1. 01检查策略主机兼容性
  2. 02列出并验证策略目录
  3. 03生成 HOST_UPLOAD.md 上传指南
  4. 04指出验证失败项及修复方式

适用场景

  1. 01上传策略前检查托管要求
  2. 02批量查看可部署策略状态
  3. 03根据验证报告修复兼容性问题

安装

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

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

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

详细介绍

为上传到 OpenAlgo 的 /python 策略托管服务准备策略。

参数

  • $0 = 策略名称(例如 ema_crossover_SBIN)或 .py 文件的完整路径
  • 特殊参数:--list 用于列出 strategies/ 中可部署的策略及其验证状态

如果 $0 是文件夹名称,文件路径为 strategies/<name>/strategy.py。如果它已经是路径,则按原样使用。

说明

  1. 阅读 algo-expert/rules/self-hosted-strategies.md。
  2. 阅读策略文件。
  3. 验证以下标准(每项均可通过 grep 推断):
检查项查找内容
SIGTERM 处理程序存在 signal.signal(signal.SIGTERM, ...)
SIGINT 处理程序存在 signal.signal(signal.SIGINT, ...)
使用 stop_event存在 threading.Event() 和 stop_event.set()
HOST_SERVER 优先级os.getenv("HOST_SERVER") or os.getenv("OPENALGO_HOST", 模式
读取 STRATEGY_EXCHANGEos.getenv("OPENALGO_STRATEGY_EXCHANGE", 模式
stdout 日志记录basicConfig 中使用 stream=sys.stdout;不调用 FileHandler
策略入口保护if __name__ == "__main__":
模式分派器--mode argparse,且 default=os.getenv("MODE", "live")
不包含硬编码的本地路径不存在 /home/、C:\\Users、/Users/
STRATEGY_NAME 环境变量标记os.getenv("STRATEGY_NAME", 模式
  1. 输出验证报告:

    Validation: strategies/ema_crossover_SBIN/strategy.py
      [PASS]  SIGTERM handler installed (line 327)
      [PASS]  HOST_SERVER priority correct
      [PASS]  Reads OPENALGO_STRATEGY_EXCHANGE
      [PASS]  stdout-only logging
      [PASS]  Mode dispatcher honors env MODE
      [WARN]  No state.db persistence detected (optional)
      [PASS]  No hardcoded local paths
      ALL REQUIRED CHECKS PASSED
    
  2. 在同一文件夹中生成 HOST_UPLOAD.md,写明在 http://localhost:5000/python 中填写的确切表单值:

# Upload Guide: <strategy_name>

## On http://localhost:5000/python

### Step 1: Click "Add Strategy"

| Form field | Value |
|---|---|
| Name | <strategy_name> |
| File | <full path to strategy.py> |
| Exchange | <SYMBOL's exchange, e.g. NSE> |

### Step 2: Parameters (key=value, one per row)

| Key | Value | Purpose |
|---|---|---|
| MODE | live | live execution (sandbox/real per UI analyzer toggle) |
| SYMBOL | <SYMBOL> | trading symbol |
| INTERVAL | <INTERVAL> | bar interval |
| LOG_LEVEL | INFO | logging verbosity |

### Step 3: Schedule

| Field | Value |
|---|---|
| Start time | 09:15 IST |
| Stop time | 15:30 IST (or leave empty for indefinite) |
| Days | Mon, Tue, Wed, Thu, Fri (weekdays for NSE) |

For MCX strategies use `EXCHANGE=MCX` and start time `17:00`.
For CRYPTO use `EXCHANGE=CRYPTO` and check all 7 days.

### Step 4: Click Upload, then Start

The host launches the strategy in a subprocess. Logs go to `openalgo/logs/strategies/<id>_<timestamp>.log`.

To stop the strategy gracefully, click Stop in the UI - the host sends SIGTERM and waits up to 15s for clean shutdown.

## Notes

- Live vs sandbox is decided by OpenAlgo UI's analyzer toggle, not by this strategy
- Re-upload anytime; the host preserves STRATEGY_ID
- The exchange you pick drives the calendar gating; intersect with start-stop
  1. 如果使用 --list,列出 strategies/ 的子文件夹,逐一验证并输出汇总表。

验证失败时

打印需要修复的具体代码行:

[FAIL] HOST_SERVER priority: line 38 reads OPENALGO_HOST first.
       Change:
           API_HOST = os.getenv("OPENALGO_HOST", "http://127.0.0.1:5000")
       To:
           API_HOST = os.getenv("HOST_SERVER") or os.getenv("OPENALGO_HOST", "http://127.0.0.1:5000")

主动询问是否自动修复(使用 Edit 工具)。

重置状态

如果用户要求在重新上传前重置策略的持久化状态,建议执行:

rm strategies/<name>/state.db

或者,如果不存在 state.db,则无需操作。

避免

  • 不要通过 API 自动上传——/python 页面是 UI 表单,不是 API 端点
  • 不要修改策略逻辑,只修改主机兼容性相关代码
  • 不要使用图标或表情符号

评论

支持 Markdown