algo-host について
OpenAlgo の `/python` ホストページへのアップロードに向けて、ストラテジーを検証するスキルです。ホスト互換性の要件を確認し、結果を報告して HOST_UPLOAD.md を作成します。
主な機能
- 01ホスト互換性の検証
- 02ストラテジーフォルダーの一覧と検証
- 03HOST_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__": |
| モードディスパッチャー | default=os.getenv("MODE", "live") を指定した --mode の argparse |
| ハードコードされたローカルパスがない | /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 -
同じフォルダーに、
http://localhost:5000/pythonで入力する正確なフォーム値を記載したHOST_UPLOAD.mdを生成します。
# 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 対応