| name | technical-analysis |
| description | Compute technical indicators like RSI, MACD, Bollinger Bands, SMA, EMA for a stock. Use when user asks about technical analysis, indicators, RSI, MACD, moving averages, overbought/oversold, or chart analysis. |
| dependencies | ["trading-skills"] |
Technical Analysis
Compute technical indicators using pandas-ta. Supports multi-symbol analysis and earnings data.
Instructions
Note: If uv is not installed or pyproject.toml is not found, replace uv run python with python in all commands below.
uv run python scripts/technicals.py SYMBOL [--period PERIOD] [--indicators INDICATORS] [--earnings]
Arguments
SYMBOL - Ticker symbol or comma-separated list (e.g., AAPL or AAPL,MSFT,GOOGL)
--period - Historical period: 1mo, 3mo, 6mo, 1y (default: 3mo)
--indicators - Comma-separated list: rsi,macd,bb,sma,ema,atr,adx (default: all)
--earnings - Include earnings data (upcoming date + history)
Output
Single symbol returns:
price - Current price and recent change
indicators - Computed values for each indicator
risk_metrics - Volatility (annualized %) and Sharpe ratio
signals - Buy/sell signals based on indicator levels
earnings - Upcoming date and EPS history (if --earnings)
Multiple symbols returns:
results - Array of individual symbol results
Crossovers
indicators.macd.crossover - Most recent MACD line/signal crossover, or null:
direction - "up" (MACD crossed above signal = bullish) or "down" (crossed below = bearish)
days_ago - Trading bars since the crossover (0 = happened on the most recent bar)
indicators.ema.crossover - Most recent EMA9/EMA21 crossover (same shape; null if none).
indicators.ema also reports ema9 and ema21 alongside ema12/ema26.
Interpretation
- RSI > 70 = overbought, RSI < 30 = oversold
- MACD crossover = momentum shift;
crossover.days_ago of 0-5 = fresh signal
- EMA9/21 crossover confirms short-term momentum; MACD typically leads, EMA confirms
- Price near Bollinger Band = potential reversal
- Golden cross (SMA20 > SMA50) = bullish
- ADX > 25 = strong trend
- Sharpe ratio > 1 = good risk-adjusted returns, > 2 = excellent
- Volatility (annualized) = standard deviation of returns scaled to annual basis
Examples
uv run python scripts/technicals.py AAPL
uv run python scripts/technicals.py AAPL,MSFT,GOOGL
uv run python scripts/technicals.py NVDA --earnings
uv run python scripts/technicals.py TSLA --indicators rsi,macd
Correlation Analysis
Compute price correlation matrix between multiple symbols for diversification analysis.
Instructions
uv run python scripts/correlation.py SYMBOLS [--period PERIOD]
Arguments
SYMBOLS - Comma-separated ticker symbols (minimum 2)
--period - Historical period: 1mo, 3mo, 6mo, 1y (default: 3mo)
Output
symbols - List of symbols analyzed
period - Time period used
correlation_matrix - Nested dict with correlation values between all pairs
Interpretation
- Correlation near 1.0 = highly correlated (move together)
- Correlation near -1.0 = negatively correlated (move opposite)
- Correlation near 0 = uncorrelated (independent movement)
- For diversification, prefer low/negative correlations
Examples
uv run python scripts/correlation.py AAPL,MSFT,GOOGL,AMZN
uv run python scripts/correlation.py XLF,XLK,XLE,XLV --period 6mo
uv run python scripts/correlation.py SPY,GLD,TLT
Dependencies
numpy
pandas
pandas-ta
yfinance
Timezone
All timestamps and time-based calculations must use the America/New_York timezone. All JSON output must include generated_at (NY time string) and data_delay fields.