关于 algo-host
为 OpenAlgo 策略准备上传到 `/python` 托管页面的验证与上传指南,供策略开发者检查主机兼容性。它会检查信号处理、环境变量、日志和启动模式,并生成 HOST_UPLOAD.md。
主要功能
- 01检查策略主机兼容性
- 02列出并验证策略目录
- 03生成 HOST_UPLOAD.md 上传指南
- 04指出验证失败项及修复方式
适用场景
- 01上传策略前检查托管要求
- 02批量查看可部署策略状态
- 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。如果它已经是路径,则按原样使用。
说明
- 阅读
algo-expert/rules/self-hosted-strategies.md。 - 阅读策略文件。
- 验证以下标准(每项均可通过 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_EXCHANGE | os.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", 模式 |
-
输出验证报告:
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 -
在同一文件夹中生成
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
- 如果使用
--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