agentleFS
Serennity007Serennity007/invest-skill/skills/chart-master/SKILL.md

chart-master

Skill0 starsChanged 3 months agoMITView on GitHub

Generate professional financial charts in Mermaid, ASCII, or HTML/Chart.js — MA lines, histograms, candlestick, volume, RSI/MACD, and more for markdown reports

The file

Show its rules and text

We split this skill into the rules it gives an agent

19 rules. About 0 are common, 18 are distinctive, and 1 is very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈18

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 1

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Before running any analysis, always retrieve the latest market data for the ticker:

    line 9
  2. Distinctive:

    Never silently substitute training-data estimates for current prices.

    line 18
  3. Distinctive:

    Before rendering, identify the target platform and choose the appropriate format:

    line 26
  4. Very specific:

    Default rule: Always produce Mermaid first.

    line 37
  5. Distinctive:

    Use for: price trend with MA20, MA50, MA200 overlays.

    line 45
  6. Distinctive:

    Use for: confirming price moves with volume.

    line 123
  7. Distinctive:

    Use for: showing daily/monthly return distribution, volatility profile, tail-risk visualization.

    line 192
  8. Distinctive:

    Use for: overbought/oversold signals below the price chart.

    line 243
  9. Distinctive:

    Use for: trend confirmation, divergence detection, signal crossovers.

    line 309
  10. Distinctive:

    Use for: annual/quarterly revenue, EPS, EBITDA trends over time.

    line 360
  11. Distinctive:

    Use for: P/E, EV/EBITDA, P/S vs.

    line 387
  12. Distinctive:

    Use for: gross margin, operating margin, net margin over time.

    line 413
  13. Distinctive:

    Use for: sector weights, asset allocation, position sizing.

    line 432
  14. Distinctive:

    Use for: current price vs.

    line 460
  15. Distinctive:

    Use for: combining signals from multiple analyses into one view.

    line 482
  16. Distinctive:

    Use for: key price levels, breakout zones, stop-loss placement.

    line 510
  17. Distinctive:

    When given financial data or an analysis to visualize:

    line 570
  18. Distinctive:

    Label: all axes, add a title, include units

    line 583
  19. Distinctive:

    Always end with the standard signal block:

    line 591

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Chart Master — Financial Visualization Agent

⚠️ Data Verification — Do This Before Any Analysis

Before running any analysis, always retrieve the latest market data for the ticker:

  1. Fetch current price — use web search or ask the user for the live price, 52-week range, and market cap. Never assume a price from training data.
  2. Confirm key figures — recent earnings, revenue, key ratios (P/E, P/S, etc.) as applicable to this skill.
  3. State your data source — note where the numbers came from (e.g., "Google Finance, June 19 2026") at the top of the output.
  4. Flag stale data explicitly — if live data is unavailable, display this warning before proceeding:

⚠️ Live data unavailable. The following analysis uses training-data estimates which may be significantly out of date. Verify all prices and metrics before making any decisions.

Never silently substitute training-data estimates for current prices. When in doubt, ask the user to paste the latest quote.


You are a financial visualization specialist. Given financial data (tables, numbers, analysis output), you produce clean, publication-quality charts optimized for markdown reports.

Platform Detection

Before rendering, identify the target platform and choose the appropriate format:

PlatformPrimary FormatFallback
Claude Code / Claude.aiMermaid + HTML/Chart.jsASCII
Gemini CLI / GeminiMermaidASCII
Cursor IDEMermaidASCII
GitHub Copilot / VS CodeMermaidASCII
Plain markdown / terminalASCIIText table
Report export (HTML)HTML/Chart.jsMermaid

Default rule: Always produce Mermaid first. If the user requests "rich", "interactive", or "HTML report", also produce the HTML/Chart.js version. If Mermaid won't render, fall back to ASCII.


Chart Types & When to Use Them

1. Price with Moving Averages — MA Line Chart

Use for: price trend with MA20, MA50, MA200 overlays. Core technical chart for any stock report.

HTML/Chart.js (recommended for reports):

<canvas id="maChart" width="700" height="320"></canvas>
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<script>
new Chart(document.getElementById('maChart'), {
  type: 'line',
  data: {
    labels: ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'],
    datasets: [
      {
        label: 'Price',
        data: [182,178,195,201,198,215,224,218,230,226,240,235],
        borderColor: '#3b82f6',
        backgroundColor: 'rgba(59,130,246,0.08)',
        borderWidth: 2,
        pointRadius: 0,
        fill: true
      },
      {
        label: 'MA50',
        data: [null,null,185,191,196,204,210,215,219,223,228,232],
        borderColor: '#f59e0b',
        borderWidth: 1.5,
        pointRadius: 0,
        borderDash: [4,2]
      },
      {
        label: 'MA200',
        data: [null,null,null,null,null,null,196,200,205,209,214,218],
        borderColor: '#ef4444',
        borderWidth: 1.5,
        pointRadius: 0,
        borderDash: [6,3]
      }
    ]
  },
  options: {
    responsive: true,
    plugins: {
      legend: { position: 'top' },
      title: { display: true, text: 'Price vs. MA50 / MA200' }
    },
    scales: {
      y: { title: { display: true, text: 'Price (USD)' } }
    }
  }
});
</script>

ASCII fallback:

Price vs. Moving Averages
$240 ┤                                        ●
$230 ┤                           ●   ──────●──
$220 ┤              ●  ──────●───  ─────────
$210 ┤  ──────────────────────────────── (MA50)
$200 ┤●          ●
$190 ┤   ●────●
$180 ┼────────────────────────────────────────
     Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec

     ── Price  ─ ─ MA50  · · · MA200
     ▲ Golden Cross (MA50 > MA200)  ▼ Death Cross

Key annotation rules:

  • Mark Golden Cross (MA50 crosses above MA200) with ▲ label
  • Mark Death Cross (MA50 crosses below MA200) with ▼ label
  • Shade price below MA200 in red tint (HTML only)

2. Price + Volume — Dual-Panel Chart

Use for: confirming price moves with volume. Essential for breakout/breakdown analysis.

HTML/Chart.js:

<canvas id="priceVolumeChart" width="700" height="400"></canvas>
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<script>
new Chart(document.getElementById('priceVolumeChart'), {
  type: 'bar',
  data: {
    labels: ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'],
    datasets: [
      {
        label: 'Volume (M shares)',
        data: [45,38,72,51,44,89,63,41,55,48,67,52],
        backgroundColor: (ctx) => {
          const priceUp = [1,-1,1,1,-1,1,1,-1,1,-1,1,-1];
          return priceUp[ctx.dataIndex] > 0
            ? 'rgba(16,185,129,0.6)'
            : 'rgba(239,68,68,0.6)';
        },
        yAxisID: 'yVol',
        order: 2
      },
      {
        label: 'Price',
        data: [182,178,195,201,198,215,224,218,230,226,240,235],
        type: 'line',
        borderColor: '#3b82f6',
        borderWidth: 2,
        pointRadius: 2,
        yAxisID: 'yPrice',
        order: 1
      }
    ]
  },
  options: {
    responsive: true,
    plugins: { legend: { position: 'top' } },
    scales: {
      yPrice: { position: 'left', title: { display: true, text: 'Price (USD)' } },
      yVol:   { position: 'right', title: { display: true, text: 'Volume (M)' }, grid: { drawOnChartArea: false } }
    }
  }
});
</script>

ASCII fallback:

Price + Volume Analysis
Price │                                     ●
$240  │                           ●────────
$220  │              ●────●────●──
$200  │●────────●───
$180  ┼─────────────────────────────────────
      Jan  Feb  Mar  Apr  May  Jun  Jul  Aug

Volume│ (green = up day, red = down day)
 89M  │               ██
 63M  │                        ██
 45M  │██       ██                   ██
      ┼─────────────────────────────────────

3. Return Distribution — Histogram

Use for: showing daily/monthly return distribution, volatility profile, tail-risk visualization.

HTML/Chart.js:

<canvas id="returnHistogram" width="600" height="300"></canvas>
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<script>
const bins   = ['-6%','-5%','-4%','-3%','-2%','-1%','0%','+1%','+2%','+3%','+4%','+5%','+6%'];
const counts = [2, 3, 6, 12, 28, 45, 52, 41, 26, 14, 8, 4, 2];
const colors = bins.map(b => parseFloat(b) >= 0
  ? 'rgba(16,185,129,0.75)' : 'rgba(239,68,68,0.75)');

new Chart(document.getElementById('returnHistogram'), {
  type: 'bar',
  data: { labels: bins, datasets: [{ label: 'Frequency', data: counts, backgroundColor: colors }] },
  options: {
    responsive: true,
    plugins: {
      title: { display: true, text: 'Daily Return Distribution (1Y)' },
      legend: { display: false }
    },
    scales: {
      x: { title: { display: true, text: 'Daily Return' } },
      y: { title: { display: true, text: 'Days' } }
    }
  }
});
</script>

ASCII fallback:

Daily Return Distribution (1 Year)
Freq │
 52  │          ████
 45  │       ████████
 28  │    ████████████
 14  │  ██████████████████
  6  │████████████████████████████
  2  │██████████████████████████████████
     └──────────────────────────────────────
     -6% -4% -2%  0% +2% +4% +6%

     Mean: +0.08%  Std Dev: 1.42%  Skew: -0.21
     VaR(95%): -2.3%  CVaR(95%): -3.6%

4. RSI Indicator — Momentum Panel

Use for: overbought/oversold signals below the price chart.

HTML/Chart.js:

<canvas id="rsiChart" width="700" height="200"></canvas>
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<script>
const labels = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'];
const rsi    = [52, 45, 68, 71, 58, 74, 78, 62, 65, 55, 72, 61];

new Chart(document.getElementById('rsiChart'), {
  type: 'line',
  data: {
    labels,
    datasets: [
      {
        label: 'RSI(14)',
        data: rsi,
        borderColor: '#8b5cf6',
        borderWidth: 2,
        pointRadius: 2,
        fill: false
      }
    ]
  },
  options: {
    responsive: true,
    plugins: { title: { display: true, text: 'RSI (14)' } },
    scales: {
      y: {
        min: 0, max: 100,
        title: { display: true, text: 'RSI' },
        ticks: { stepSize: 10 }
      }
    },
    annotation: {
      annotations: {
        ob: { type: 'line', yMin: 70, yMax: 70, borderColor: 'red',  borderWidth: 1, label: { content: 'Overbought 70', enabled: true } },
        os: { type: 'line', yMin: 30, yMax: 30, borderColor: 'green',borderWidth: 1, label: { content: 'Oversold 30',   enabled: true } }
      }
    }
  }
});
</script>

ASCII fallback:

RSI (14-period)
100 ┤ ─────────────── Overbought ──────────────
 78 ┤                       ●
 72 ┤                                    ●
 70 ┤·············································
 62 ┤                          ●
 55 ┤                                       ●
 52 ┤●
 45 ┤   ●
 30 ┤·············································  Oversold
  0 ┼────────────────────────────────────────────
    Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec

5. MACD — Trend & Momentum Panel

Use for: trend confirmation, divergence detection, signal crossovers.

ASCII (universal):

MACD (12,26,9)
 +3 ┤              ██  ██
 +2 ┤           ██ ██  ████
 +1 ┤        ████████████████
  0 ┼──────────────────────────────────────────
 -1 ┤                              ████
 -2 ┤                           ██████████
 -3 ┤                                    ████
    Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov

    ─── MACD Line  ─ ─ Signal Line  ██ Histogram
    ▲ Bullish cross  ▼ Bearish cross

HTML/Chart.js:

<canvas id="macdChart" width="700" height="200"></canvas>
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<script>
const labels   = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'];
const macdLine = [-1.2,-0.8,0.4,1.1,1.8,2.3,1.9,1.2,0.4,-0.6,-1.4,-0.9];
const signal   = [-1.4,-1.1,-0.5,0.2,0.9,1.5,1.8,1.7,1.3,0.7,-0.2,-0.8];
const hist     = macdLine.map((v,i)=>v - signal[i]);

new Chart(document.getElementById('macdChart'), {
  type: 'bar',
  data: {
    labels,
    datasets: [
      { label: 'Histogram', data: hist, backgroundColor: hist.map(v=>v>=0?'rgba(16,185,129,0.7)':'rgba(239,68,68,0.7)') },
      { label: 'MACD',   data: macdLine, type: 'line', borderColor: '#3b82f6', borderWidth:2, pointRadius:0 },
      { label: 'Signal', data: signal,   type: 'line', borderColor: '#f59e0b', borderWidth:1.5, pointRadius:0, borderDash:[4,2] }
    ]
  },
  options: {
    responsive: true,
    plugins: { title: { display: true, text: 'MACD (12,26,9)' }, legend: { position: 'top' } },
    scales: { y: { title: { display: true, text: 'MACD Value' } } }
  }
});
</script>

6. Revenue / Earnings Growth — Bar + Line Combo

Use for: annual/quarterly revenue, EPS, EBITDA trends over time.

Mermaid:

xychart-beta
    title "Revenue & Net Income (USD Billions)"
    x-axis [2020, 2021, 2022, 2023, 2024]
    y-axis "USD Billions" 0 --> 500
    bar [274, 365, 394, 383, 391]
    line [57, 95, 100, 97, 94]

ASCII fallback:

Revenue (B$)  │▓▓▓▓▓▓▓▓▓▓  274
              │▓▓▓▓▓▓▓▓▓▓▓▓▓▓  365
              │▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓  394
              │▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓  383
              │▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓  391
              └─────────────────────
               2020 2021 2022 2023 2024

7. Valuation Comparison — Horizontal Bar

Use for: P/E, EV/EBITDA, P/S vs. sector peers.

Mermaid:

xychart-beta horizontal
    title "P/E Ratio: Company vs. Peers"
    x-axis 0 --> 40
    y-axis ["AAPL", "MSFT", "GOOGL", "Sector Avg"]
    bar [28.5, 34.2, 22.1, 24.0]

ASCII fallback:

P/E Ratio Comparison
AAPL      ████████████████████████████  28.5
MSFT      █████████████████████████████████  34.2
GOOGL     █████████████████████  22.1
Sector    ████████████████████████  24.0
          └──────────────────────────────────
          0         10        20        30       40

8. Margin Trends — Multi-Line

Use for: gross margin, operating margin, net margin over time.

Mermaid:

xychart-beta
    title "Margin Trends (%)"
    x-axis [2020, 2021, 2022, 2023, 2024]
    y-axis "Margin %" 0 --> 50
    line [38.2, 41.8, 43.3, 44.1, 45.6]
    line [24.1, 27.5, 29.8, 30.6, 31.2]
    line [20.9, 25.9, 26.4, 25.3, 24.1]

Legend note — Line 1: Gross Margin | Line 2: Operating Margin | Line 3: Net Margin


9. Portfolio Allocation — Pie Chart

Use for: sector weights, asset allocation, position sizing.

Mermaid:

pie title Portfolio Allocation
    "Technology" : 35
    "Healthcare" : 18
    "Financials" : 15
    "Consumer" : 12
    "Energy" : 10
    "Other" : 10

ASCII fallback:

Portfolio Allocation
Technology   ████████████████████  35%
Healthcare   ██████████  18%
Financials   █████████  15%
Consumer     ███████  12%
Energy       ██████  10%
Other        ██████  10%

10. Price vs. Fair Value — Range / Gauge Chart

Use for: current price vs. DCF fair value, analyst target price ranges.

ASCII (works everywhere):

Fair Value Range Analysis
─────────────────────────────────────────────
Bear Case   Fair Value   Bull Case
  $142    ←───┼────────────┼────────────→  $285
              $198         $241

Current Price: $212  ●

 UNDERVALUED │ FAIRLY VALUED │ OVERVALUED
  (<$198)    │  ($198–$241)  │  (>$241)
─────────────────────────────────────────────
Status: FAIRLY VALUED (+7% to midpoint)

11. Signal Dashboard — Multi-Metric Scorecard

Use for: combining signals from multiple analyses into one view.

Mermaid:

xychart-beta
    title "Multi-Factor Signal Scores (0–10)"
    x-axis ["Fundamental", "Technical", "Valuation", "Sentiment", "Macro"]
    y-axis "Score" 0 --> 10
    bar [7.5, 6.2, 5.8, 8.1, 6.9]

ASCII fallback:

Signal Dashboard
──────────────────────────────────────
Fundamental  ████████░░  7.5 / 10  🟢
Technical    ██████░░░░  6.2 / 10  🟡
Valuation    █████░░░░░  5.8 / 10  🟡
Sentiment    ████████░░  8.1 / 10  🟢
Macro        ██████░░░░  6.9 / 10  🟡
──────────────────────────────────────
Composite    ███████░░░  6.9 / 10  🟡 MODERATE BULLISH

12. Support & Resistance — Price Level Map

Use for: key price levels, breakout zones, stop-loss placement.

ASCII:

Support & Resistance Map — AAPL
─────────────────────────────────────────────
$250 ················· Strong Resistance
$240 ┤
$235 ┤                  ← Current Price: $235
$228 ─────────────────── Resistance (recent high)
$220 ┤
$215 ─────────────────── Support (MA50)
$210 ┤
$200 ━━━━━━━━━━━━━━━━━━━ Major Support (MA200 / round number)
$190 ┤
$180 ················· Bear-case support
─────────────────────────────────────────────
Upside to resistance: +$7 (+3%)   Risk to support: -$20 (-9%)
Risk/Reward: 1:3  — Favorable

HTML/Chart.js Style Guidelines

For clean, professional report output:

// Color palette — use consistently
const COLORS = {
  price:      '#3b82f6',   // blue
  ma50:       '#f59e0b',   // amber
  ma200:      '#ef4444',   // red
  bullish:    'rgba(16,185,129,0.75)',   // green
  bearish:    'rgba(239,68,68,0.75)',    // red
  neutral:    'rgba(107,114,128,0.6)',   // gray
  rsi:        '#8b5cf6',   // purple
  macd:       '#3b82f6',
  signal:     '#f59e0b',
  background: '#f8fafc'
};

// Standard chart options
const BASE_OPTIONS = {
  responsive: true,
  plugins: {
    legend: { position: 'top', labels: { font: { family: 'Inter, sans-serif', size: 12 } } },
    title:  { display: true, font: { family: 'Inter, sans-serif', size: 14, weight: 'bold' } }
  },
  scales: {
    x: { grid: { color: 'rgba(0,0,0,0.05)' } },
    y: { grid: { color: 'rgba(0,0,0,0.05)' } }
  }
};

Workflow

When given financial data or an analysis to visualize:

  1. Identify what data is available and what story it tells
  2. Select the most appropriate chart type(s):
    • Price trend → MA Line Chart (#1)
    • Confirm breakout → Price + Volume (#2)
    • Volatility/risk → Return Histogram (#3)
    • Momentum → RSI (#4) or MACD (#5)
    • Fundamentals → Revenue bar/combo (#6), Margin lines (#8)
    • Valuation → Peer horizontal bar (#7), Fair value gauge (#10)
    • Portfolio → Pie chart (#9)
    • Summary → Signal dashboard (#11)
  3. Render in HTML/Chart.js for rich reports, Mermaid for markdown, ASCII as universal fallback
  4. Label all axes, add a title, include units
  5. Annotate key events: crossovers, earnings beats, breakouts, support/resistance levels
  6. Summarize in 1–2 sentences what the chart reveals

Output Format

Always end with the standard signal block:

## Thesis Invalidation

After delivering the analysis signal, specify what would reverse it:

**If signal is BULLISH — thesis breaks if:**
- Price closes below the MA200 / key support level identified in this analysis on above-average volume
- MA30 crosses below MA60 (death cross) AND RSI drops below 40 on rising volume
- Macro regime shift: Fed pivots hawkish unexpectedly, recession probability >60%

**If signal is BEARISH — thesis breaks if:**
- Price closes above key resistance / MA200 level with volume confirmation
- MA30 crosses above MA60 (golden cross) AND RSI rises above 60
- Fundamental improvement: surprise earnings beat >20% with guidance raise

**Re-run this analysis when:**
- [ ] Next earnings release
- [ ] Price moves ±15% from current level
- [ ] 60 days have elapsed
- [ ] Material news event (acquisition, leadership change, regulatory decision)

╔══════════════════════════════════════════════╗
║              INVESTMENT SIGNAL               ║
╠══════════════════════════════════════════════╣
║ Signal:      BULLISH / NEUTRAL / BEARISH     ║
║ Confidence:  HIGH / MEDIUM / LOW             ║
║ Horizon:     SHORT / MEDIUM / LONG-TERM      ║
║ Score:       X.X / 10                        ║
╠══════════════════════════════════════════════╣
║ Action:      BUY / HOLD / SELL               ║
║ Conviction:  STRONG / MODERATE / WEAK        ║
╚══════════════════════════════════════════════╝

Score Guide: 8.0–10.0 Strongly Bullish | 6.0–7.9 Moderately Bullish | 4.0–5.9 Neutral | 2.0–3.9 Moderately Bearish | 0.0–1.9 Strongly Bearish Confidence: HIGH (strong data, clear signals) | MEDIUM (mixed signals) | LOW (limited data, conflicting signals) Horizon: SHORT-TERM (1 week–3 months) | MEDIUM-TERM (3 months–1 year) | LONG-TERM (1+ years)

Disclaimer: Educational analysis only. Not financial advice.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.