marketcalls/openalgo-execution-skills · Archived

algo-host

Validate a generated strategy and produce an upload guide for OpenAlgo's /python self-hosted strategy page. Confirms env-var reads, SIGTERM, stdout-only logging.

First seen Apr 26, 2026

Installation

$ npx skills add marketcalls/openalgo-execution-skills --skill algo-host

Stronger alternatives

This repository is archived — consider an actively maintained alternative.

Similar popular skills

Related neighbors and high-traction skills in the same topics — useful to compare before installing.

Also in this package

Other skills from marketcalls/openalgo-execution-skills.

npx skills add marketcalls/openalgo-execution-skills

Browse all from marketcalls/openalgo-execution-skills

More details

Agent compatibility

Declared targets from SKILL.md / docs. Unmarked agents are not listed — the skill may still install via the CLI.

Claude Code Not declared
Cursor Not declared
Codex Not declared
GitHub Copilot Not declared
Windsurf Not declared
Gemini CLI Not declared
Cline Not declared
OpenCode Not declared

Repository health

Stars 8
License LICENSE
Default branch main
Open issues 0
Status Archived

Skill metadata

Parsed from SKILL.md frontmatter.

Allowed toolsRead, Write, Edit, Bash, Glob, Grep

Package contents

Files included with this skill beyond the listing page.

  • skill md SKILL.md 4,382 B
  • docs SUMMARY.md 178 B

History

  1. First seen on skills.sh
  2. First recorded snapshot · 30 installs

SKILL.md

Prepare a strategy for upload to OpenAlgo's /python strategy host.

Arguments

  • $0 = strategy name (e.g. emacrossoverSBIN) OR full path to a .py file
  • Special: --list lists deployable strategies in strategies/ and their validation status

If $0 is a folder name, the file is strategies/<name>/strategy.py. If it's already a path, use as-is.

Instructions

  1. Read algo-expert/rules/self-hosted-strategies.md.
  2. Read the strategy file.
  3. Validate these criteria (each can be inferred via grep):
Check What to look for
SIGTERM handler signal.signal(signal.SIGTERM, ...) present
SIGINT handler signal.signal(signal.SIGINT, ...) present
stop_event used threading.Event() and stop_event.set()
HOST_SERVER priority os.getenv("HOSTSERVER") or os.getenv("OPENALGOHOST", pattern
Reads STRATEGY_EXCHANGE os.getenv("OPENALGOSTRATEGYEXCHANGE", pattern
stdout logging stream=sys.stdout in basicConfig; no FileHandler calls
Strategy entry guard if name == "main":
Mode dispatcher --mode argparse with default=os.getenv("MODE", "live")
No hardcoded local paths /home/, C:\\Users, /Users/ not present
Env tag for STRATEGY_NAME os.getenv("STRATEGY_NAME", pattern
  1. Print a validation report:

`` Validation: strategies/emacrossoverSBIN/strategy.py [PASS] SIGTERM handler installed (line 327) [PASS] HOSTSERVER priority correct [PASS] Reads OPENALGOSTRATEGY_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 ``

  1. Generate HOST_UPLOAD.md in the same folder with the exact form values to enter at 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. If --list, list strategies/ subfolders, validate each, print a summary table.

When validation FAILs

Print the specific lines that need fixing:

[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")

Offer to make the fix automatically (use Edit tool).

Reset state

If the user asks to reset a strategy's persistent state before re-upload, suggest:

rm strategies/<name>/state.db

Or, if no state.db exists, no action needed.

Avoid

  • Do not auto-upload via API - the /python page is a UI form, not an API endpoint
  • Do not modify the strategy's logic, only the host-compatibility plumbing
  • Do not use icons/emojis