Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Fetch historical OHLC chart data from yfinance (stocks) or ccxt (crypto) and load it onto the chart.
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | -17% | 0% |
| case-08 | ✗→✓ | ▲ Improved | -21% | 0% |
| case-10 | ✗→✓ | ▲ Improved | -69% | 0% |
| case-11 | ✗→✓ | ▲ Improved | 8% | 0% |
| case-13 | ✗→✓ | ▲ Improved | -12% | 0% |
Pull historical (and near-realtime) OHLC market data from external sources and load it directly onto the Vibe Trade chart canvas. Once loaded, every other skill — Pattern detection, Strategy generation, backtesting — can operate on the new dataset without the user having to upload a CSV.
This skill is the bridge between "I want to analyze X" and the rest of the platform's tooling.
Vibe Trade should dispatch to the Data Fetcher when the user wants to:
"Load TSLA hourly for the last month")
"Pull DOGE 5m last 24 hours")
data for Apple")
| Source | Asset class | Examples | API key? | |---|---|---|---| | yfinance | US/HK stocks, ETFs, indices, forex | AAPL, SPY, ^GSPC, EURUSD=X | No | | ccxt (default: binance) | Crypto spot pairs | BTC/USDT, ETH-USD, SOL | No |
The skill auto-detects the right provider from the symbol shape:
/ or - with crypto quote) → ccxt^INDEX or =X → yfinanceBTC, ETH, ...) → ccxt with USDT quoteyfinance| Key | Type | Meaning | |---|---|---| | message | string | Natural-language fetch request | | context.dataset_id | string | Existing dataset (ignored — this skill creates new ones) |
Returns a SkillResponse with:
reply — short confirmation ("Loaded 1000 bars of BTC/USDT 1h from binance.")data.dataset — the full fetched payload (symbol, source, interval, bars, metadata)tool_calls:data.dataset.add with the fetched payload — registers the dataset in thestore and switches the chart to it
notify.toast with a success messagebottom_panel.activate_tab if a downstream skill has matching tabs| Tool | When | Payload | |---|---|---| | data.fetch_market | Always — the actual fetch call | {symbol, source, interval, limit, exchange} | | data.dataset.add | Always after a successful fetch | The fetched payload | | chart.set_timeframe | After loading | The fetched native timeframe | | notify.toast | Confirmation or error | {level, message} |
Crypto pair > "Fetch BTC/USDT hourly data, last 500 bars."
→ Calls data.fetch_market(symbol="BTC/USDT", interval="1h", limit=500), auto-routes to ccxt:binance, returns 500 hourly bars, emits data.dataset.add to load them onto the chart.
Stock > "Get AAPL daily for the last 2 years."
→ Calls data.fetch_market(symbol="AAPL", interval="1d", limit=504) (504 ≈ 2 trading years), auto-routes to yfinance, loads onto the chart.
Bare crypto base > "Pull ETH 4h."
→ Auto-completes to ETH/USDT, fetches via ccxt:binance at 4h timeframe, default 1000 bars.
Wired through core/agents/processors.py::_data_fetcher_processor, which:
core.data.fetcher.parse_query() to extractsymbol, interval, and limit
core.data.fetcher.fetch() to pull bars from the right providerSkillResponse with the right tool_callsThe fetcher in turn uses:
Both libraries are pip-installable, key-less, and ship with the backend.
Other measured skills in the registry, with their headline benchmark lift.