Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
marketcalls avatar

Indicator Expert

  • 482 installs
  • 13 repo stars
  • Updated June 12, 2026
  • marketcalls/openalgo-indicator-skills

indicator-expert is an OpenAlgo agent skill that authors, debugs, and optimizes indicator logic with parameters, conditions, backtests, and signal rules for developers building equities, futures, and crypto strategies.

About

indicator-expert is a marketcalls/openalgo-indicator-skills workflow for OpenAlgo trading indicator development. The skill helps developers write indicator logic, tune parameters, define entry and exit conditions, run backtests, and refine signal rules across equities, futures, and crypto markets. Developers reach for indicator-expert when OpenAlgo strategy code misbehaves, needs performance optimization, or must be extended with new parameterized conditions before live deployment. It focuses on indicator authoring and validation inside the OpenAlgo ecosystem rather than generic Python quant libraries or portfolio accounting.

  • Indicator formula authoring
  • Parameter tuning and validation
  • Signal condition composition
  • Backtest-friendly outputs
  • Debugging false signal patterns

Indicator Expert by the numbers

  • 482 all-time installs (skills.sh)
  • +21 installs in the week ending Aug 2, 2026 (Skillselion tracking)
  • Ranked #214 of 1,106 Finance & Trading skills by installs in the Skillselion catalog
  • Data as of Aug 2, 2026 (Skillselion catalog sync)
npx skills add https://github.com/marketcalls/openalgo-indicator-skills --skill indicator-expert

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs482
repo stars13
Last updatedJune 12, 2026
Repositorymarketcalls/openalgo-indicator-skills

How do you debug and optimize OpenAlgo indicator strategies?

Author, debug, and optimize OpenAlgo indicator logic including parameters, conditions, backtests, and signal rules for equities, futures, and crypto strategies.

Who is it for?

Quant developers working in OpenAlgo who need indicator authoring, debugging, backtesting, and signal-rule optimization across asset classes.

Skip if: Developers not using OpenAlgo or needing portfolio accounting outside indicator logic should skip indicator-expert.

When should I use this skill?

OpenAlgo indicator code needs authoring, parameter tuning, backtesting, or signal-rule debugging for equities, futures, or crypto.

What you get

Tuned indicator logic, parameterized conditions, backtest results, and validated signal rules for OpenAlgo deployment.

  • Indicator logic with parameters and conditions
  • Backtest result summaries
  • Optimized signal rules

Files

SKILL.mdMarkdownGitHub ↗

OpenAlgo Indicator Expert Skill

Environment

  • Python 3.12+ (required by openalgo 2.x) with openalgo, pandas, numpy, plotly, dash, streamlit
  • Data sources: OpenAlgo (Indian markets via client.history(), client.quotes(), client.depth()), yfinance (US/Global)
  • Real-time: OpenAlgo WebSocket (client.connect(), subscribe_ltp, subscribe_quote, subscribe_depth)
  • Indicators: openalgo.ta (ALWAYS — 100+ indicators computed by a compiled Rust core, full speed from the first call)
  • Charts: Plotly with template="plotly_dark"
  • Dashboards: Plotly Dash with dash-bootstrap-components (default) OR Streamlit with st.plotly_chart() — use Streamlit only when the user explicitly asks for it
  • Custom indicators: vectorized NumPy composed from openalgo.ta primitives (Rust core — no JIT, no warmup)
  • API keys loaded from single root .env via python-dotenv + find_dotenv() — never hardcode keys
  • Scripts go in appropriate directories (charts/, dashboards/, custom_indicators/, scanners/) created on-demand
  • Never use icons/emojis in code or logger output

Critical Rules

1. ALWAYS use openalgo.ta for ALL technical indicators. Never reimplement what already exists in the library. 2. Data normalization: Always convert DataFrame index to datetime, sort, and strip timezone after fetching. 3. Signal cleaning: Always use ta.exrem() after generating raw buy/sell signals. Always .fillna(False) before exrem. 4. Plotly dark theme: All charts use template="plotly_dark" with xaxis type="category" for candlesticks. 5. Custom indicators: Compose from openalgo.ta primitives (ta.sma, ta.stdev, ta.bbands, ...) plus vectorized NumPy. Never reimplement built-ins; no JIT or warmup is needed. 6. Input flexibility: openalgo.ta accepts numpy arrays, pandas Series, or lists. Output matches input type. 7. WebSocket feeds: Use client.connect(), client.subscribe_ltp() / subscribe_quote() / subscribe_depth() for real-time data. 8. Environment: Load .env from project root via find_dotenv() — never hardcode API keys. 9. Market detection: If symbol looks Indian (SBIN, RELIANCE, NIFTY), use OpenAlgo. If US (AAPL, MSFT), use yfinance. 10. Always explain chart outputs in plain language so traders understand what the indicator shows.

Data Source Priority

MarketData SourceMethodExample Symbols
India (equity)OpenAlgoclient.history()SBIN, RELIANCE, INFY
India (index)OpenAlgoclient.history(exchange="NSE_INDEX")NIFTY, BANKNIFTY
India (F&O)OpenAlgoclient.history(exchange="NFO")NIFTY30DEC25FUT
US/Globalyfinanceyf.download()AAPL, MSFT, SPY

OpenAlgo API Methods for Data

MethodPurposeReturns
client.history(symbol, exchange, interval, start_date, end_date)OHLCV candlesDataFrame (timestamp, open, high, low, close, volume)
client.quotes(symbol, exchange)Real-time snapshotDict (open, high, low, ltp, bid, ask, prev_close, volume)
client.multiquotes(symbols=[...])Multi-symbol quotesList of quote dicts
client.depth(symbol, exchange)Market depth (L5)Dict (bids, asks, ohlc, volume, oi)
client.intervals()Available intervalsDict (minutes, hours, days, weeks, months)
client.optionchain(underlying, exchange, expiry_date, strike_count)Option chain around ATMDict (underlying_ltp, atm_strike, chain with ce/pe per strike)
client.optiongreeks(symbol, exchange, interest_rate, ...)Option greeks + IVDict (greeks: delta/gamma/theta/vega/rho, implied_volatility, days_to_expiry)
client.expiry(symbol, exchange, instrumenttype)Expiry dates listDict (data: list of expiry dates)
client.connect()WebSocket connectNone (sets up WS connection)
client.subscribe_ltp(instruments, callback)Live LTP streamCallback with {symbol, exchange, ltp}
client.subscribe_quote(instruments, callback)Live quote streamCallback with {symbol, exchange, ohlc, ltp, volume}
client.subscribe_depth(instruments, callback)Live depth streamCallback with {symbol, exchange, bids, asks}

Indicator Library Reference

All indicators accessed via from openalgo import ta:

Trend (20)

ta.sma, ta.ema, ta.wma, ta.dema, ta.tema, ta.hma, ta.vwma, ta.alma, ta.kama, ta.zlema, ta.t3, ta.frama, ta.supertrend, ta.ichimoku, ta.chande_kroll_stop, ta.trima, ta.mcginley, ta.vidya, ta.alligator, ta.ma_envelopes

Momentum (9)

ta.rsi, ta.macd, ta.stochastic, ta.cci, ta.williams_r, ta.bop, ta.elder_ray, ta.fisher, ta.crsi

Volatility (16)

ta.atr, ta.bbands, ta.keltner, ta.donchian, ta.chaikin_volatility, ta.natr, ta.rvi, ta.ultimate_oscillator, ta.true_range, ta.massindex, ta.bb_percent, ta.bb_width, ta.chandelier_exit, ta.historical_volatility, ta.ulcer_index, ta.starc

Volume (15)

ta.obv, ta.obv_smoothed, ta.vwap, ta.mfi, ta.adl, ta.cmf, ta.emv, ta.force_index, ta.nvi, ta.pvi, ta.volosc, ta.vroc, ta.kvo, ta.pvt, ta.rvol

Oscillators (20+)

ta.cmo, ta.trix, ta.uo_oscillator, ta.awesome_oscillator, ta.accelerator_oscillator, ta.ppo, ta.po, ta.dpo, ta.aroon_oscillator, ta.stoch_rsi, ta.rvi_oscillator, ta.cho, ta.chop, ta.kst, ta.tsi, ta.vortex, ta.gator_oscillator, ta.stc, ta.coppock, ta.roc

Statistical (9)

ta.linreg, ta.lrslope, ta.correlation, ta.beta, ta.variance, ta.tsf, ta.median, ta.mode, ta.median_bands

Hybrid (6+)

ta.adx, ta.dmi, ta.aroon, ta.pivot_points, ta.sar, ta.williams_fractals, ta.rwi

TA-Lib Compatible (18, new in openalgo 2.0)

ta.mom, ta.rocp, ta.rocr, ta.rocr100, ta.apo, ta.midpoint, ta.midprice, ta.avgprice, ta.medprice, ta.typprice, ta.wclprice, ta.plus_dm, ta.minus_dm, ta.dx, ta.adxr, ta.stochf, ta.linregangle, ta.linregintercept

Utilities

ta.crossover, ta.crossunder, ta.cross, ta.highest, ta.lowest, ta.change, ta.roc, ta.stdev, ta.exrem, ta.flip, ta.valuewhen, ta.rising, ta.falling

Modular Rule Files

Detailed reference for each topic is in rules/:

Rule FileTopic
indicator-catalogComplete 100+ indicator reference with signatures and parameters
data-fetchingOpenAlgo history/quotes/depth, yfinance, data normalization
plottingPlotly candlestick, overlay, subplot, multi-panel charts
custom-indicatorsBuilding custom indicators with vectorized NumPy + ta primitives
websocket-feedsReal-time LTP/Quote/Depth streaming via WebSocket
performanceRust core performance, O(n) guarantees, benchmarking
dashboard-patternsPlotly Dash web applications with callbacks
streamlit-patternsStreamlit web applications with sidebar, metrics, plotly charts
multi-timeframeMulti-timeframe indicator analysis
signal-generationSignal generation, cleaning, crossover/crossunder
indicator-combinationsCombining indicators for confluence analysis
symbol-formatOpenAlgo symbol format, exchange codes, index symbols

Chart Templates (in rules/assets/)

TemplatePathDescription
EMA Chartassets/ema_chart/chart.pyEMA overlay on candlestick
RSI Chartassets/rsi_chart/chart.pyRSI with overbought/oversold zones
MACD Chartassets/macd_chart/chart.pyMACD line, signal, histogram
Supertrendassets/supertrend_chart/chart.pySupertrend overlay with direction coloring
Bollingerassets/bollinger_chart/chart.pyBollinger Bands with squeeze detection
Multi-Indicatorassets/multi_indicator/chart.pyCandlestick + EMA + RSI + MACD + Volume
Basic Dashboardassets/dashboard_basic/app.pySingle-symbol Plotly Dash app
Multi Dashboardassets/dashboard_multi/app.pyMulti-symbol multi-timeframe dashboard
Streamlit Basicassets/streamlit_basic/app.pySingle-symbol Streamlit app
Streamlit Multiassets/streamlit_multi/app.pyMulti-timeframe Streamlit app
Custom Indicatorassets/custom_indicator/template.pyNumPy custom indicator template (composes ta primitives)
Live Feedassets/live_feed/template.pyWebSocket real-time indicator
Scannerassets/scanner/template.pyMulti-symbol indicator scanner

Quick Template: Standard Indicator Chart Script

import os
from datetime import datetime, timedelta
from pathlib import Path

import numpy as np
import pandas as pd
import plotly.graph_objects as go
from plotly.subplots import make_subplots
from dotenv import find_dotenv, load_dotenv
from openalgo import api, ta

# --- Config ---
script_dir = Path(__file__).resolve().parent
load_dotenv(find_dotenv(), override=False)

SYMBOL = "SBIN"
EXCHANGE = "NSE"
INTERVAL = "D"

# --- Fetch Data ---
client = api(
    api_key=os.getenv("OPENALGO_API_KEY"),
    host=os.getenv("OPENALGO_HOST", "http://127.0.0.1:5000"),
)

end_date = datetime.now().date()
start_date = end_date - timedelta(days=365)

df = client.history(
    symbol=SYMBOL, exchange=EXCHANGE, interval=INTERVAL,
    start_date=start_date.strftime("%Y-%m-%d"),
    end_date=end_date.strftime("%Y-%m-%d"),
)
if "timestamp" in df.columns:
    df["timestamp"] = pd.to_datetime(df["timestamp"])
    df = df.set_index("timestamp")
else:
    df.index = pd.to_datetime(df.index)
df = df.sort_index()
if df.index.tz is not None:
    df.index = df.index.tz_convert(None)

close = df["close"]
high = df["high"]
low = df["low"]
volume = df["volume"]

# --- Compute Indicators ---
ema_20 = ta.ema(close, 20)
rsi_14 = ta.rsi(close, 14)

# --- Chart ---
fig = make_subplots(
    rows=2, cols=1, shared_xaxes=True,
    row_heights=[0.7, 0.3], vertical_spacing=0.03,
    subplot_titles=[f"{SYMBOL} Price + EMA(20)", "RSI(14)"],
)

# Candlestick
x_labels = df.index.strftime("%Y-%m-%d")
fig.add_trace(go.Candlestick(
    x=x_labels, open=df["open"], high=high, low=low, close=close,
    name="Price",
), row=1, col=1)

# EMA overlay
fig.add_trace(go.Scatter(
    x=x_labels, y=ema_20, mode="lines",
    name="EMA(20)", line=dict(color="cyan", width=1.5),
), row=1, col=1)

# RSI subplot
fig.add_trace(go.Scatter(
    x=x_labels, y=rsi_14, mode="lines",
    name="RSI(14)", line=dict(color="yellow", width=1.5),
), row=2, col=1)
fig.add_hline(y=70, line_dash="dash", line_color="red", row=2, col=1)
fig.add_hline(y=30, line_dash="dash", line_color="green", row=2, col=1)

fig.update_layout(
    template="plotly_dark", title=f"{SYMBOL} Technical Analysis",
    xaxis_rangeslider_visible=False, xaxis_type="category",
    xaxis2_type="category", height=700,
)
fig.show()

Related skills

How it compares

Use indicator-expert for OpenAlgo-native indicator authoring and backtests; general quant skills apply when not targeting the OpenAlgo execution platform.

FAQ

Which markets does indicator-expert support?

indicator-expert supports OpenAlgo indicator development for equities, futures, and crypto strategies. The skill covers parameter tuning, conditional logic, backtests, and signal rules within the marketcalls openalgo-indicator-skills workflow.

What problems does indicator-expert solve in OpenAlgo?

indicator-expert helps developers author new indicator logic, debug failing conditions, optimize parameters, and validate signal rules through backtests. The skill targets OpenAlgo-specific indicator code rather than generic charting library tutorials.

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.