Skip to content
Back to skills

Fetch Quotes

ASecurity

Cascading market-data fetcher. Prefers yfinance (free, no credentials) and falls back to a local MT5 terminal when available for broker-exact pricing. Returns OHLCV bars plus a latest quote as JSON, optionally with a PNG chart. USE FOR - get quotes, get data, fetch bars, live data, market data, price data, get chart, quotes for XAUUSD, quotes for US30, any symbol data.

  • 14 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added June 3, 2026
ai-agentspythonrustgoshellapi

Works with

  • terminal
  • api

Security analysis

A96/100
  • mediumInstalls packages at runtime which could introduce malicious dependencies

Pro shows the line behind each finding and how to fix it

Scanned June 3, 2026

npx -y skills add mahmoud20138/Tradecraft --skill fetch-quotes --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Fetch Quotes?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Fetch Quotes
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/mahmoud20138-fetch-quotes/badge)](https://www.skillsdirectory.com/skills/mahmoud20138-fetch-quotes)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: fetch-quotes
description: Cascading market-data fetcher. Prefers yfinance (free, no credentials) and falls back to a local MT5 terminal when available for broker-exact pricing. Returns OHLCV bars plus a latest quote as JSON, optionally with a PNG chart. USE FOR - get quotes, get data, fetch bars, live data, market data, price data, get chart, quotes for XAUUSD, quotes for US30, any symbol data.
user-invocable: true
kind: tool
category: trading/data
status: active
tags: [trading, data, free, yfinance, mt5, fetch, quotes, bars]
related_skills:
  - pair-analyze
  - analyze-gold
  - analyze-us30
  - mt5-integration
  - mt5-chart-browser
  - xtrading-analyze
skill_level: beginner
---

# Fetch Quotes — Free-First Data Source

Primary data source: **yfinance** (free, no account, no API key). Automatic upgrade to **local MT5 terminal** when it is running and logged in. Pick this when you need OHLCV bars or a current quote for any symbol and don't want to maintain credentials.

## Invocation

```text
/tradecraft:fetch-quotes <SYMBOL> [TIMEFRAME] [BARS] [SOURCE] [CHART]

# Examples
/tradecraft:fetch-quotes XAUUSD                  # defaults: H1, 200 bars, auto
/tradecraft:fetch-quotes US30 H4
/tradecraft:fetch-quotes EURUSD M15 100 free
/tradecraft:fetch-quotes BTCUSD D1 300 auto chart
```

- `<SYMBOL>` — e.g. `XAUUSD`, `US30`, `EURUSD`, `BTCUSD`. Broker suffixes (`XAUUSDm`, `US30.cash`) are normalized automatically.
- `[TIMEFRAME]` — `M1 M5 M15 M30 H1 H4 D1 W1`. Default `H1`. (`H4` via `--source free` is resampled from yfinance 1-hour bars.)
- `[BARS]` — number of bars to return. Default `200`.
- `[SOURCE]` — `auto` (default), `free` (yfinance only), `mt5` (MT5 only, fails if unavailable).
- `[CHART]` — pass `chart` or a PNG path to render a line chart.

## What Claude Should Execute

First-time setup (free path only):

```shell
pip install -r "${CLAUDE_PLUGIN_ROOT}/scripts/requirements.txt"
```

Optional, Windows only, for broker-exact pricing:

```shell
pip install MetaTrader5
```

Then, per invocation, shell out to the fetcher:

```shell
python "${CLAUDE_PLUGIN_ROOT}/scripts/fetch_quotes.py" \
  --symbol <SYMBOL> \
  --timeframe <TIMEFRAME> \
  --bars <BARS> \
  --source <SOURCE> \
  [--chart <path.png>]
```

The script writes JSON to stdout. Parse it; if `source == "yfinance"`, remind the user that prices may be ~15 min delayed for indices and futures.

## Output Contract

```json
{
  "source": "yfinance | mt5",
  "symbol": "XAUUSD",
  "broker_symbol": "XAUUSDm | GC=F",
  "timeframe": "H1",
  "bars": [
    {"time": "2026-04-23T10:00:00+00:00",
     "open": 2340.1, "high": 2343.5, "low": 2339.8, "close": 2342.7,
     "volume": 1234}
  ],
  "latest": {
    "bid": 2342.70, "ask": 2342.85, "spread": 0.15,
    "time": "2026-04-23T10:58:12+00:00"
  },
  "point_value": 0.01,
  "note": "Only present on yfinance path - explains delay and missing L1 depth.",
  "chart_path": "out.png"
}
```

- `source` tells you which feed answered. Always check it before reporting a price.
- `broker_symbol` is the actual ticker the feed used after symbol normalization — helpful when a user's broker uses a suffix.
- `spread = 0` on yfinance because Yahoo gives no L1 depth. Don't treat that as real spread.
- Times are ISO-8601 UTC (`+00:00`).

## Source Cascade

| `--source` | Behavior | When to use |
|---|---|---|
| `auto` (default) | MT5 if `MetaTrader5` imports AND `initialize()` succeeds; otherwise yfinance | Any machine — best data available |
| `free` | yfinance only — never touches MT5 | Zero credentials, portable, demo/CI |
| `mt5` | MT5 only — fails fast if terminal isn't up | You know MT5 is running and want broker-exact prices; CI gate against silent fallback |

## Symbol Mapping (canonical → yfinance ticker, MT5 variants tried)

| Canonical | yfinance | MT5 variants attempted |
|---|---|---|
| XAUUSD | `GC=F` | XAUUSD, XAUUSDm, XAUUSD.r, GOLD |
| US30 | `^DJI` | US30, US30.cash, US30m, DJ30, DOWJ30 |
| US500 | `^GSPC` | US500, SPX500, US500m, US500.cash |
| US100 | `^NDX` | NAS100, US100, USTECm, NAS100.r |
| EURUSD | `EURUSD=X` | EURUSD, EURUSDm, EURUSD.r |
| GBPUSD | `GBPUSD=X` | GBPUSD, GBPUSDm |
| USDJPY | `USDJPY=X` | USDJPY, USDJPYm |
| BTCUSD | `BTC-USD` | BTCUSD, BTCUSDm, BTCUSD.cash |
| ETHUSD | `ETH-USD` | ETHUSD, ETHUSDm |
| Unmapped | (pass-through) | (pass-through) |

Unmapped symbols are forwarded verbatim to both feeds — handy for less common instruments, but verify the ticker on the vendor side.

## Known Limits of the Free Path

- **Delay** — Yahoo indices and futures are typically ~15 min delayed. FX and crypto quotes are close to real-time.
- **No L1 depth** — `bid == ask == close`. Don't trust `spread` from this source.
- **Gold quoted as `GC=F`** (COMEX continuous front-month futures). For FX-spot XAUUSD use `--source mt5` or override the mapping.
- **H4 is resampled** from 1-hour bars when on yfinance — calendar-aligned 4h buckets, not the broker's session-aligned H4 candles.
- **Rate limits** — Yahoo throttles heavy polling. For monitoring loops, cache at the bar-close boundary.

## Skip Conditions

- `--source mt5` but no terminal running → returns error JSON with exit code 2. Do not fall through silently; surface the error so the user can decide.
- Symbol not resolvable on either side → exit code 4. Check the spelling and whether the broker quote differs.

## Worked Examples

### Gold, auto source, default bars

```shell
python "${CLAUDE_PLUGIN_ROOT}/scripts/fetch_quotes.py" --symbol XAUUSD --timeframe H1 --bars 50
# -> source: "mt5" if terminal is up, otherwise "yfinance" (GC=F)
```

### US30, free only

```shell
python "${CLAUDE_PLUGIN_ROOT}/scripts/fetch_quotes.py" --symbol US30 --timeframe H4 --bars 120 --source free
# -> source: "yfinance", broker_symbol: "^DJI"
```

### Gold with chart

```shell
python "${CLAUDE_PLUGIN_ROOT}/scripts/fetch_quotes.py" --symbol XAUUSD --timeframe H1 --bars 200 --chart /tmp/gold-h1.png
# -> writes /tmp/gold-h1.png; response JSON carries "chart_path"
```

Claude can then read the PNG with its vision capability for visual pattern analysis (same pattern used by `mt5-chart-browser`).

## See Also

- `pair-analyze` — the generic combination that calls `fetch-quotes` as Step 0
- `analyze-gold` / `analyze-us30` — pre-configured wrappers that go through this skill for data
- `mt5-integration` — deeper MT5 integration guide (broker-exact only)
- `mt5-chart-browser` — read PNG charts once they are generated
- `xtrading-analyze` — full multi-agent scan (assumes a more elaborate local pipeline)

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…