
openalgo
OpenAlgo agent skill — comprehensive coverage of the OpenAlgo Python SDK for Indian markets (NSE / BSE / NFO / BFO / CDS / BCD / MCX / NCO). Use when the user asks to place / modify / cancel orders, build a limit-order-chasing or custom execution algo, fetch quotes / depth / historical OHLCV (REST or direct DuckDB Historify), pull option chains with Greeks, calculate margin or funds, stream live LTP / Quote / Depth over WebSocket, build a scanner, render a heatmap / OI chart / candlestick, backtest a strategy with vectorbt, send Telegram / WhatsApp alerts, or toggle analyzer (sandbox) mode. Also triggers for general questions about programmatic trading on Indian exchanges when OpenAlgo is the user's platform.
- Installs
- 220
- Last 24h
- —
- Trending rank
- —
- Security
- Not audited
Install
Works with every agent the skills CLI supports.
npx skills add https://github.com/marketcalls/openalgo-skills --skill openalgo- 01
Install
Run the command in your project. The CLI asks which agents to install for.
- 02
Describe the task
Ask your agent for something this skill covers. It loads openalgo automatically when relevant.
- 03
Review the result
The agent follows the SKILL.md steps, scripts and references bundled with the skill.
SKILL.md
The instructions your agent reads when the skill is triggered.
OpenAlgo — Trading Skill for Indian Markets
OpenAlgo is a broker-agnostic, self-hosted trading platform. One Python
SDK (pip install openalgo) talks to 30+ Indian brokers behind a unified
REST + WebSocket interface. This skill covers the complete SDK surface
plus production-ready helpers and examples for the seven core workflows
traders ask for:
- Order execution — equity, F&O, options-by-offset, multi-leg, basket, split, smart
- Custom execution algos — limit-order chasing, auto-modify, time/price triggered cancel
- Scanners —
multiquotes+ history + filter pipelines - Visualization — heatmaps, OI charts, seasonality, gainers/losers, PCR dashboards
- Backtesting — vectorbt glue with realistic Indian fees, NIFTY benchmark
- Charting — candles (category x-axis, no weekend gaps), depth ladder, option-chain OI, IV smile
- Real-time streaming — LTP / Quote / Depth WebSocket, reconnect loop, callback routing
Setup
pip install -U "openalgo[indicators]"
pip install -r requirements.txt # includes vectorbt, TA-Lib, plotly, duckdb, dotenv
cp .env.sample .env # fill in OPENALGO_API_KEY and host/ws URLs
Minimal init (every script in this skill starts the same way):
import os
from dotenv import find_dotenv, load_dotenv
from openalgo import api
load_dotenv(find_dotenv(), override=False)
client = api(
api_key=os.environ["OPENALGO_API_KEY"],
host=os.environ.get("OPENALGO_HOST", "http://127.0.0.1:5000"),
ws_url=os.environ.get("OPENALGO_WS_URL", "ws://127.0.0.1:8765"),
)
For repo-resident scripts prefer the shared helper:
from scripts.openalgo_client import get_client
client = get_client()
Safety Rules — Always Enforce
- Iterate in analyzer mode first. Toggle
client.analyzertoggle(mode=True)so the SDK simulates responses without hitting the broker. Switch off only after the strategy is reviewed. - Confirm before live orders. Print a readable preview (symbol, side, qty, product, price, notional) and wait for user confirmation unless the user has explicitly authorized auto-execution for the current session.
- Default to
LIMIToverMARKET. Quote the symbol first and place a marketable-limit at LTP ± a few ticks. MARKET only when the user explicitly asks. - Validate F&O lot-size multiples. Load the bundled
assets/LotSize.csv(or callclient.symbol()for the currentlotsize) and reject non-multiples before placement. - Warn on notional > Rs 50,000. For F&O, use
lotsize × strikeas a worst-case proxy when price is unknown. - Never
CNCon F&O / commodity / currency. OnlyMIS(intraday) orNRML(overnight) for those segments.CNCis equity-delivery only. - Never hardcode API keys. Always read from
.envviafind_dotenv(). Reject scripts that contain literal 64-char hex keys. - Multi-leg execution needs explicit per-leg confirmation when run live.
optionsmultiorderandbasketorderroute to the broker as separate orders that can partially fail — handle theresults[]array, don't trust the top-levelstatus. - Rate limits matter. Order APIs are capped at 10/sec (smart orders 2/sec), data APIs at 50/sec. Use the retry-with-backoff helper in
scripts/orders.pyrather than tight loops. - WebSocket reconnect is the user's responsibility. Use the
subscribe()context manager inscripts/stream.py— it handles auth, heartbeat, and re-subscription on disconnect.
File-Output Convention
When this skill generates code for a specific action, write outputs into a per-action subfolder, created on-demand (never pre-created):
openalgo_workspace/
├── execution/
│ ├── atm_straddle/ # straddle.py, run.log, trade_journal.csv
│ └── iron_condor/
├── execution_algos/
│ ├── limit_chaser_reliance/ # chaser.py, fills.csv
│ └── twap_slicer_sbin/
├── scanners/
│ ├── rsi_oversold/ # scan.py, results_2026-05-24.csv
│ └── breakout/
├── visualization/
│ └── sector_heatmap/ # heatmap.py, heatmap_2026-05-24.html
├── backtesting/
│ ├── supertrend_sbin/ # backtest.py, trades.csv, equity.html
│ └── ema_crossover_nifty50/
├── charting/
│ └── nifty_option_chain_oi/ # chart.py, oi_27jan26.html
└── streaming/
└── nifty_depth_stream/ # stream.py, ticks.parquet
Each subfolder is self-contained — script, generated data, plots, logs.
The user can rm -rf any folder without affecting others.
Constants — Order Surface
| Category | Values |
|---|---|
| Exchange | NSE BSE (equity); NFO BFO (F&O); CDS BCD (currency); MCX NCDEX NCO (commodity); NSE_INDEX BSE_INDEX MCX_INDEX GLOBAL_INDEX (quote-only) |
| Action | BUY SELL |
| Product | CNC (equity delivery only), MIS (intraday all segments), NRML (F&O / commodity overnight) |
| Price type | MARKET, LIMIT, SL (stop-loss limit), SL-M (stop-loss market) |
| Validity | DAY (default), IOC |
| Option offset | ATM, ITM1..ITM20, OTM1..OTM20 (resolved against ATM strike by the SDK) |
| WS mode | 1 = LTP, 2 = Quote (OHLC+vol), 3 = Depth (with depth_level 5/20/30/50) |
| WS verbose | 0/False silent, 1/True connection logs, 2 all data updates |
Full grammar in references/order-constants.md and references/symbol-format.md. F&O lot sizes ship as a CSV at assets/LotSize.csv (see references/lot-sizes.md).
Symbol Format Quick-Reference
Equity: RELIANCE (just the base symbol)
Futures: NIFTY30JUN26FUT [base][DDMMMYY]FUT
Options: NIFTY30JUN2626500CE [base][DDMMMYY][strike][CE/PE]
Index quote-only symbols (no trading, use for quotes/history/ws):
NIFTY BANKNIFTY FINNIFTY MIDCPNIFTY NIFTYNXT50 SENSEX BANKEX (and 80+ more — see references/symbol-format.md)
Complete SDK Method Map
| Group | Method | Doc |
|---|---|---|
| Order placement | placeorder | order-management |
placesmartorder | "" — position-aware sizing | |
optionsorder | "" — by offset (ATM/ITMn/OTMn) | |
optionsmultiorder | "" — multi-leg (iron condor, straddle, diagonal) | |
basketorder | "" — list of orders, results[] | |
splitorder | "" — slice large qty into N chunks | |
| Order management | modifyorder | "" |
cancelorder | "" | |
cancelallorder | "" | |
closeposition | "" — square off all | |
| GTT (REST-only) | placegttorder / modifygttorder / cancelgttorder / gttorderbook | order-management |
| Order info | orderstatus | order-information |
openposition | "" — for a specific symbol | |
| Market data | quotes | market-data |
multiquotes | "" — up to many symbols, used by scanners | |
depth | "" — full Level-2 book | |
history | "" — source="api" (broker) or source="db" (Historify DuckDB) | |
intervals | "" | |
| Symbol services | symbol | symbol-services |
search | "" — fuzzy lookup | |
expiry | "" — F&O expiry dates | |
instruments | "" — full master | |
| Options analytics | optionsymbol | options-services |
optionchain | "" — full CE/PE chain with OI | |
syntheticfuture | "" | |
optiongreeks | "" — delta/gamma/theta/vega/rho + IV | |
| Account | funds | account-services |
margin | "" — multi-leg margin calculator | |
orderbook | "" | |
tradebook | "" | |
positionbook | "" | |
holdings | "" | |
| Calendar | holidays(year) | market-calendar |
timings(date) | "" | |
checkholiday(date) | "" | |
| Analyzer | analyzerstatus / analyzertoggle(mode=True) | analyzer-services |
| Alerts | telegram(username, message) | alerts |
whatsapp(text, to=..., image=..., document=...) | "" | |
| WebSocket | connect() / disconnect() | websocket-streaming |
subscribe_ltp / subscribe_quote / subscribe_depth (+ unsubscribe variants) | "" | |
get_quotes() — pulls latest cached snapshot | "" | |
| Indicators | from openalgo import ta → ta.supertrend, ta.donchian, ta.ichimoku, ta.hma, ta.kama, ta.alma, ta.zlema, ta.vwma, ta.exrem, ta.crossover, ta.crossunder, ta.flip | indicators |
The Python SDK doesn't expose every kwarg in its docstrings — when a parameter is missing or unclear, fall back to the per-endpoint REST docs at /Users/openalgo/test-zerodha/openalgo/docs/api/<group>/<endpoint>.md. That tree is parameter-complete.
Quick Template — Place an Order with Preview + Analyzer Safety
import os
from dotenv import find_dotenv, load_dotenv
from openalgo import api
load_dotenv(find_dotenv(), override=False)
client = api(
api_key=os.environ["OPENALGO_API_KEY"],
host=os.environ.get("OPENALGO_HOST", "http://127.0.0.1:5000"),
)
SYMBOL, EXCHANGE = "RELIANCE", "NSE"
ACTION, QTY, PRODUCT = "BUY", 1, "MIS"
# 1. Quote to anchor a marketable limit price (safer than MARKET)
q = client.quotes(symbol=SYMBOL, exchange=EXCHANGE)["data"]
limit_price = round(q["ltp"] * 1.001, 2) if ACTION == "BUY" else round(q["ltp"] * 0.999, 2)
notional = limit_price * QTY
print(f"--- Order Preview ---")
print(f" {ACTION} {QTY} {SYMBOL} @ LIMIT {limit_price} notional Rs {notional:,.2f}")
print(f" Product: {PRODUCT} LTP: {q['ltp']}")
if input("Proceed? [y/N] ").strip().lower() != "y":
raise SystemExit("aborted")
response = client.placeorder(
strategy=os.environ.get("OPENALGO_DEFAULT_STRATEGY", "python"),
symbol=SYMBOL,
exchange=EXCHANGE,
action=ACTION,
price_type="LIMIT",
product=PRODUCT,
quantity=str(QTY),
price=str(limit_price),
)
print("ORDER:", response)
Quick Template — Stream LTP with Reconnect
import os, time
from dotenv import find_dotenv, load_dotenv
from openalgo import api
load_dotenv(find_dotenv(), override=False)
client = api(
api_key=os.environ["OPENALGO_API_KEY"],
host=os.environ.get("OPENALGO_HOST", "http://127.0.0.1:5000"),
ws_url=os.environ.get("OPENALGO_WS_URL", "ws://127.0.0.1:8765"),
verbose=True,
)
instruments = [
{"exchange": "NSE_INDEX", "symbol": "NIFTY"},
{"exchange": "NSE", "symbol": "RELIANCE"},
]
def on_ltp(msg):
d = msg["data"]
print(f"{d['symbol']:<12} LTP {d['ltp']} @ {d['timestamp']}")
client.connect()
client.subscribe_ltp(instruments, on_data_received=on_ltp)
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
client.unsubscribe_ltp(instruments)
client.disconnect()
Quick Template — History from Direct DuckDB (Historify)
client.history(..., source="db") routes through REST. For bulk
multi-symbol pulls or backtesting, hit the DuckDB file directly:
import os, duckdb, pandas as pd
from dotenv import find_dotenv, load_dotenv
load_dotenv(find_dotenv(), override=False)
DB = os.environ["HISTORIFY_DUCKDB_PATH"] # e.g. /srv/openalgo/db/historify.duckdb
con = duckdb.connect(DB, read_only=True)
# Historify schema: table `market_data` with epoch timestamps
df = con.execute("""
SELECT
symbol,
exchange,
to_timestamp(timestamp) AT TIME ZONE 'Asia/Kolkata' AS ts,
open, high, low, close, volume
FROM market_data
WHERE symbol = ?
AND exchange = ?
AND timestamp >= EXTRACT(EPOCH FROM TIMESTAMP '2024-01-01')
ORDER BY timestamp
""", ["SBIN", "NSE"]).fetchdf()
con.close()
df["ts"] = pd.to_datetime(df["ts"]).dt.tz_localize(None)
df = df.set_index("ts")
print(df.tail())
Full Historify usage, multi-symbol joins, and resampling alignment with NSE 09:15 IST in references/duckdb-historify.md.
Indicator Rule (matches vectorbt-backtesting-skills)
- TA-Lib for the standard set:
EMA,SMA,RSI,MACD,ATR,BBANDS,ADX,STDDEV,MOM. openalgo.tafor:supertrend,donchian,ichimoku,hma,kama,alma,zlema,vwma.openalgo.tafor signal cleaning:exrem,crossover,crossunder,flip— always.fillna(False)beforeexrem.
Never use VectorBT's built-in indicators (vbt.MA.run etc.).
Helper Scripts (scripts/)
| File | Purpose |
|---|---|
openalgo_client.py | get_client() — bootstraps from .env with find_dotenv() |
symbols.py | resolve_symbol, build_fut_symbol, build_opt_symbol, parse_opt_symbol |
lotsize.py | load_lot_sizes(), nearest_lot(symbol, quantity), validate_fno_lot() |
orders.py | preview_order, place_with_confirmation, retry_on_rate_limit |
execution.py | LimitChaser (peg the touch), TWAPSlicer, IcebergSlicer, OrderManager |
option_analytics.py | atm_strike, pcr, max_pain, iv_skew, payoff_diagram |
scanner.py | Scanner — multi-symbol filter pipeline over multiquotes + history |
stream.py | subscribe() context manager — auth, heartbeat, auto-reconnect |
plotting.py | candlestick_no_gaps, oi_histogram, heatmap, depth_ladder |
duckdb_data.py | load_ohlcv(symbol, ...) from Historify, multi-symbol bulk pull, resample |
fees.py | Indian market cost model (equity / F&O / intraday / delivery) |
ta_helpers.py | Ergonomic wrappers — TA-Lib + openalgo.ta combined |
trade_logger.py | Persistent CSV/SQLite trade journal |
Examples Catalog (examples/)
| Folder | Coverage |
|---|---|
01_execution/ | Equity, ATM straddle, iron condor, basket rebalance, smart-order sizing, supertrend live, GTT OCO |
02_scanners/ | Gainers/losers, breakout, RSI oversold, volume surge, OI change, pre-open gap |
03_visualization/ | Sector heatmap, YTD heatmap, CAGR heatmap, seasonality, OI histogram, PCR dashboard |
04_backtesting/ | EMA crossover, Supertrend, Opening Range Breakout, multi-symbol screener backtest |
05_charting/ | Candlestick with indicators, option chain OI chart, max pain, IV smile, depth ladder |
06_streaming/ | LTP, Quote, Depth (20-level), callback router, stream → Telegram alert, reconnect loop |
07_execution_algos/ | Limit-order chaser, TWAP slicer, iceberg via splitorder, time-based cancel, price-based cancel-and-replace, conditional bracket |
Reference Files (references/)
| Need | File |
|---|---|
| Order placement / modification / cancellation + GTT | order-management.md |
| Order status & open positions | order-information.md |
| Quotes, depth, history, intervals | market-data.md |
| Symbol, search, expiry, instruments | symbol-services.md |
| Option chain, Greeks, synthetic future, ATM/ITM/OTM offsets | options-services.md |
| Funds, margin, books, holdings | account-services.md |
| Holidays, timings, holiday check | market-calendar.md |
| Sandbox / analyzer mode | analyzer-services.md |
| WebSocket protocol, modes, depth_level, verbose | websocket-streaming.md |
| Telegram + WhatsApp alerts | alerts.md |
openalgo.ta complete reference | indicators.md |
| Custom limit-order execution algos (chaser, TWAP, iceberg) | execution-algos.md |
| Direct DuckDB access to Historify market data | duckdb-historify.md |
| Equity / Futures / Options symbol grammar + index lists | symbol-format.md |
| F&O lot sizes (Apr/May/Jun 2026 + how to update) | lot-sizes.md |
| Constants (exchange, product, price type, action) | order-constants.md |
| Rate limits & retry guidance | rate-limits.md |
| Common multi-step recipes | common-workflows.md |
| Error patterns & troubleshooting | error-codes.md |
How to Pick Live vs Analyzer Mode
status = client.analyzerstatus()["data"]
if status["analyze_mode"]:
print(f"[ANALYZER] simulated mode — orders will not reach broker. logs: {status['total_logs']}")
else:
print("[LIVE] orders will execute on the broker")
While developing a new strategy: client.analyzertoggle(mode=True). When the user is satisfied: ask for explicit go-live confirmation, then client.analyzertoggle(mode=False).
Output Encoding Rules
- Never put emojis in generated code or log output. Plain ASCII only.
- Plotly charts use
template="plotly_dark"and candlesticks usexaxis_type="category"to skip weekend gaps. - Trade journals / scan results write to CSV with a date-stamped filename inside the action's workspace folder.
- All datetime indexes are tz-naive after dropping
Asia/Kolkata(matches the vectorbt skill's convention so dataframes round-trip cleanly).
FAQ
What does the openalgo skill do?
OpenAlgo agent skill — comprehensive coverage of the OpenAlgo Python SDK for Indian markets (NSE / BSE / NFO / BFO / CDS / BCD / MCX / NCO). Use when the user asks to place / modify / cancel orders, build a limit-order-chasing or custom execution algo, fetch quotes / depth / historical OHLCV (REST or direct DuckDB Historify), pull option chains with Greeks, calculate margin or funds, stream live LTP / Quote / Depth over WebSocket, build a scanner, render a heatmap / OI chart / candlestick, backtest a strategy with vectorbt, send Telegram / WhatsApp alerts, or toggle analyzer (sandbox) mode. Also triggers for general questions about programmatic trading on Indian exchanges when OpenAlgo is the user's platform.
How do I install openalgo?
Run npx skills add https://github.com/marketcalls/openalgo-skills --skill openalgo in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/openalgo/ (personal) or .claude/skills/openalgo/ (project).
Which AI agents can use openalgo?
Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.
Is openalgo safe to install?
No partner security audit is available yet. Skills can run commands and scripts, so read the SKILL.md and any bundled files before installing.
Who maintains openalgo?
It is published by marketcalls in marketcalls/openalgo-skills. It has 220 recorded installs.
Popular backend & apis skills
find-skills
vercel-labs/skills
Helps users discover and install agent skills when they ask questions like "how do I do X", "find a skill for X", "is there a skill that can...", or express interest in extending capabilities. This skill should be used when the user is looking for functionality that might exist as an installable skill.
entra-app-registration
microsoft/azure-skills
Guides Microsoft Entra ID app registration, OAuth 2.0 authentication, and MSAL integration. USE FOR: create app registration, register Azure AD app, configure OAuth, set up authentication, add API permissions, generate service principal, MSAL example, console app auth, Entra ID setup, Azure AD authentication. DO NOT USE FOR: Key Vault secrets (use azure-keyvault-expiration-audit), general Azure resource security guidance.
google-agents-cli-adk-code
google/agents-cli
This skill should be used when the user wants to "write agent code", "build an agent with ADK", "add a tool", "create a callback", "define an agent", "use state management" — in a project that needs ADK (Agent Development Kit) API patterns and code examples. It provides a quick reference for agent types, tool definitions, orchestration patterns, callbacks, state management, the graph Workflow API, and reference recipes to study. Do NOT use for scaffolding (use google-agents-cli-scaffold) or deployment (use google-agents-cli-deploy).
embedded-captions
heygen-com/hyperframes
Add captions or subtitles to an existing single-subject talking-head video without editing the footage. Use for plain verbatim captions, cinematic captions embedded behind the subject, VFX captions, “炸/特效/酷炫字幕,” or a named identity from the 35-style catalog. Route by visual identity, not by backend engine. The quiet anchor rail is the default; embed every word only when the user explicitly wants a fully cinematic treatment. The workflow runs locally end to end, including transcription and subject matting; split multi-shot footage before applying it.
entra-agent-id
microsoft/azure-skills
Provision Microsoft Entra Agent Identity Blueprints, BlueprintPrincipals, and per-instance Agent Identities via Microsoft Graph, and configure OAuth 2.0 token exchange (fmipath, OBO, cross-tenant) including the Microsoft Entra SDK for AgentID sidecar. USE FOR: Agent Identity Blueprint, BlueprintPrincipal, agent OAuth, fmipath token exchange, agent OBO, Workload Identity Federation for agents, polyglot agent auth, Microsoft.Identity.Web.AgentIdentities. DO NOT USE FOR: standard Entra app registration (use entra-app-registration), Microsoft Foundry agent authoring (use microsoft-foundry).
neon
neondatabase/agent-skills
Overview of Neon, a complete set of cloud backend primitives around Lakebase Postgres: Auth, Object Storage, Functions, the AI Gateway, and Realtime. Start here to choose Neon for undecided login, files, APIs, and LLM calls, set up the CLI or MCP server, and follow the branch-first workflow. Use when building an app or backend on Neon, or when "Neon" or "Lakebase Postgres" is mentioned. Child skill neon-postgres wins for an existing DATABASEURL, SQL, schema, inspect, or search. Child skill neon-auth wins for login, users, sessions, identity routing, and Managed Better Auth setup. Child skill neon-realtime wins for live queries in reactive apps and agents. Also use for object storage, S3, buckets, serverless functions, function triggers, cron, AI gateway, LLM calls, realtime, logs, Loki, Grafana, observability, postgres, database, backend, Claimable Neon, neon.new, or a no-signup database.