Install
openclaw skills install @finskills/finskills-technical-analystPerform comprehensive technical analysis using 12+ indicators including RSI, MACD, Bollinger Bands, support/resistance, and chart patterns via the Finskills API.
openclaw skills install @finskills/finskills-technical-analystPerform comprehensive technical analysis on any US-listed stock using historical OHLCV data from the Finskills API. Computes trend indicators (SMA/EMA, MACD), momentum oscillators (RSI, Stochastic), volatility bands (Bollinger Bands, ATR), volume analysis, and pattern recognition — then synthesizes a structured trading bias with support/resistance levels.
API Key required — Register at https://finskills.net to get your free key.
Header: X-API-Key: <your_api_key>
Get your API key: Register at https://finskills.net — free tier available, Pro plan unlocks real-time quotes, history, and financials.
Activate when the user:
GET https://finskills.net/v1/stocks/history/{SYMBOL}?period=1y&interval=1d
For weekly context (longer-term trend):
GET https://finskills.net/v1/stocks/history/{SYMBOL}?period=2y&interval=1wk
Extract: date, open, high, low, close, volume, adjustedClose
GET https://finskills.net/v1/free/market/breadth
Extract: % stocks above 200MA, % stocks above 50MA (macro tailwind/headwind context)
Use the adjustedClose price series for all calculations.
Simple Moving Averages (SMA):
SMA_20 = rolling_mean(close, 20)
SMA_50 = rolling_mean(close, 50)
SMA_200 = rolling_mean(close, 200)
Exponential Moving Averages (EMA):
EMA_12 = EW_mean(close, span=12)
EMA_26 = EW_mean(close, span=26)
Trend Alignment (Bull): Price > SMA_20 > SMA_50 > SMA_200 Trend Alignment (Bear): Price < SMA_20 < SMA_50 < SMA_200
MACD:
MACD_line = EMA_12 - EMA_26
Signal_line = EMA(MACD_line, span=9)
MACD_histogram = MACD_line - Signal_line
RSI (14-period):
gain_t = max(close_t - close_{t-1}, 0)
loss_t = max(close_{t-1} - close_t, 0)
avg_gain_14 = rolling_mean(gain_t, 14)
avg_loss_14 = rolling_mean(loss_t, 14)
RS = avg_gain_14 / avg_loss_14
RSI = 100 - 100 / (1 + RS)
Stochastic Oscillator (slow %K/%D):
%K = (close - lowest_low_14) / (highest_high_14 - lowest_low_14) × 100
%D = SMA(%K, 3)
Bollinger Bands (20-period, 2 standard deviations):
BB_middle = SMA_20
BB_upper = SMA_20 + 2 × STD(close, 20)
BB_lower = SMA_20 - 2 × STD(close, 20)
BB_width = (BB_upper - BB_lower) / BB_middle
Average True Range (ATR, 14-period):
TR = max(high - low, |high - prev_close|, |low - prev_close|)
ATR_14 = rolling_mean(TR, 14)
Use ATR for stop-loss placement: Stop = entry - (1.5 × ATR) for longs
Volume Moving Average:
Vol_SMA_20 = rolling_mean(volume, 20)
Volume Confirmation:
On-Balance Volume (OBV):
OBV_t = OBV_{t-1} + volume_t if close_t > close_{t-1}
OBV_t = OBV_{t-1} - volume_t if close_t < close_{t-1}
OBV rising while price flat/declining: Accumulation signal (bullish) OBV falling while price flat/rising: Distribution signal (bearish)
Find key levels from recent price history:
Define 3 support levels (S1 < S2 < current price) and 3 resistance levels (current price < R1 < R2 < R3).
Check for the following patterns in the most recent 60 bars:
Bullish Patterns:
Bearish Patterns:
Compute all 12 indicators; create a signal table:
| Indicator | Value | Signal | Weight |
|---|---|---|---|
| SMA_20 vs. Price | Above/Below | Bull/Bear | 3 |
| SMA_50 vs. Price | Above/Below | Bull/Bear | 3 |
| SMA_200 vs. Price | Above/Below | Bull/Bear | 4 |
| Golden/Death Cross | State | Bull/Bear/Neutral | 4 |
| RSI (14) | X.X | OB/OS/Neutral | 3 |
| MACD vs. Signal | Cross state | Bull/Bear/Neutral | 3 |
| Bollinger Position | Upper/Mid/Lower | OB/OS/Neutral | 2 |
| Volume Trend | Above/Below avg | Strong/Weak | 2 |
| OBV trend | Rising/Falling | Accum/Distrib | 2 |
Compute bullish signal count vs. bearish signal count (weighted).
Identify and rank 3 support and 3 resistance levels.
Check for active patterns in the 60-bar lookback window.
╔══════════════════════════════════════════════════════════════╗
║ TECHNICAL ANALYSIS — {TICKER} ({DATE}) ║
║ Current Price: ${price} | 52-week: ${low} – ${high} ║
╚══════════════════════════════════════════════════════════════╝
📈 TREND STRUCTURE
Weekly Trend: {Uptrend / Downtrend / Sideways} (SMA alignment: {Bull/Bear/Mixed})
Daily Trend: {Uptrend / Downtrend / Sideways}
Trend Alignment: {Aligned / Conflicted}
Key MAs:
SMA 20: ${val} Price is {above/below} +{%} from SMA20
SMA 50: ${val} Price is {above/below} +{%} from SMA50
SMA 200: ${val} Price is {above/below} +{%} from SMA200
Golden/Death Cross Status: {Golden cross on {date} / Death cross on {date} / Neither}
📊 MOMENTUM & OSCILLATORS
RSI (14): {val} → {Overbought / Neutral / Oversold}
MACD: {val} Signal: {val} Hist: {val} → {Bullish/Bearish}
Stochastic %K/%D: {val}/{val} → {Cross direction / level}
📉 VOLATILITY & VOLUME
Bollinger位置: {Upper / Middle / Lower} band region (Width: {val})
ATR (14): ${val} ({X}% of price — {Low/Medium/High} volatility)
Volume vs. 20MA: {+/-X}% → {Above-average / Below-average}
OBV Trend: {Rising / Falling / Flat} → {Accumulation / Distribution}
🎯 SUPPORT & RESISTANCE MAP
Resistance 3: ${R3} [{Level type}]
Resistance 2: ${R2} [{Level type}]
Resistance 1: ${R1} [{Level type}] ← Nearest overhead
► CURRENT PRICE: ${price} ◄
Support 1: ${S1} [{Level type}] ← Nearest floor
Support 2: ${S2} [{Level type}]
Support 3: ${S3} [{Level type}]
🔍 PATTERN DETECTED: {Pattern name or "No clear pattern"}
{Pattern description and implication, 1-2 sentences}
Breakout/Breakdown trigger: ${level}
Pattern target: ${target}
📊 SIGNAL SCORECARD
Bullish signals: {N}/9 | Bearish signals: {N}/9 | Neutral: {N}/9
Weighted tally: Bullish {X}/26 vs. Bearish {X}/26
🎯 TRADE SETUP
Bias: {BULLISH / NEUTRAL / BEARISH}
Entry Zone: ${low} – ${high}
Stop-Loss: ${level} ({ATR}-based, {%} below entry)
Target 1: ${t1} ({R:R ratio} risk/reward)
Target 2: ${t2} ({R:R ratio} risk/reward)
Time Horizon: {Days/weeks based on setup type}
Recommended Action: {Buy above ${X} with stop at ${Y} / Wait for pullback to ${S1} / Avoid until trend clarifies}
📊 MARKET BREADTH CONTEXT
% of S&P 500 stocks above 200MA: {%}
Macro tailwind/headwind: {Tailwind — broad market healthy / Headwind — take smaller position}