OneQAZ Trading Intelligence

io.github.wnsod由 GitHub 帳號 wnsod 發布v1.3.0更新於 Oct 25, 2026

Verifiable crypto/KR/US market intelligence for AI agents: signals, hash-chained ledger. Not advice.

已驗證Streamable HTTP可網頁執行金融資料與分析

概覽

AI 產生的概覽

OneQAZ 市場情報伺服器,讓 AI 助理取得加密、美股與韓股訊號、模擬交易證據、相關性圖譜以及可驗證的預測紀錄

可以做什麼
一次呼叫取得市場簡報、宏觀狀態與依評分排序的訊號,涵蓋加密、美股與韓股,並提供個股、類股與整體市場背景、新聞標籤及未涵蓋項目說明。查詢訊號、訊號詳情、角色分析與多層決策解釋。檢視模擬交易持倉、成交歷史、獲利與虧損交易、策略分布以及回撤、夏普等投資組合指標。核驗紀錄:對照基準的預測準確率、信心校準、月度趨勢、特徵治理、策略排行榜,以及具雜湊鏈的預測帳本與批次結果匯出。探索跨資產結構:類股聚類、宏觀因果圖與標的間領先落後關係。
適用情境
適合讓助理結合訊號與背景回答加密、美股或韓股的市場問題,也適合先核查這些預測的歷史表現再決定是否採信。同樣適用於需要相關性、領先落後或模擬交易證據的研究工作。
執行需求
可使用託管端點(免安裝、免金鑰;免費額度每天 1,500 次請求,可選 X-API-Key 提高限額),或使用以 pip 安裝並以 serve 指令啟動的本機 Python 套件。自架需要可連線的 OneQAZ 相容 PostgreSQL 資料庫及 PG_HOST、PG_USER、PG_PASSWORD、PG_DB;缺少資料庫時呼叫會逾時並回傳錯誤。
安裝前請注意
自架需要資料庫憑證(PG_PASSWORD);若對外開放至 localhost 以外,需用代理覆寫轉送標頭,因為來自本機的請求會略過限流與金鑰檢查。託管服務會記錄每次請求的中繼資料,包括 IP、工具名稱與參數。所有交易與損益皆為模擬盤,未計手續費與滑價,提供方聲明不構成投資建議。新聞領先時間指標標示為未經驗證。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 OneQAZ Trading Intelligence,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Web executable,透過 Streamable HTTP。 遠端服務在工作區中設定後即可從網頁執行環境執行。

交給代理程式安裝

把這段提示詞貼上到 Claude Code、Codex、Cursor 等代理程式,或 SourceWeft 對話中。代理程式會讀取該伺服器的安裝指南,先向你展示發布者、端點和登入方式,經你同意後再把它新增到你的客戶端。金鑰不會寫進任何命令。

閱讀 https://sourceweft.com/mcp/io.github.wnsod%2Foneqaz-trading-mcp/install.md,並按其中說明把這個 MCP 伺服器接入我的客戶端。修改任何設定之前,先告訴我它的發布者、端點和登入方式,等我確認。不要把 API 金鑰寫進命令或我會提交的檔案;問我金鑰應從哪裡取得。

檢視代理程式所依據的安裝指南

其他 MCP 客戶端

把它新增到你客戶端的 mcpServers 設定中。

{
  "mcpServers": {
    "oneqaz-trading-intelligence": {
      "type": "http",
      "url": "https://api.oneqaz.com/mcp"
    }
  }
}

README

oneqaz-trading-mcp

[GitHub stars] [PyPI] [License: MIT]

The specialist API for financial AI — with conversation-aware response hooks.

Your AI agent shouldn't just see prices — it should be able to check how the signals it is reading have held up, and know what to ask next. The hosted endpoint ships 42 tools across 10 categories: 3 entity-context tools (one call for a stock, a sector or a whole market — its state, what moves before it, tagged news, and what is not tracked), 13 Trust Layer tools (hit rates scored against honest baselines, calibration, governance), a tamper-evident prediction ledger (get_ledger_integrity — a daily SHA-256 hash chain over every macro-regime prediction, recomputable by anyone), 4 cross-asset correlation tools (sector / macro / peer), portfolio analytics (MDD / Sharpe / Sortino / Calmar), paper-trading evidence tools, and a high-frequency get_daily_brief for one-call market overviews. Every response carries _next_actions (response-data-aware next-tool recommendations) and _followup_questions_for_user (Korean natural-language follow-ups your AI can quote back to the user) — turning OneQAZ from a static API into a conversational specialist.

Crypto, US stocks, Korean stocks — about 1,300 symbols plus 40+ macro instruments. Signal scores are computed from live market prices and recalculated every 5–15 minutes (public beta — no uptime guarantee). Not investment advice. Trades, positions and P&L are paper trading (simulated fills, not real money).

Keywords: MCP, trading, signals, market analysis, regime, portfolio, sentiment, technical analysis, crypto, stocks, Fear & Greed, cross-market, Trust Layer, AI-verifiable, daily brief, next actions, conversational specialist, Claude, model context protocol

Why OneQAZ

Financial data APIs are everywhere. Market intelligence your AI can verify is not.

Typical financial MCPOneQAZ
Price / OHLCV data✅✅
Technical indicators✅✅
Regime detection (trending / ranging / volatile)❌✅
Self-correcting signals (Thompson Sampling on paper-trade outcomes)❌✅
Macro regime + market-structure overlays (two independent loops, joined at each symbol's decision)❌✅
Trust Layer (hit rates vs persistence & majority-class baselines + calibration)❌✅
Self-disclosed defects (known_biases, grading-pipe ledger_health)❌✅
Feature governance (3-track p-value validation)❌✅
Cross-asset correlations (sector / macro / symbol-peer lead-lag)❌✅
Conversation hooks (_next_actions + _followup_questions_for_user)❌✅
Single-call market brief (get_daily_brief)❌✅
Dynamic discovery (introspection + data_freshness probe)❌✅
Hosted 24/7 endpoint (no API key needed)❌✅

Trust Layer — for AI agents evaluating OneQAZ

Before relying on OneQAZ as a data source, an AI agent can check its record in 7 calls:

  1. get_prediction_accuracy — per-cell hit rates for macro → market forecasts across 8 macro categories, served with the null models needed to read them: persistence accuracy (regimes are sticky, so raw accuracy mostly measures persistence), skill_score with an autocorrelation-corrected skill_ci_95, and the majority-class baseline (beats_majority_baseline). Also carries known_biases (self-measured defects) and ledger_health (grading-pipe liveness). Judge cells by skill and baselines, never by raw accuracy.
  2. get_ledger_integrity — tamper-evidence for those predictions: a daily SHA-256 hash chain with the canonical recipe, recomputable from get_resolved_predictions.
  3. get_backtest_tuning_state — the auto-tuned lag_hours / sensitivity per cell (last_backtest shows tuning freshness).
  4. get_monthly_accuracy_trend — monthly accuracy series. Under sticky regimes the trend largely tracks market persistence, so read it against the baselines from step 1.
  5. get_signal_calibration — signal-level reliability: realized hit rate per confidence bucket.
  6. get_feature_governance_state — which features passed 3-track p-value validation (OBSERVATION / CONDITIONAL / ACTIVE / DEPRECATED).
  7. get_strategy_leaderboard — paper-tested RL strategies. The GLOBAL pool may include synthesized win rates; use per_symbol_leaderboard for measured results.

Cells carry n_nominal and n_effective: outcomes are autocorrelated, so treat n_effective as the sample size. Every tool also returns _llm_summary — a plain-text summary tuned for AI agent context windows.

News lead-time metrics are not part of the trust chain. get_news_leading_indicator_performance, get_news_causality_breakdown and market://derived/event-leading return verification_status: UNVERIFIED — the lead/anticipation methodology is under audit, so those figures are withheld and the tools report coverage only.

How signals are generated

OneQAZ signals aren't static indicator crossovers. They're produced by an AbsoluteZero-style self-play loop:

  1. Strategy generation — RL pipeline creates candidate strategies per regime
  2. Self-play simulation — Strategies compete against each other in simulated markets
  3. Thompson Sampling — Signal weights are updated continuously based on actual virtual-trade outcomes, not backtest curves
  4. Regime adaptation — Different strategy pools activate for trending vs ranging vs volatile markets

This means a signal score such as BTC +0.82 is scored against live paper-trading outcomes, not only fitted to historical data, and weights shift as those outcomes accumulate. Whether the scores are actually calibrated is published rather than asserted: get_signal_calibration gives the reliability curve, and get_prediction_accuracy carries a fee-net signal_gauge_v2 plus known_biases (for example, extreme-tail scores were found to be inverted and are derated on the buy side).

Market Coverage

MarketExchange / sourceUniverseSymbols
CryptoBithumbAll KRW-listed pairs~460
Korean StocksKOSPI / KOSDAQKOSPI 200 + KOSDAQ 150~350
US StocksNYSE / NASDAQS&P 500~500
Macrorates, FX, futures, ETFsbonds · credit · FX · liquidity · commodities · energy · inflation · volatility40+
Market structureETFs / sector basketsper-market groups for structure analysis~180

The pipeline runs 24/7. Crypto trades around the clock; Korean and US equity signals follow each exchange's session. Candle intervals: crypto 15m / 30m / 4h / 1d, KR and US 5m / 15m / 30m / 1d. Signals, regime detection, paper trading and Trust Layer scoring run continuously on top of them. Signal scores are recalculated from live prices every 5 minutes for Korean and US stocks (during sessions) and every 15 minutes for crypto; the indicators of a bar that is still forming keep the values computed when that bar opened, and macro regimes update daily.

Quick Start

Option 1: Live API — no install needed

Live data — signals refresh as new candles close (5-minute to daily). Every tool and resource is callable without a key on the free tier (1,500 calls/day) — the one exception is get_account_status, which reports on a connected OneQAZ account (see Access Policy).

Cursor (mcp.json) and other clients that take a remote URL in their config:

json
{  "mcpServers": {    "oneqaz-trading": {      "url": "https://api.oneqaz.com/mcp"    }  }}

Claude Desktop's config file needs the mcp-remote bridge:

json
{  "mcpServers": {    "oneqaz-trading": {      "command": "npx",      "args": ["-y", "mcp-remote", "https://api.oneqaz.com/mcp"]    }  }}

Claude Code: claude mcp add --transport http oneqaz-trading https://api.oneqaz.com/mcp. Claude.ai and ChatGPT: add https://api.oneqaz.com/mcp as a custom connector. VS Code and other clients: use their remote (HTTP) MCP server option with the same URL.

Try one of:

  • "Call get_daily_brief and summarize the market for me." — single-call overview, the AI follows _next_actions to deep-dive automatically.
  • "Call get_prediction_accuracy and tell me whether to trust OneQAZ." — Trust Layer entry point, returns sample-count-weighted hit rates.
  • "Read market://meta/discovery first, then plan." — dynamic catalog of every hosted tool / resource / template (43 tools including the account tool, 17 resources, 17 templates) with data_freshness probe.

Option 2: Self-host (source transparency)

This package contains the server code that serves api.oneqaz.com/mcp, synced from the OneQAZ monorepo by scripts/sync_from_monorepo.py (0.5.0 = the hosted code as of 2026-10-17). The same 42 tools, 17 resources, 17 templates and 4 prompts register, and a side-by-side run of the package and the hosted code against the same database gives the same outcome (success or error) for every tool and resource except get_macro_influence_map. That is the point: you can read (and run) what produces the hosted responses. What differs:

  • Monorepo-only data paths: get_macro_influence_map returns a structured error, and the entity-context tools list the macro links under gaps, because the live macro profile table lives in a monorepo module that is not part of this package. Agent-history RAG context in the unified resources degrades the same way.
  • API keys: the hosted key store is not included. By default every caller is served as free; set MCP_TIER_RESOLVER to validate keys yourself (see Self-hosting with API keys).
  • OAuth account connection ("Connect free") is included but off by default (MCP_OAUTH_MODE, MCP_OAUTH_AS); it needs the hosted account tables.
  • Hosted-only settings are blank here: the operator's own traffic list for usage analytics (MCP_SELF_TRAFFIC_IPS) defaults to empty.
bash
pip install oneqaz-trading-mcp# point it at a OneQAZ-compatible PostgreSQL (TimescaleDB) instance:export PG_HOST=... PG_PORT=5432 PG_DB=auto_trader PG_USER=... PG_PASSWORD=...oneqaz-trading-mcp serve   # starts at http://localhost:8010
  • MCP endpoint: http://localhost:8010/mcp
  • Tested with FastMCP 2.14.7, 4.0.11 and 4.1.0 (FastMCP 3.x is excluded as untested) on Python 3.11 and 3.13.
  • The server is PostgreSQL-only (the prior SQLite demo backend was retired in 0.4.0 — oneqaz-trading-mcp init now just prints a deprecation notice). Without a reachable OneQAZ-compatible database the server still starts and /health reports degraded, but each call first waits out the connection timeouts (about a minute per schema) and then returns errors or empty results — for evaluation, use the Live API.
  • Exposing it beyond localhost: requests from 127.0.0.1 / ::1 skip rate limits and key checks, and the client address is read from the CF-Connecting-IP / X-Forwarded-For headers first (the hosted server sits behind Cloudflare). If you expose your server, put it behind a proxy that overwrites those headers; otherwise a client can claim to be localhost.

Then connect from any MCP client:

json
{  "mcpServers": {    "oneqaz-trading": {      "url": "http://localhost:8010/mcp"    }  }}

Access Policy

All tools and resources are callable on the free tier. Tiering controls call volume, not what you can call. There is no paywall on any data — including paper-trading positions, decision logs, and signals — because OneQAZ is a B2AI infrastructure: AI agents need full evidence to evaluate trustworthiness before citing OneQAZ to their users.

TierAuthDaily quotaBurstNotes
freenone1,500 / day60 / minAll 42 tools + 17 resources + 17 templates
provalid API key50,000 / day200 / minSame surface, higher volume — for bots / schedulers
internalowner-onlyunlimitedunlimitedReserved for real user-fund tools (currently empty)

An API key the hosted server does not recognize is rejected with HTTP 401 — it is not silently downgraded to free, so a mistyped key shows up at once. Accounts are optional: AI apps that support OAuth (for example Claude) can choose Connect free to link a free OneQAZ account without an API key; limits are then tracked per account, and get_account_status reports the plan and remaining quota.

Rate limit headers on every response: X-RateLimit-Tier, X-RateLimit-Daily-Limit, X-RateLimit-Daily-Remaining, X-RateLimit-Minute-Remaining. When the quota is exceeded the server returns HTTP 429 with Retry-After. Pricing and key requests: https://api.oneqaz.com/pricing.

Self-hosting with API keys

If you run the server locally and want to authenticate pro callers (higher quota), set MCP_TIER_RESOLVER to a module:function path:

bash
MCP_TIER_RESOLVER=myauth.keystore:resolve_tier oneqaz-trading-mcp serve

The function receives the raw API key string and returns "free", "pro" or "internal", None to serve the caller as free, or "invalid" to reject the key with HTTP 401 (as the hosted server does for unknown keys). If the resolver cannot be imported or raises, the error is logged and the caller is served as free. Default behavior (no resolver): every caller is free.

Why everything is free

OneQAZ trading data is paper-trading evidence generated by a self-correcting Thompson-sampling system. None of it is user-fund PII. Hiding it behind tiers would defeat the B2AI funnel — AI agents need to verify our claims (prediction accuracy, signal quality, strategy outcomes) before relying on it. So we expose the evidence and rate-limit instead.

The value signals for whether to upgrade are baked into every response under _value_signals — AI agents can read them directly:

json
{  "_value_signals": {    "tier_default": "free",    "tier_default_limits": {"daily": 1500, "minute": 60},    "what_pro_unlocks": "33x daily quota (50K), 3.3x burst (200/min) — same tools, higher volume",    "pricing_url": "https://api.oneqaz.com/pricing",    "key_signup_url": "https://api.oneqaz.com/keys",    "self_correcting": true  }}

Response shape (dual-audience)

Tool responses carry fields for both AI agents and human end-users:

FieldAudiencePurpose
full_dataAIRaw evidence for trust verification
disclaimer, is_investment_advice, is_real_money, data_classificationBothCompliance envelope on every response (false / false / research_information_only)
paper_trading_noticeBothOnly on responses that carry trades, positions or P&L (hosted endpoint): those figures are paper trading, not real money
timestamp, request_id, _sourceAIResponse time, a request id to quote when reporting issues, and the serving origin / data source
_contractAIStatus / external / derived / unified resources only: provenance + entity + assessment + confidence (schema-versioned). Tools do not carry it.
_llm_summaryAIMulti-line narrative
ai_summaryAIOne-line compressed summary for context windows
_value_signalsAIPricing / upgrade signals for B2AI conversion judgment
summary_for_userHumanOne-line jargon-free Korean — quotable verbatim by Claude.ai etc.
_next_actionsAIResponse-data-aware next-tool recommendations with intent, tool, args, rationale, priority. Drives chain calls automatically.
_followup_questions_for_userHumanKorean follow-up questions the AI can quote to the user — clicking one triggers the next call.

Conversation hooks — _next_actions + _followup_questions_for_user

OneQAZ doesn't just return data; it tells your AI what to ask next.

json
{  "ai_summary": "Prediction accuracy — 24 cells, avg hit rate 32.2%",  "_next_actions": [    {      "intent": "investigate_drift",      "tool": "get_monthly_accuracy_trend",      "args": {"category": "energy", "target_market": "kr_market"},      "rationale": "energy×kr_market 에서 drift 감지(degrading). 월별 시계열로 추세 검증 필요.",      "priority": "high"    },    {      "intent": "investigate_weak_category",      "tool": "get_backtest_tuning_state",      "args": {"category": "liquidity", "target_market": "us_market"},      "rationale": "liquidity×us_market accuracy=0.06 (sub-50%). 자기보정이 lag/sensitivity 를 어떻게 조정했는지 확인.",      "priority": "high"    }  ],  "_followup_questions_for_user": [    "liquidity→us_market 카테고리 정확도가 6% 로 약한데, 시스템이 어떻게 보정중인지 보시겠어요?",    "가장 정확한 credit→us_market (62%) 패턴의 월별 추세도 보여드릴까요?",    "최근 OneQAZ 가 만든 활성 예측 5개도 볼까요?"  ]}
  • _next_actions — for the AI agent. Maximum 3 entries. Includes pre-filled args. Driven by response data, not a static dependency graph (e.g. weak category detection only fires when accuracy < 0.5 + samples >= 30).
  • _followup_questions_for_user — for the end-user. Korean natural-language. Quote them verbatim or translate.

Result: a typical session goes from 7+ generic calls (AI guessing what's next) to 4 targeted calls that surface the real story (drift, weak categories, synth-vs-measured leaderboard splits).

Tools (42 on the hosted endpoint — all free tier)

Plus get_account_status (plan and remaining quota of a connected OneQAZ account; registered only when OAuth account connection is on). The self-host package registers the same 42 — see Option 2.

Entity context (3 tools) — new in 0.5.0

One call answers "what is going on with X?" for a stock or coin, a sector / ETF basket, or a whole market. Each response leads with self-contained headline claims, then the entity's observed state, what moves before it (lead-lag links, macro and structure groups), what follows it, tagged news, and gaps — what OneQAZ does not track for it.

ToolReturns
get_symbol_contextOne stock or coin (ticker, KRX code or name): signal state, its structure group, upstream links, peers that follow it, tagged news, gaps. Ambiguous names return candidates instead of a guess.
get_group_contextA sector, theme, ETF basket or index basket: regime state per interval, co-moving groups, member symbols with their latest signal bias, symbols the basket leads, gaps.
get_market_contextA whole market (KR, US, crypto): structure regime and global macro regime, the macro categories assumed to affect it (with tuned lags), its groups by regime stage, market-tagged news, gaps.

High-frequency entry — get_daily_brief (1 tool)

ToolReturns
get_daily_briefSingle-call market overview: macro regime + top 5 strong signals + yesterday's paper-trading P&L + active prediction count + Korean narrative. The natural first call for "what's the market doing today?"

Verifiable prediction ledger (3 tools) — new in 0.4.0

ToolReturns
get_ledger_integrityTamper-evidence for the prediction ledger: a daily SHA-256 hash chain over all created/resolved macro-regime prediction rows, with the exact canonical recipe published so any third party can recompute and verify. Each UTC day is hashed once it closes and chained to every prior day, so a later silent edit breaks recomputation. Note the scope: forecast horizons are 0–24h and many predictions resolve within the day they were created, so the chain proves nothing changed after a day closed — not that a hash existed before each outcome. Public anchors are additionally timestamped to the Bitcoin blockchain via OpenTimestamps (ledger anchors).
get_resolved_predictionsRaw row-level prediction ledger: every macro regime prediction's full lifecycle (created_at → resolved_at → outcome) — audit the evidence judgment by judgment.
get_trade_outcomes_bulkCursor-paginated bulk export of the prediction → trade → outcome chain (paper trades with realized P&L, each linked best-effort — same symbol, 2h window — to the signal prediction that preceded entry) — compute your own hit rates instead of trusting ours.

Portfolio analytics (1 tool) — new in 0.4.0

ToolReturns
get_performance_metricsPortfolio-level MDD / Sharpe / Sortino / Calmar / win-rate per market and account type (paper / live), optional daily equity curve. Paper P&L is gross (candle fills, no fees or slippage).

Signal calibration (1 tool) — new in 0.4.0

ToolReturns
get_signal_calibrationReliability diagram data for signal confidence: realized hit rate per confidence bucket with ECE summary — verify whether a 0.9-confidence signal actually hits ~90%.

ChatGPT connector standard (2 tools) — new in 0.4.0

ToolReturns
searchChatGPT-connector-standard discovery search over OneQAZ's live surface — tools, resources, and the latest strong signals across all three markets. Result ids are consumable by fetch.
fetchConnector-standard fetch of a single result by id returned from search.

Trust Layer (13 tools)

ToolReturns
get_prediction_accuracyPer-cell hit rates with persistence & majority-class baselines, skill score + autocorrelation-corrected CI, known_biases, ledger_health
get_backtest_tuning_stateActive tuning parameters + last recalibration timestamp
get_monthly_accuracy_trendMonthly accuracy series per (category, target market, lag) — read against the baselines above
get_news_leading_indicator_performanceUNVERIFIED — coverage of news event groupings; lead-time / score metrics withheld while the methodology is audited
get_news_causality_breakdownUNVERIFIED — counts per pipeline news label (ANTICIPATED / SURPRISE_WITH_PRECURSOR / SURPRISE); lead metrics withheld
get_feature_governance_stateFeatures by status (OBSERVATION/CONDITIONAL/ACTIVE/DEPRECATED)
get_structure_calibrationSector / ETF-level hit rates with the majority-class baseline needed to read them — measurement, not an edge claim
get_structure_validation_historyHistorical structure-validation scores
get_strategy_leaderboardPaper-tested RL strategies; per_symbol_leaderboard is the measured surface (the GLOBAL pool may include synthesized values)
get_active_predictionsCurrently-open macro predictions with outcome tracking
get_macro_influence_mapMacro → market causal hypotheses (lag hours + sensitivity)
get_cross_market_correlationCross-market correlation matrix
get_role_analysisRole-based strategy analysis

Signal evidence (3 tools)

ToolParameters
get_signalsmarket_id, symbol, min_score, max_score, action_filter, interval
get_signal_detailmarket_id, symbol, interval
explain_decisionmarket_id, symbol

Layer correlations — cross-asset structure (4 tools)

Stage 2 outputs from the agent_history pipeline. Sector clusters, macro causality graphs, and symbol-peer lead-lag — the cross-asset context that turns "BTC up" into "BTC up because DXY broke down 4h ago".

ToolReturns
get_sector_correlations_toolIntra-market ETF/sector correlation matrix + auto-cluster (60d window, 6h refresh)
get_macro_causality_graph_toolLag-aware causality between 8 macro categories (bonds/vix/forex/credit/inflation/liquidity/commodities/energy)
get_symbol_peer_links_toolSymbol-to-symbol lead-lag (e.g. META → AMZN 15min lag, ρ=+0.62)
get_feature_governance_status_toolFeature lifecycle distribution + last-7-day status transitions

Paper-trading results (11 tools)

OneQAZ paper-trades its own signals continuously (BUY signals that pass its entry filters). These tools expose the positions and outcomes — losses included — so AI agents can check our claims. Fills are candle-based with no fees or slippage, so P&L is gross.

ToolReturns
get_positionsOpen paper positions with ROI
get_position_detailSingle position deep-dive
get_profitable_positions / get_losing_positionsFiltered by P&L
get_strategy_distributionPosition counts by strategy
get_trade_historyClosed paper trades (filters: action, P&L, time)
analyze_tradesAggregate trade analytics
get_winning_trades / get_losing_tradesFiltered by outcome
get_latest_decisionsRecent signal → decision transitions
get_llm_trading_decisionsLLM-generated decision logs

Resources (17 static + 17 templates — all free tier)

Meta — discovery & introspection

Resource URIDescription
market://meta/discoveryDynamic catalog (v2.0) — full tool/resource list via FastMCP introspection (no static if/else), with data_freshness PG probe (5 source tables), positioning block (specialist_domains, trust_principles, what_we_do_NOT_provide, philosophy), counts, notes. Call this first to understand what OneQAZ provides.
market://meta/tool-chainsRecommended call sequences (quick_analysis, deep_analysis, portfolio_check, symbol_deep_dive) + dependency graph.
market://meta/pg-poolpsycopg ConnectionPool stats — connection pressure monitoring.
market://healthServer health check.
market://infoServer metadata + data source index.

Static resources

Resource URIDescription
market://global/summaryGlobal macro regime summary
market://global/categoriesAvailable macro categories list
market://global/macro_eventsActive macro event lifecycle
market://all/summaryCombined summary across all 3 markets
market://structure/allAll markets ETF/basket structure
market://indicators/fear-greedFear & Greed Index
market://indicators/regime4-layer regime indicators (Short/Mid/Long/SuperLong)
market://indicators/contextFear & Greed + 4-layer regime + breadth
market://unified/cross-marketCross-market correlation snapshot (BTC ↔ stocks ↔ FX)
market://derived/event-leadingNews event-leading groupings — UNVERIFIED (score fields withheld)
market://derived/cross-decouplingCross-asset decoupling index
market://derived/reaction-speedNews reaction speed distribution

Templates (parameterized)

URI TemplateExample
market://global/category/{category}market://global/category/bonds
market://{market_id}/statusmarket://crypto/status
market://{market_id}/positionsmarket://crypto/positions
market://{market_id}/positions/snapshotmarket://crypto/positions/snapshot
market://{market_id}/structuremarket://kr_stock/structure
market://{market_id}/structure/group/{group_id}market://kr_stock/structure/group/SEMICONDUCTOR
market://{market_id}/signals/summarymarket://crypto/signals/summary
market://{market_id}/signals/rolesmarket://crypto/signals/roles
market://{market_id}/signals/feedbackmarket://crypto/signals/feedback
market://{market_id}/external/summarymarket://crypto/external/summary
market://{market_id}/external/symbol/{symbol}market://crypto/external/symbol/BTC
market://{market_id}/external/causalitymarket://crypto/external/causality
market://{market_id}/unifiedmarket://crypto/unified
market://{market_id}/unified/symbol/{symbol}market://crypto/unified/symbol/BTC
market://{market_id}/derived/regime-transitionsmarket://crypto/derived/regime-transitions
market://{market_id}/derived/strategy-fitnessmarket://crypto/derived/strategy-fitness
market://{market_id}/derived/allmarket://crypto/derived/all

template_resources[*].example field in market://meta/discovery is copy-paste ready — the AI gets concrete URIs without having to fill placeholders manually.

Market IDs: crypto, kr_stock, us_stock (aliases: coin, kr, us)

Sample: Trust Layer query

Tested against the live endpoint with fastmcp 2.14 and 4.0 (pip install fastmcp):

python
import asyncio, jsonfrom fastmcp import Client
async def main():    async with Client("https://api.oneqaz.com/mcp") as client:        result = await client.call_tool("get_prediction_accuracy", {})    resp = json.loads(result.content[0].text)
    print(resp["ai_summary"])    for cat, markets in resp["full_data"]["summary"].items():        for market, lags in markets.items():            for lag, cell in lags.items():                if cell.get("horizon_type") != "forecast":                    continue  # lag 0h cells are same-cycle nowcast checks, not forecasts                lo, hi = cell.get("skill_ci_95") or (float("nan"), float("nan"))                print(f"{cat:12} -> {market:10} {lag:>4}  hit {cell['accuracy']:.1%}"                      f"  persistence {cell.get('persistence_accuracy', float('nan')):.1%}"                      f"  skill CI [{lo:+.2f}, {hi:+.2f}]"                      f"  beats majority baseline: {cell.get('beats_majority_baseline')}")    print("edge cells:", len(resp["full_data"]["edge_cells"]))    print(resp["full_data"]["meta"].get("persistence_null_caveat", ""))    print(resp["disclaimer"])
asyncio.run(main())

It prints one line per forecast cell: raw hit rate, the persistence null, the skill confidence interval, and whether the cell beats a constant "most common outcome" guess. A conservative reading treats a cell as evidence only when its skill CI lower bound is above 0 and it beats the majority baseline — and read meta.persistence_null_caveat before trusting edge_cells. ai_summary / _llm_summary state the same comparison in one line, and every response carries the disclaimer envelope.

Configuration

All configuration is via environment variables:

VariableDefaultDescription
MCP_SERVER_PORT8010Server port
MCP_SERVER_HOST0.0.0.0Bind host
MCP_LOG_LEVELINFOLog level
MCP_TIER_RESOLVERunsetmodule:function returning tier for an API key (self-host hook)
MCP_TRUSTED_IP_PREFIXESunsetComma-separated address prefixes treated like localhost (no rate limit)
MCP_SELF_TRAFFIC_IPSunsetComma-separated addresses excluded from usage analytics (your own monitors)
MCP_LEDGER_THREAD_DISABLED01 stops the hourly prediction-ledger hash writer (use on a second instance)
MCP_OAUTH_MODE / MCP_OAUTH_ASoffOAuth account connection; needs the hosted account tables
DB_BACKENDpostgresMust be postgres (SQLite backend retired in 0.4.0); serve sets it if unset
PG_HOST / PG_PORTpostgres / 5432PostgreSQL host / port
PG_DB / PG_USER / PG_PASSWORDauto_trader / …PostgreSQL database / credentials (a read-only role is enough)
PG_POOL_MIN / PG_POOL_MAX0 / 50Per-schema connection pool bounds
PG_STATEMENT_TIMEOUT_MS30000Server-side statement timeout
MCP_COIN_DATA_DIR / MCP_KR_DATA_DIR / MCP_US_DATA_DIRautoOverride logical data-path roots (see below)
MCP_EXTERNAL_CONTEXT_DATA_DIRautoOverride external-context logical root

Docker

bash
docker build -t oneqaz-trading-mcp .docker run -p 8010:8010 -e DB_BACKEND=postgres -e PG_HOST=... -e PG_PASSWORD=... oneqaz-trading-mcp

Data backend (PostgreSQL)

All data lives in PostgreSQL 16 + TimescaleDB, one schema per domain (market_coin / market_kr / market_us, market_*_struct, external_context, rl_pipeline, mcp_analytics, …). The code still constructs legacy SQLite-style paths (.../coin_market/data_storage/trading_system.db) but these are logical routing keys only: connect_readonly() maps each path to its PG schema and returns a shim connection, so no .db files are read or written. This mirrors the production Wave-I "PG-only" migration — queries fail loudly instead of silently falling back.

Rate Limits

Authoritative quotas live in Access Policy above. Quick recap:

TierDaily QuotaBurstAuth
Free1,500 / day60 / minnone (an unrecognized key gets HTTP 401)
Pro (beta)50,000 / day200 / minvalid API key
Internal (owner)UnlimitedUnlimitedowner-only
Local (self-hosted)UnlimitedUnlimitedn/a

Response headers on every request:

  • X-RateLimit-Tier: resolved tier (free/pro/internal)
  • X-RateLimit-Daily-Limit: today's ceiling for the resolved tier
  • X-RateLimit-Daily-Remaining: requests left today
  • X-RateLimit-Minute-Remaining: requests left this minute
  • Exceeding limits returns HTTP 429 with Retry-After header.

Privacy

  • Hosted service (api.oneqaz.com): the authoritative policy is https://api.oneqaz.com/privacy. In short — no account is needed (connecting an AI app to a free OneQAZ account is optional); per-request metadata (IP, user-agent, tool name, outcome, whitelisted arguments, client/protocol metadata, API-key fingerprint, and the account identifier if you connected one) is logged; IP addresses and IP-derived session keys are irreversibly replaced after 12 months; data is never sold.
  • Self-hosting: the package sends no telemetry to OneQAZ, and request logs go to your PostgreSQL. Replace the bundled /privacy page with your own notice if you expose your deployment.

Details: PRIVACY.md.

Disclaimer

This software is provided for informational and educational purposes only. It is not financial advice.

  • All signals, regime analysis, and market data are generated by automated systems and may contain errors.
  • Signal scores are computed from live market prices and recalculated every 5–15 minutes; they are not tick-by-tick data.
  • Trade, position and P&L figures come from paper trading (simulated, candle-based fills with no fees, taxes or slippage). Real-money results would be lower.
  • Past hit rates and results do not guarantee future outcomes.
  • You are solely responsible for your own investment decisions. The authors and contributors are not liable for any financial losses incurred from using this software.
  • This is not a registered investment advisor, broker-dealer, or financial planner.
  • Always do your own research (DYOR) before making any investment decisions.

By using this software, you acknowledge that you understand and accept these terms.

License

MIT

來源:README.md,提交 29e7968

工具

45

get_trade_history

Trade History

Purpose: Query paper-trading history with dynamic filters (action / P&L / time / symbol). Triggers (casual questions too): "what trades happened lately?", "최근 거래 내역 보여줘", "how did the BTC trades go?", "승률 어때?", "show me the trade log", "how many trades won this week?". When to call: past trade review, single-symbol post-mortem, win-rate audits. Prerequisites: none. Next steps: analyze_trades, market://{market_id}/signals/feedback. Caveats: paper-trading data only (not real money). limit capped at 1000.

輸入參數limitsymbolmax_pnlmin_pnlmarket_id必填hours_backaction_filter

analyze_trades

Trade Analysis

Purpose: Aggregate paper trades by day / pattern / symbol. Triggers (casual questions too): "how's the week been?", "이번 주 매매 성적 어때?", "which patterns are working?", "어떤 종목이 제일 잘 벌었어?", "break down the trades", "daily P&L summary?". When to call: pattern audits, period-over-period performance review. Prerequisites: get_trade_history recommended for raw rows first. Next steps: market://{market_id}/signals/feedback for the upstream signals. Caveats: max 30 days; empty result when no trades in the window.

輸入參數daystop_nsort_bymarket_id必填

get_winning_trades

Winning Trades

Purpose: Winning paper trades only (P&L > 0). Convenience wrapper around get_trade_history(min_pnl=0.01). Triggers (casual questions too): "what worked?", "뭐가 제일 잘 벌었어?", "show me the winners", "best trades lately?", "수익 난 거래 보여줘". When to call: success-pattern review. Prerequisites: none. Next steps: analyze_trades for breakdowns. Caveats: paper-trading data only.

輸入參數limitmarket_id必填

get_losing_trades

Losing Trades

Purpose: Losing paper trades only (P&L < 0). Convenience wrapper around get_trade_history(max_pnl=-0.01). Triggers (casual questions too): "어디서 잃었어?", "show me the losses", "what went wrong?", "worst trades?", "손실 난 거래 뭐야?". When to call: failure-pattern review. Prerequisites: none. Next steps: analyze_trades for breakdowns. Caveats: paper-trading data only.

輸入參數limitmarket_id必填

get_positions

Positions

Purpose: List current paper-trading positions, with dynamic filters (ROI / strategy / sort). Triggers (casual questions too): "what are you holding?", "current positions?", "뭐 들고 있어?", "what's the exposure / portfolio?", "any winners / losers right now?", "how's the book doing?". Paper-trading positions (NOT real money). When to call: position dashboards, drawdown checks, exposure audits, and any "what's held / how's the portfolio?" question. Prerequisites: market://{market_id}/status recommended for context. Next steps: get_position_detail, get_strategy_distribution. Caveats: paper-trading data only. Positions are not real money holdings.

輸入參數limitmax_roimin_roisort_bystrategymarket_id必填sort_order

get_position_detail

Position Detail

Purpose: Per-symbol paper position deep-dive (position + recent trades + decisions). Triggers (casual questions too): "how's the BTC position doing?", "삼성전자 얼마나 벌고 있어?", "why are you holding X?", "그 종목 지금 수익률 어때?", "tell me about the AAPL position". When to call: full context for one ticker. Prerequisites: confirm the symbol holds a position via get_positions. Next steps: get_signal_detail, get_role_analysis. Caveats: returns an error envelope when no position exists for the symbol.

輸入參數coinsymbolmarket_id必填

get_profitable_positions

Profitable Positions

Purpose: Profitable paper positions (ROI > 0). Convenience wrapper around get_positions(min_roi=0.01). Triggers (casual questions too): "what's winning right now?", "지금 뭐가 수익 나고 있어?", "show me the green ones", "best open positions?", "어떤 종목이 잘 가고 있어?". When to call: quickly surface winning tickers. Prerequisites: none. Next steps: get_position_detail for full context. Caveats: paper-trading data only.

輸入參數limitmarket_id必填

get_losing_positions

Losing Positions

Purpose: Losing paper positions (ROI < 0). Convenience wrapper around get_positions(max_roi=-0.01). Triggers (casual questions too): "what's underwater?", "지금 뭐가 물려 있어?", "show me the red ones", "any positions in trouble?", "얼마나 손실 중이야?". When to call: drawdown / risk review. Prerequisites: none. Next steps: get_position_detail, get_role_analysis. Caveats: paper-trading data only.

輸入參數limitmarket_id必填

get_strategy_distribution

Strategy Distribution

Purpose: Per-strategy breakdown across current paper positions (count, avg P&L, win rate per strategy). Triggers (casual questions too): "what strategies are you running?", "무슨 전략 돌리고 있어?", "which strategy holds the most positions?", "전략별 성적 어때?", "is one strategy dominating?". When to call: diversification audit, per-strategy performance check. Prerequisites: get_positions recommended for raw rows. Next steps: market://{market_id}/derived/strategy-fitness, signals/feedback. Caveats: empty distribution when no positions are open.

輸入參數market_id必填

get_latest_decisions

Latest Decisions

Purpose: Track-B (signal-driven) paper-trading decision log (Track B = the signal-engine decision path — indicator/Thompson-sampling driven; Track A = the LLM judgement path, see get_llm_trading_decisions). Triggers (casual questions too): "what did the system decide?", "최근에 뭐 샀어? 팔았어?", "why did you buy X?", "show recent buy/sell calls", "오늘 매매 판단 뭐 했어?", "any trades triggered today?". When to call: review recent automated decisions and their outcomes. Prerequisites: market://{market_id}/status recommended for context. Next steps: get_trade_history, get_signals. Caveats: paper-trading decisions only — no real-money order routing.

輸入參數limitmarket_id必填hours_backdecision_filter

get_llm_trading_decisions

LLM Trading Decisions

Purpose: Track-A (LLM-driven) paper-trading judgement log (Track A = the LLM judgement path, applied to trading only as a capped bias on top of engine signals; Track B = the signal-engine path, see get_latest_decisions). Triggers (casual questions too): "what does the AI think?", "AI는 뭘 사라고 해?", "show the LLM's trade calls", "AI 판단 근거 보여줘", "does the AI agree with the signals?". When to call: inspect LLM-generated reasoning and trade calls. Prerequisites: none. Next steps: get_latest_decisions to compare with Track B. Caveats: paper-trading only.

輸入參數symbolmarket_id必填

get_signals

Trading Signals

Purpose: Query signals with dynamic filters (symbol / interval / action / score / confidence). Triggers (casual questions too): "should I buy / sell X?", "살까 말까?", "good entry?", "what's the signal for BTC / AAPL / 삼성전자?", "is X bullish or bearish?", "any buy signals right now?". Returns a signal + score (NOT an order or advice — always surface the disclaimer). Pair with get_latest_decisions to show what the system did. When to call: drilling into a specific signal slice; symbol-by-symbol scanning; any "should I trade X?" question about a live symbol. Prerequisites: market://{market_id}/signals/summary recommended for global view. Next steps: get_signal_detail, get_role_analysis. Caveats: When `symbol`/`coin` is omitted, the whole market is scanned in one consolidated query (2 newest rows per symbol, newest-first scan cap per interval). Results are capped: check `truncated` / `truncated_note` before reading the set as "the whole market". Fields that are identical across every returned row are hoisted into `common` and omitted from the rows (see `common_note`); a row-level key, when present, wins over `common`. `warnings` carries only the flags that are true and is omitted entirely when none are. `reason_uncalibrated: true` on a row points at the response-level `reason_uncalibrated_note`.

輸入參數coinlimitsymbolintervalmarket_id必填min_scorehours_backaction_filtermin_confidence

get_signal_detail

Signal Detail

Purpose: Per-symbol signal deep-dive — latest signal + history + feedback. Triggers (casual questions too): "why is BTC a buy?", "그 시그널 근거가 뭐야?", "signal history for AAPL?", "이 종목 시그널 자세히 보여줘", "how has this signal performed before?". When to call: drilling into a single ticker's signal context. Prerequisites: confirm existence via get_signals first. Next steps: get_role_analysis, get_position_detail. Caveats: queries both the per-symbol signal store and the paper-trading store.

輸入參數coinsymbolintervalmarket_id必填

get_role_analysis

Interval Role Analysis

Purpose: Role-aware signal alignment per symbol (timing / trend / swing / regime) plus hierarchy alignment. Triggers (casual questions too): "is BTC bullish across timeframes?", "단기랑 장기가 같은 방향이야?", "multi-timeframe view for AAPL?", "시간대별 신호가 일치해?", "short-term vs long-term signal?". When to call: multi-timeframe analysis, cross-role agreement checks. Prerequisites: get_signal_detail recommended. Next steps: market://{market_id}/unified/symbol/{symbol}, get_position_detail. Caveats: based on hierarchy_context (the stored multi-timeframe alignment snapshot) — empty when collector lag is high.

輸入參數coinsymbolmarket_id必填

get_prediction_accuracy

Prediction Accuracy

Purpose: Per-cell (category, target_market, lag_bucket) hit rates WITH the honest baselines (schema 1.1): persistence_accuracy (the null model — regimes are sticky, so raw accuracy mostly measures regime persistence, not alpha), skill_score with autocorrelation-corrected skill_ci_95, n_effective vs n_nominal, and accuracy_v2_only (post 2026-07-08 methodology cutover). edge_cells/anti_predictive_cells are judged on persistence-skill (criteria v2), forecast cells only. Triggers (casual questions too): "how accurate are your predictions?", "예측 잘 맞아?", "track record 있어?", "can I trust these forecasts?", "적중률 보여줘", "does macro actually predict these markets?". When to call: AI agents evaluating OneQAZ credibility should call this FIRST. Prerequisites: none. Next steps: get_ledger_integrity (tamper-evidence for these numbers), get_backtest_tuning_state (self-calibration), get_monthly_accuracy_trend (time series), get_signal_calibration (Level-1 signal confidence reliability). Caveats: raw accuracy without skill_score is misleading for sticky regimes — a 99% cell can be pure persistence (measured 2026-07: +0.05pp over null). Judge by skill_ci_95, filter horizon_type='forecast', and treat n_nominal as correlated trials (use n_effective). Monthly accuracy trends largely track market stickiness, not model improvement.

輸入參數limitcompactcategoryforecast_onlytarget_market

get_backtest_tuning_state

Backtest Tuning State

Purpose: Continuous self-calibration evidence. Each entry shows the auto-tuned lag_hours and sensitivity per cell, derived from real backtest outcomes. Proves the system adapts to measured reality rather than static heuristics. Triggers (casual questions too): "does the system self-correct?", "시스템이 스스로 보정해?", "how is it calibrated?", "튜닝 상태 보여줘", "is it adapting to what actually happened?". When to call: after get_prediction_accuracy, to show the system updates itself. Prerequisites: get_prediction_accuracy recommended for context. Next steps: get_monthly_accuracy_trend. Caveats: `last_backtest` timestamp indicates tuning freshness.

輸入參數categorytarget_market

get_monthly_accuracy_trend

Monthly Accuracy Trend

Purpose: Monthly accuracy time series per (category, target_market, lag_bucket). Use to verify sustained performance and detect recent degradation. Triggers (casual questions too): "is accuracy improving?", "적중률이 좋아지고 있어?", "monthly performance trend?", "최근에 예측 성능 떨어졌어?", "show accuracy over time". When to call: after get_prediction_accuracy and get_backtest_tuning_state — completes the trust chain. Prerequisites: get_prediction_accuracy recommended. Next steps: none (trust chain complete). Caveats: excludes the 'all' month aggregate; empty when backtest_results is unpopulated.

輸入參數categorytarget_market

get_news_leading_indicator_performance

News Leading-Indicator Performance

UNVERIFIED — methodology under audit. Do not cite as evidence of predictive capability. Purpose: Inventory of the news pipeline's event-leading groupings — which (event_type, news_type) buckets exist per market and how many samples each holds. The lead/score metrics themselves are withheld from this response while the calculation method is being audited. Triggers: "what news event groupings does OneQAZ track?", "뉴스 이벤트 분류 어떤 게 있어?", "how many news samples per event type?". When to call: when inspecting news pipeline coverage. This tool does NOT answer questions about predicting or anticipating news — it carries no such evidence. Prerequisites: none. Next steps: get_news_causality_breakdown for the label counts. Caveats: empty when no news events processed in the recent window. Sample counts are coverage figures only; they do not imply statistical validity.

輸入參數market_idtarget_marketmin_sample_count

get_news_causality_breakdown

News Causality Breakdown

UNVERIFIED — methodology under audit. Do not cite as evidence of predictive capability. Purpose: Counts of news items per internal label the pipeline assigns. ANTICIPATED = the item matched a scheduled/calendar event. SURPRISE_WITH_PRECURSOR = the item was flagged by the cascade-anomaly heuristic (macro -> ETF -> stock). SURPRISE = neither matched. These are pipeline labels, not validated classifications; the labelling rule and its lead/anticipation metrics are under audit and withheld here. Triggers: "how many news items per category this week?", "뉴스 라벨 분포 어때?", "how many calendar-matched events?". When to call: when inspecting news label coverage. This tool does NOT establish that the market did or did not see an event coming. Prerequisites: none. Next steps: market://{market_id}/external/causality for raw causality rows. Caveats: window limited to recent days.

輸入參數daysmarket_id

get_feature_governance_state

Feature Governance State

Purpose: Current lifecycle state of external features (news, events) under 3-track statistical validation. Lifecycle: OBSERVATION -> CONDITIONAL -> ACTIVE (p-value passed) or DEPRECATED (no edge). Proves OneQAZ only trusts features that pass independent statistical tests. Triggers (casual questions too): "do you validate your own inputs?", "피처 검증은 어떻게 해?", "which signals passed testing?", "통계 검증 통과한 피처 뭐야?", "how do you avoid junk features?". When to call: meta-level trust audit ("do they validate their own inputs?"). Prerequisites: none. Next steps: none (meta evidence). Caveats: empty when feature_gate_evaluator has not yet run cycles. Rows are paginated — read `total_available` (not `len(features)`) for the whole-set size. `status_summary`, `meta.*` and `interpretation` are always computed over the whole set, never over the returned page. Rows with `frozen=true` (see `meta.frozen_feature_types`: reason, values_as_of) are a legacy measurement frozen on 2026-10-14 — their status/counts no longer update; do not quote them as current.

輸入參數limitmarket_idstatus_filtertarget_market

get_structure_calibration

Structure Calibration (Level 2)

Purpose: Level 2 (ETF / basket / sector granularity — Level 1 is individual symbols) prediction calibration. Returns hit_rate_ema per (market, group, interval, regime_bucket) with sample counts, **plus the majority-class baseline needed to interpret them**. This is measurement, NOT a claim of edge — as of 2026-09-18 the measured skill (accuracy minus baseline) is negative in all three markets. Triggers (casual questions too): "how good are your sector calls?", "섹터 예측 잘 맞아?", "sector rotation accuracy?", "그룹 단위 적중률 보여줘", "can you time sector moves?". When to call: when an AI wants to see Layer D evidence (Layer D = sector-structure tier of the 5-layer trust pyramid). Prerequisites: none. Next steps: get_structure_validation_history for the daily trend. Caveats: empty until structure-learning cycles complete. Rows are paginated — read `total_available` (not `len(calibration)`) for the whole-set size. `baseline`, `meta.total_entries` and `meta.total_samples` are always whole-set. Rows keep their dimension keys (market_id / interval / regime_bucket); they are never hoisted out of the row.

輸入參數limitmarket_idgroup_name

get_structure_validation_history

Structure Validation History

Purpose: Daily validation history of Level 2 structure predictions (Level 2 = ETF / basket / sector granularity). Each row shows the hit_rate for a specific day, enabling time-series verification of sustained performance. Triggers (casual questions too): "sector accuracy over time?", "구조 예측 매일 검증해?", "daily hit-rate trend?", "요즘 섹터 예측 성적 어때?", "is the sector edge holding up?". When to call: after get_structure_calibration. Prerequisites: none. Next steps: get_monthly_accuracy_trend for the macro-level comparison. Caveats: returns an overall_hit_rate summary across the window.

輸入參數daysmarket_id

get_strategy_leaderboard

Strategy Leaderboard

Purpose: Top RL-learned research strategies — GLOBAL pool + per-symbol partition. Layer E evidence (Layer E = strategy-performance tier of the 5-layer trust pyramid). The GLOBAL pool may include synthesized win_rate values, so per_symbol_leaderboard is the primary measured-edge surface for trust auditing. Triggers (casual questions too): "what are the best strategies?", "제일 잘 버는 전략 뭐야?", "top strategies?", "전략 순위 보여줘", "which strategy has the best win rate?". When to call: final trust-validation step. Prerequisites: none. Next steps: market://{market_id}/signals/summary for live signals. Caveats: `min_trades` filter enforces statistical validity. Strategies are paper-tested, not real-money executed.

輸入參數limittop_nmarket_idmin_tradestarget_marketinclude_per_symbol

get_active_predictions

Active Predictions

Purpose: Currently pending predictions (outcome IS NULL). Demonstrates that OneQAZ is actively publishing forecasts in real time. Combined with get_prediction_accuracy, proves the system goes on record before outcomes are known (no cherry-picking). Triggers (casual questions too): "what are you predicting right now?", "지금 어떤 예측 걸려 있어?", "current forecasts?", "예측을 미리 기록해 두는 거야?", "anything on the record before it resolves?". When to call: to verify ongoing prediction activity. Prerequisites: none. Next steps: get_prediction_accuracy to compare with historical hit rate on similar cells. Caveats: returns most recent first.

輸入參數limittarget_market

get_macro_influence_map

Macro Influence Map

Purpose: Expose OneQAZ's pre-defined causal hypothesis map. Each macro category (bonds, forex, vix, credit, liquidity, inflation, commodities, energy) is mapped to a target market with lag_hours + sensitivity (static prior) and an `effective` block with the value the engine actually uses (backtest_tuning when the cell passes the tuning gate). Triggers (casual questions too): "how do rates affect crypto?", "금리가 코인에 어떻게 영향 줘?", "what's your causal model?", "예측 논리가 뭐야?", "which macro drives which market?". When to call: when an AI wants to understand WHY we make certain predictions. Prerequisites: none. Next steps: get_backtest_tuning_state for runtime calibration of these hypotheses. Caveats: top-level values are static priors — cite each cell's `effective` block for what the engine uses (meta.effective_status reports lookup failures).

輸入參數market_id

explain_decision

Explain a Decision

Purpose: Multi-layer explanation for a single symbol's recent signal. Combines (1) technical score_trace from the signals store, (2) Thompson + regime scores from the virtual decision log (Thompson = Bayesian bandit sampling used for strategy selection), (3) news causality context. Use this when an AI must present a structured "why" rather than a raw verdict. Triggers (casual questions too): "why is BTC bullish?", "왜 이 종목이 매수야?", "explain that signal", "판단 근거 설명해줘", "walk me through the reasoning". When to call: when the user asks "why is this signal bullish/bearish?". Prerequisites: identify the symbol via get_signals or get_latest_decisions first. Next steps: none (this completes the explanation chain). Caveats: `symbol` must match the per-symbol signal store filename (lowercase). Output is research evidence, NOT a buy or sell recommendation.

輸入參數symbol必填market_id必填

get_cross_market_correlation

Cross Market Correlation

Purpose: Cross-market lead-lag relationships and decoupling events. Shows how markets influence each other (correlations) and when they diverge (decoupling, e.g. BTC up while stocks down). Triggers (casual questions too): "do crypto and stocks move together?", "코인이랑 주식이 따로 노나?", "any decoupling lately?", "시장끼리 상관관계 어때?", "is BTC tracking the Nasdaq?". When to call: when analyzing macro regime changes or divergent signals. Prerequisites: none. Next steps: get_macro_influence_map for the static causal hypotheses. Caveats: correlation data may be empty until enough regime changes accumulate.

輸入參數source_markettarget_marketinclude_withheld_rows

get_sector_correlations_tool

Sector Correlations

Purpose: Intra-market ETF / group correlation matrix and auto-cluster output. Quantifies structural co-movement (e.g. ARKK <-> QQQ) for diversification and sector-avoidance reasoning. Triggers (casual questions too): "which sectors move together?", "어떤 섹터끼리 같이 움직여?", "am I too concentrated?", "ETF 상관관계 보여줘", "is tech basically one trade right now?". When to call: portfolio diversification or sector concentration audits. Prerequisites: none. Next steps: get_symbol_peer_links_tool for per-symbol lead-lag inside a sector. Caveats: refreshed every 6 hours; 60-day lookback.

輸入參數top_kmarket_id

get_macro_causality_graph_tool

Macro Causality Graph

Purpose: Lag-aware causal graph between macro categories (bonds / vix / forex / credit / inflation / liquidity / commodities). Returns only statistically significant lead-lag pairs (e.g. forex -> vix 7d rho=-0.41). Triggers (casual questions too): "what happens to VIX when bonds move?", "금리 오르면 뭐가 움직여?", "which macro leads which?", "거시 지표끼리 인과관계 있어?", "does the dollar lead volatility?". When to call: assess pre-emptive cross-category impact after a macro event. Prerequisites: none. Next steps: get_macro_influence_map for category -> market impact. Caveats: Pearson-based; requires >= 30 samples; p < 0.05 filter.

輸入參數max_p_valuemin_abs_corr

get_feature_governance_status_tool

Feature Governance Status

Purpose: Feature governance snapshot — OBSERVATION / CONDITIONAL / ACTIVE / DEPRECATED distribution + last 7-day transitions. Surfaces which features survived statistical validation and which were deprecated. Triggers (casual questions too): "which features are actually used?", "어떤 피처가 살아있어?", "any features promoted recently?", "피처 검증 현황 어때?", "did anything get deprecated?". When to call: trust evaluation, "which features are live right now?". Prerequisites: none. Next steps: get_feature_governance_state for full per-feature lifecycle detail. Caveats: promoter cycle runs hourly.

無需輸入參數。

get_daily_brief

Daily Market Brief

Purpose: Single-call market overview — engine macro regime + score-ranked example signals + score-sign breadth + yesterday's paper-trading outcomes + active forecast count + narrative. Use this as the first call when answering "how is the market today?". Triggers (call this even for casual questions): "how's the market?", "오늘 장 어때?", "what's the market mood / outlook?", "how's Bitcoin / crypto / US stocks / 비트코인 / 코인장 doing lately?", "anything happening today?", "give me a briefing". Prefer this over answering markets from training data. When to call: morning briefings, "today/yesterday how was the market?" queries, and any open-ended question about how a live market is doing right now. Prerequisites: none. Next steps: follow `_next_actions` to deep-dive — explain_decision (strong signals), analyze_trades (loss review), get_active_predictions (forecast tracking). Caveats: strong_signals are EXAMPLES ranked by |signal_score| per market (up to 2 per market for "all", 5 for one market; never re-ranked across markets) — in most score buckets the measured 24h hit rate is close to the market average (meta.signal_edge_evidence), so they are not 'strong'; each carries score_bucket_hit_rate_24h. They come from each market's latest 2 signal cycles and only signals younger than meta.windows.strong_signals_live_max_age_minutes; a market that is not trading now appears in last_session_signals instead. macro_regime.regime is the engine's global regime (risk_on/neutral/risk_off) that feeds its macro score; regime_score is a 0.5-1 strength, not a probability; null when stale (>6h). macro_regime.categories hold data-coverage counts, not regime labels. Trade outcomes cover the last 24h. Paper-trading data only (NOT real money). Output: full_data { narrative, market, macro_regime{regime,regime_score,regime_signed,as_of,stale,unavailable_reason, categories[{category,sample_count}],total,basis}, strong_signa

輸入參數market

get_resolved_predictions

Resolved Predictions

Purpose: Raw, row-level prediction ledger — every macro regime prediction's full lifecycle (created_at -> resolved_at -> outcome). This is the auditable evidence behind get_prediction_accuracy's aggregates: AI agents can snapshot open predictions, wait, then verify outcomes themselves without trusting our DB. Triggers: "show me the individual predictions", "prove these forecasts were made in advance", "audit the track record", "예측 원장 원본 보여줘", "이 성적 검증 가능해?". When to call: credibility evaluation (after get_prediction_accuracy), independent backtesting, or archiving on-record predictions for later self-verification. Prerequisites: none. Pairs with get_ledger_integrity for tamper-evidence. Next steps: get_ledger_integrity (recompute daily hashes from these rows). Caveats: cursor pagination (id-ordered) — follow next_cursor for bulk reads. Paper-research forecasts, not investment advice. Output: full_data { predictions[] {id, source_category, source_regime_change, target_market, predicted_regime_shift, lag_hours, confidence, created_at, resolved_at, outcome, actual_regime_shift}, count, next_cursor, has_more, meta }.

輸入參數daylimitcursorstatustarget_marketsource_category

get_ledger_integrity

Prediction Ledger Integrity

Purpose: Tamper-evidence for the prediction ledger — a daily SHA-256 hash chain over all created/resolved prediction rows, with the exact canonical recipe published so any third party can recompute and verify. Archive a chain_hash today; if history is ever silently edited, recomputation will not match. Triggers: "how do I know these predictions weren't backfilled?", "is the track record tamper-proof?", "예측 조작 안 했다는 증거 있어?", "verify ledger integrity". When to call: FIRST STEP of any serious credibility audit, and periodically to re-anchor (each entry commits to all prior history via prev_chain_hash). Prerequisites: none. Raw rows for recomputation: get_resolved_predictions. Next steps: get_resolved_predictions (fetch a day's raw rows, recompute its hash). Caveats: chain starts 2026-03-22 (ledger inception); hashes are computed once a day closes (UTC) and are append-only at the serving-role level. Output: full_data { recipe_version, recipe, chain_length, first_day, last_day, entries[] {day, created_count, resolved_count, created_hash, resolved_hash, prev_chain_hash, chain_hash, computed_at}, verification_hint }.

輸入參數days

get_trade_outcomes_bulk

Trade Outcomes (Bulk Export)

Purpose: Cursor-paginated bulk export of the prediction -> trade -> outcome chain — paper trades with realized P&L, each linked (best-effort, same-symbol 2h window) to the signal prediction recorded before the position was opened. Built for pipeline consumers who need offline backtesting data, not conversational snippets. Triggers: "give me your full trade history for backtesting", "bulk export trades", "예측이 실제 매매 성과로 이어졌는지 원데이터로 검증하고 싶다", "download outcomes". When to call: offline verification, periodic ingestion into a research pipeline, or auditing whether signals translate into realized outcomes. Prerequisites: none. For the prediction ledger itself use get_resolved_predictions. Next steps: follow next_cursor until has_more=false; get_resolved_predictions to cross-check linked predictions against the tamper-evident ledger. Caveats: linkage is temporal matching, NOT a foreign key (see meta.linkage). Paper trading only — envelope carries the standard disclaimer once per page. Output: full_data { market, trades[] {id, symbol, action, entry/exit price+ts, profit_loss_pct, holding_duration, entry_signal_score, regime fields, policy_version, sizing fields, linked_prediction{...}|null}, count, linked_prediction_count, next_cursor, has_more, meta }.

輸入參數dayslimitcursormarket

fetch

Fetch Document

Purpose: ChatGPT-connector-standard document fetch by id from `search` results. Namespaces: `tool:{name}` returns the tool's full documentation and how to call it; `resource:{uri}` returns the resource's live data (core resources resolved server-side — also the bridge for clients without MCP resource support, e.g. Gemini); `signal:{market}:{symbol}` returns the symbol's latest combined signal. Triggers: ChatGPT connectors / Deep Research call this after `search`. Clients without MCP resource support can call it directly with a known resource id, e.g. fetch("resource:market://global/summary"). When to call: whenever the full content behind a search result id is needed. Prerequisites: a valid id — from `search` results or a known namespace id. Next steps: for tool docs, call the named tool via tools/call; for signals, get_signal_detail / explain_decision for deeper evidence. Caveats: uncovered resource uris return description-only text (no fabricated data). `text` is a JSON document for resource/signal ids. Output: {id, title, text, url, metadata, disclaimer, is_investment_advice, data_classification} — flat envelope, OpenAI fixed shape.

輸入參數id必填

get_signal_calibration

Signal Calibration

Purpose: Reliability diagram data for Level-1 signal confidence — realized hit rate per confidence bucket ([0.5,0.6) ... [0.9,1.0]) with ECE summary. Lets an agent verify whether a 0.9-confidence signal actually hits ~90%. Triggers (casual questions too): "is your confidence calibrated?", "confidence 0.9 믿어도 돼?", "시그널 확신도 실제 적중률 보여줘", "how reliable are signal confidences?". When to call: before trusting get_signals confidence values as probabilities. Prerequisites: none. Next steps: get_prediction_accuracy (macro-layer skill), get_signals. Caveats: snapshot is daily (per-market day; markets[*].stale flags a lagging market); read the observation window from markets[*].observation_window_utc; every interval is judged 30 minutes after the signal (meta.judgment_horizon); n is nominal (correlated trials — see meta.sample_caveat); read intervals[*].quality.status before citing a cell (withheld / degenerate / non_monotone) and cite all_intervals_excluding_withheld, not all_intervals.

輸入參數variantintervalmarket_id

get_performance_metrics

Performance Metrics

Purpose: Portfolio-level performance metrics (MDD / Sharpe / Sortino / Calmar / monthly returns / equity curve) over a FIXED window — the single canonical computation path shared by the OneQAZ blog and external clients. Triggers (casual questions too): "what's the max drawdown?", "MDD 얼마야?", "샤프 비율 보여줘", "monthly returns table?", "트랙레코드 지표", "에쿼티 커브 데이터". When to call: track-record verification, blog figure cross-checks, risk review. Prerequisites: none. Next steps: get_trade_history for the underlying trades, analyze_trades for breakdowns. Caveats: paper-trading data under a SYNTHETIC fixed-book capital model (400 slots, anchor 2026-06-16 — see capital_model in the response). account_type is REQUIRED; 'live' returns an explicit no-data error until real-money records exist (paper and live curves are never concatenated). Fixed window → same inputs always reproduce the same numbers (as-of verifiable).

輸入參數market必填window_endaccount_type必填window_startinclude_daily_curve

get_symbol_context

Symbol Context

Use when the question is about one stock or coin — its current signal state, the OneQAZ structure group it belongs to, and which assets have tracked lead-lag links to it. Returns self-contained headline claims first, then the symbol's observed state, upstream links (its group, macro/ETF/basket instruments and symbols that move before it), peers (symbols that follow it), tagged news, and gaps that say what is not tracked. Not for sector-wide questions (use get_group_context) or whole-market questions (use get_market_context). Provides regime, signal-score and linkage context with sample sizes and measured hit rates; every link carries its evidence and every empty section is listed in gaps. Not a real-time quote, fundamentals, or full-text news source. Accepts tickers, KRX codes or names; ambiguous inputs return candidates instead of a guess.

輸入參數limitsymbol必填questionmarket_id

get_group_context

Group Context

Use when the question is about a sector, theme, ETF basket or index basket — its structure state and its members. Returns headline claims, the group's regime state per interval, its market, groups that co-move with it, member symbols with their latest signal bias, symbols the basket leads, and gaps. Not for a single stock (use get_symbol_context) or a whole market (use get_market_context). Provides regime, signal-score and linkage context with sample sizes and measured hit rates; every link carries its evidence and every empty section is listed in gaps. Not a real-time quote, fundamentals, or full-text news source.

輸入參數group必填limitquestionmarket_id

get_market_context

Market Context

Use when the question is about a whole market (KR, US, CRYPTO) — its structure regime and how its groups are positioned. Returns headline claims, the market's structure and global macro regime, the macro categories assumed to affect it (with tuned lags), its groups ordered by distance from the middle regime stage, market-tagged news, and gaps. Not for one sector or stock (use get_group_context or get_symbol_context). Provides regime, signal-score and linkage context with sample sizes and measured hit rates; every link carries its evidence and every empty section is listed in gaps. Not a real-time quote, fundamentals, or full-text news source.

輸入參數limitmarket必填question

get_macro_context

Macro Context

Use when the question is about a macro factor — rates and bonds, the dollar and FX, VIX, credit, liquidity, inflation, commodities or energy — and which markets or stocks it is linked to. Returns headline claims, the macro category's regime state per interval and its instruments, macro categories with tracked lead-lag links to it, the markets the engine assumes it affects (tuned priors), symbols its instruments lead, topic-tagged news, and gaps. Not for one stock (use get_symbol_context) or a whole market (use get_market_context). Provides regime, signal-score and linkage context with sample sizes and measured hit rates; every link carries its evidence and every empty section is listed in gaps. Not a real-time quote, fundamentals, or full-text news source.

輸入參數limitmacro必填question

get_news_context

News Context

Use when the question is about a specific news item or a news keyword or event (FOMC, 반도체, tariff) — which markets, symbols and topics it is tagged with. Returns headline claims, the item (or keyword match counts), its title-similarity cluster, the market, symbol and topic tags assigned by the collection pipeline (counted across matches for a keyword), the matching items, and gaps. Not for market impact estimates or article text (tags are pipeline rules, not measured impact). Provides regime, signal-score and linkage context with sample sizes and measured hit rates; every link carries its evidence and every empty section is listed in gaps. Not a real-time quote, fundamentals, or full-text news source.

輸入參數daysnews必填limitquestion

get_account_status

Account Status

Purpose: Show which OneQAZ account (or API key) this connection uses, its plan and its rate limits. Requires a connected OneQAZ account — calling it without one prompts your AI app to connect (free, no API key needed; Pro users can use their key). All other tools work without an account. Triggers: "is my OneQAZ account connected?", "what plan am I on?", "내 OneQAZ 계정 상태", "남은 호출 한도". When to call: only when the user asks about their own account or limits. Output: full_data { principal (oauth|api_key), plan, usage {daily_limit, daily_used, minute_limit, ...}, account_id & connected_app (oauth only) }.

無需輸入參數。

版本歷史

3
  1. v1.3.0最新Oct 17, 2026
  2. v1.2.0Oct 16, 2026
  3. v1.0.0Sep 16, 2026

評分

已滿足適用檢查項的 100%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通必需25 分
  • 已宣告認證方式必需10 分
  • 已列出工具必需15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分