mcpField
A
algo-host

algo-host

github.com/marketcallsクラウド・DevOps941 回インストール26 週間前に更新
リポジトリ

algo-host について

OpenAlgo の `/python` ホストページへのアップロードに向けて、ストラテジーを検証するスキルです。ホスト互換性の要件を確認し、結果を報告して HOST_UPLOAD.md を作成します。

主な機能

  1. 01ホスト互換性の検証
  2. 02ストラテジーフォルダーの一覧と検証
  3. 03HOST_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_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", パターン
  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. 同じフォルダーに、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
  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 エンドポイントではありません。
  • ストラテジーのロジックは変更せず、ホストとの互換性に関わる部分のみ変更してください。
  • アイコンや絵文字は使用しないでください。

コメント