
Technical Analysis
Apply Wyckoff and related chart patterns when researching reversals and structuring rules for trading tools or alerts.
Overview
Technical Analysis is an agent skill for the Idea phase that documents Wyckoff and related chart patterns for researching reversals and drafting detection logic.
Install
npx skills add https://github.com/omer-metin/skills-for-antigravity --skill technical-analysisWhat is this skill?
- Wyckoff accumulation framework with phases A through E (PS, SC, AR, ST, Spring, SOS, LPS)
- Pattern entries include name, description, when-to-use, and why-it-works rationale
- Example spring detection sketch using rolling lows on OHLC data
- Oriented toward major trend reversals after extended declines
- Composable catalog of technical patterns for agent-assisted strategy design
- Wyckoff accumulation model spans five labeled phases (A through E)
- Documented sub-events include PS, SC, AR, ST, Spring, SOS, and LPS
Adoption & trust: 1.5k installs on skills.sh; 89 GitHub stars; 3/3 security scanners passed (skills.sh audits); trending (+200% hot-view momentum).
What problem does it solve?
You know institutional accumulation shows up in price action but lack a structured pattern reference to encode into research or bot rules.
Who is it for?
Indie quant-curious builders prototyping scanners, journaling setups, or coding Wyckoff-style rules on historical bars.
Skip if: Beginners seeking buy/sell signals without market risk literacy, or teams needing licensed investment advice rather than pattern documentation.
When should I use this skill?
User is researching major trend reversals, Wyckoff accumulation, or institutional chart patterns before markup.
What do I get? / Deliverables
You get named patterns with phase breakdowns, usage triggers, and starter detection approaches you can adapt into scripts or alerts.
- Pattern selection rationale tied to market context
- Starter detection pseudocode or functions for named setups
Recommended Skills
Journey fit
Market structure and pattern research happens before you code bots or commit capital—canonical shelf is Idea research. Research subphase fits institutional pattern libraries and detection logic used to explore setups, not day-to-day production monitoring.
How it compares
Pattern playbook for research and coding—not a live brokerage MCP or portfolio accounting skill.
Common Questions / FAQ
Who is technical-analysis for?
Solo builders and advanced traders documenting Wyckoff-style structures for research notes, backtests, or agent-assisted strategy code.
When should I use technical-analysis?
Use it in Idea research when studying major lows and accumulation, before you implement scanners in Build or wire alerts in Operate.
Is technical-analysis safe to install?
Review the Security Audits panel on this Prism page; the skill is informational pattern logic and does not connect to exchanges by itself.
SKILL.md
READMESKILL.md - Technical Analysis
# Technical Analysis ## Patterns --- #### **Name** Wyckoff Accumulation #### **Description** Institutional accumulation pattern before markup phase #### **When** Looking for major trend reversals at lows after extended decline #### **Why It Works** Composite operators (institutions) accumulate shares over time, creating recognizable phases #### **Example** Wyckoff Accumulation Phases: Phase A: Stopping the downtrend - PS (Preliminary Support): First support after decline - SC (Selling Climax): High volume panic low - AR (Automatic Rally): Sharp bounce from SC - ST (Secondary Test): Test of SC on lower volume Phase B: Building the cause - Trading range between AR and SC - Multiple ST's, shakeouts, upthrusts - Volume decreases as weak hands exit Phase C: Test (Spring) - Price breaks below SC briefly - Low volume = lack of selling - Shakeout of remaining weak hands Phase D: Markup begins - SOS (Sign of Strength): Rally on increasing volume - LPS (Last Point of Support): Higher low retest Phase E: Markup - Price leaves range, trends up # Detection code def detect_spring(df, lookback=50): """Detect potential Wyckoff spring (Phase C)""" recent_low = df['low'].rolling(lookback).min() # Spring: price briefly breaks low, then closes above spring = ( (df['low'] < recent_low.shift(1)) & # Break below prior low (df['close'] > recent_low.shift(1)) & # Close back above (df['volume'] < df['volume'].rolling(20).mean()) # Low volume ) return spring #### **Success Rate** ~65-70% when properly identified with volume confirmation --- #### **Name** Volume Profile Value Area #### **Description** Using volume distribution to identify high-probability support/resistance #### **When** Identifying where price is likely to find acceptance or rejection #### **Why It Works** Price spends most time at prices where most volume traded (fair value) #### **Example** Volume Profile Components: POC (Point of Control): Price with highest volume - Acts as magnet for price - Strong S/R when tested from outside Value Area (VA): 70% of volume distribution - VAH (Value Area High): Upper bound - VAL (Value Area Low): Lower bound Trading Rules: 1. Price opens inside VA: - Expect rotation to POC - Look for breakout of VAH/VAL for direction 2. Price opens outside VA: - If accepted outside → trending day - If rejected → expect rotation back to VA 3. Single prints (low volume nodes): - Act as support/resistance - Price moves quickly through them # Python implementation import numpy as np def calculate_volume_profile(df, num_bins=50): price_range = np.linspace(df['low'].min(), df['high'].max(), num_bins) volume_profile = np.zeros(num_bins - 1) for i, row in df.iterrows(): # Distribute volume across price range of candle mask = (price_range[:-1] >= row['low']) & (price_range[1:] <= row['high']) if mask.any(): volume_profile[mask] += row['volume'] / mask.sum() poc_idx = volume_profile.argmax() poc_price = (price_range[poc_idx] + price_range[poc_idx + 1]) / 2 # Calculate Value Area (70% of volume) sorted_idx = np.argsort(volume_profile)[::-1] cumsum = np.cumsum(volume_profile[sorted_idx]) va_threshold = volume_profile.sum() * 0.70 va_idx = sorted_idx[cumsum <= va_threshold] vah = price_range[va_idx.max() + 1] val = price_range[va_idx.min()] return {'poc': poc_price, 'vah': vah, 'val': val} --- #### **Name** RSI D