LuxAlgo MCP

io.github.LuxAlgo由 GitHub 账号 LuxAlgo 发布v2.1.0更新于 Oct 26, 2026

LuxAlgo for AI agents: the Library, prop firms, Market Trackers, Edge Stats, and your Trade Journal

发布方自己的服务:Agent Commons

已验证Streamable HTTP可网页运行金融知识与记忆数据与分析

概览

AI 生成的概览

LuxAlgo MCP 为助手提供交易百科、自营交易公司目录与模拟器、美国公开记录市场数据、盘面统计,以及需登录的交易日志。

可以做什么
  • 搜索、阅读和浏览交易概念、指标家族与指标详情,并获取 Pine Script 源码
  • 搜索自营交易公司、其资金账户挑战、规则集与优惠活动,并对比不同公司
  • 用交易者统计或真实 R 倍数交易序列运行蒙特卡洛挑战模拟,扫描最优风险,并按通过门槛筛选策略
  • 按股票代码、文本或日期浏览和查询美国公开记录数据集(国会交易、内部人申报、13F、游说、合同、专利等)
  • 读取预计算的盘面统计,附样本量与置信区间
  • 读取并写入已登录用户的交易日志:仪表盘指标、盈亏日历、分组分析、交易、成交、标签与日记
适用场景
适合用户询问交易概念或指标、评估自营交易公司挑战及其通过概率、需要公开记录市场数据,或希望助手读取并标注其 LuxAlgo 交易日志的场景。
运行要求
可通过 mcp.luxalgo.com 的 streamable HTTP 远程端点使用,或用 Node.js 通过 npx 在本地运行 npm 包 @luxalgo/mcp。公开工具无需密钥。账户与日志工具需通过 OAuth 2.1 登录 LuxAlgo 账户。券商工具仅在本地 stdio 版本中提供,读取各券商的凭据环境变量,例如 BROKERS_ALPACA_API_KEY。
安装前请注意
日志工具会写入用户数据:记录交易、整体替换标签与错误清单、新增或修改笔记,并以登录用户身份执行。券商凭据以环境变量提供(如 BROKERS_ALPACA_API_KEY、BROKERS_KRAKEN_API_SECRET、BROKERS_HYPERLIQUID_WALLET_ADDRESS),应使用只读权限。自营公司优惠含推广链接与优惠码。模拟与统计基于历史数据或假设,并非预测。

安装

在 SourceWeft 中

  1. 打开 控制台中的 LuxAlgo MCP,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Web executable,通过 Streamable HTTP。 远程服务在工作区中配置后即可从网页运行时运行。

交给智能体安装

把这段提示词粘贴到 Claude Code、Codex、Cursor 等智能体,或 SourceWeft 对话中。智能体会读取该服务器的安装指南,先向你展示发布者、端点和登录方式,经你同意后再把它添加到你的客户端。密钥不会写进任何命令。

阅读 https://sourceweft.com/mcp/io.github.LuxAlgo%2Fluxalgo-mcp-server/install.md,并按其中说明把这个 MCP 服务器接入我的客户端。修改任何配置之前,先告诉我它的发布者、端点和登录方式,等我确认。不要把 API 密钥写进命令或我会提交的文件;问我密钥应从哪里获取。

查看智能体所依据的安装指南

其他 MCP 客户端

把它添加到你客户端的 mcpServers 配置中。

{
  "mcpServers": {
    "luxalgo": {
      "type": "http",
      "url": "https://mcp.luxalgo.com/mcp"
    }
  }
}

README

[LuxAlgo MCP]

LuxAlgo MCP is a LuxAlgo open-source project. Overview and setup: luxalgo.com/mcp.

It puts the LuxAlgo ecosystem behind a single MCP server: an encyclopedia of trading and technical analysis, your LuxAlgo trade journal, read-only access to your own brokerage accounts, hosted session statistics with a sample size on every number, the public record of US markets (congressional trades, insider filings, lobbying, contracts, patents and more, with a primary-source link on every row), a Monte Carlo challenge simulator, and a live prop-firm directory. No API key for anything hosted: the public tools are free and read-only, the Trade Journal and account tools use your LuxAlgo sign-in, and the local broker tools use your own keys and never send them anywhere.

bash
claude mcp add --transport http luxalgo https://mcp.luxalgo.com/mcp

What's inside

AreaWhat you get
LibraryThe encyclopedia of trading and technical analysis: hundreds of concept pages with formulas, the full indicator catalog organized by family and concept, and Pine Script® sources where publicly served.
Trade Journal (sign-in)Your own journal in the LuxAlgo app: the dashboard (metrics, Edge Score, equity curve), the P&L calendar, breakdowns by weekday / hold time / symbol / tag and more, every trade with its fills and annotations, day notes — and the writes that keep it alive: log fills by hand, annotate trades (tags, mistakes, rating, stop and target, review), write notes. Always as you, on your data; the app owns the rules.
Brokers (local only)Read-only access to your own accounts across 22 brokers and exchanges via broker-sdk: balances, positions, trade history, FIFO performance stats. Keys live in your MCP client config as env vars and never leave your machine. The hosted endpoint does not carry these tools, on purpose.
Edge StatsHosted session statistics from the open-source edge-stats engine: how often a setup actually worked (gap fills, opening-range breakouts, day-of-week effects, event days) with the sample size and a Wilson 95% confidence interval on every number. A nightly build runs the real engine over free market data and publishes only derived statistics; these tools serve them verbatim.
Market TrackersThe public record of US markets from primary sources only: congressional trades, insider (Forms 3/4/5) transactions, 13F holdings, federal contracts and grants, lobbying filings, FINRA short-sale volume, granted patents, clinical trials, FDA drug events, CFTC positioning, federal bills, FEC campaign finance, hearing transcripts, Federal Reserve communications, committee assignments, Wikipedia pageviews. Read straight from the pipeline's CC0 dumps — live tree plus deep-history archives — with provenance.sourceUrl on every row. Data only: no signals, scores, or predictions.
Challenge SimulatorThe open-source prop-firm-sim Monte Carlo engine, running locally inside the server. Your stats, or your real R-multiple trade series, through a firm's exact ruleset: pass probability with confidence intervals, expected attempts and cost, EV over the funded horizon, optimal-risk sweeps, cross-challenge comparison. Deterministic under seed, every assumption disclosed.
Prop Firm DirectoryThe live data the simulator draws from: firms, funded-account challenges with their full rulebooks (account sizes, fees, steps, profit splits, drawdown modes, trading restrictions), and current offers.
Charts (your browser)Not a tool: the chart you draw with what the tools return. The open-source core of Vela by LuxAlgo runs the Pine Script® that library_get_source_code hands back and paints the fills that broker_trades lists, in a browser tab, on your machine. How the loop works.

Install

The hosted server is one URL:

https://mcp.luxalgo.com/mcp

Claude (web, desktop, mobile)

Customize → Connectors → Add custom connector, URL https://claude.mcp.luxalgo.com/mcp, and under Authentication choose Required when the server asks. Claude connects anonymously, every keyless tool works right away, and the sign-in card only appears the first time you call an account tool. This Claude-only address exists because Claude.ai otherwise opens the OAuth window at connect time for any server whose OAuth metadata it can discover (claude-ai-mcp#1013); it serves the same tools with that metadata hidden until a sign-in is actually needed. Every other client uses https://mcp.luxalgo.com/mcp.

Claude Code

bash
claude mcp add --transport http luxalgo https://mcp.luxalgo.com/mcp

Cursor

Use the Install in Cursor button above, or add this to .cursor/mcp.json:

json
{  "mcpServers": {    "luxalgo": {      "url": "https://mcp.luxalgo.com/mcp"    }  }}

Any other MCP client

Point your client's MCP config at the hosted URL:

json
{  "mcpServers": {    "luxalgo": {      "url": "https://mcp.luxalgo.com/mcp"    }  }}
Where each client keeps its config
ClientWhere to add it
Cursor.cursor/mcp.json, or the install button above
Claude Desktopclaude_desktop_config.json
VS CodeInstall button above, or MCP settings
Windsurf~/.codeium/windsurf/mcp_config.json
Zedsettings.json under context_servers
WarpSettings → Agents → MCP servers
LM Studiomcp.json
OpenCodeopencode.json
Gemini CLI~/.gemini/settings.json

Local (stdio)

Runs every hosted tool locally, and unlocks the broker tools. Set read-only credential env vars for the brokers you use. Any subset works: a broker connects when all of its vars are set, and with no vars at all the broker tools simply stay unconfigured.

json
{  "mcpServers": {    "luxalgo": {      "command": "npx",      "args": ["-y", "@luxalgo/mcp"],      "env": {        "BROKERS_ALPACA_API_KEY": "…",        "BROKERS_ALPACA_API_SECRET": "…",        "BROKERS_KRAKEN_API_KEY": "…",        "BROKERS_KRAKEN_API_SECRET": "…",        "BROKERS_HYPERLIQUID_WALLET_ADDRESS": "0x…"      }    }  }}

Env var names derive from each broker's credential fields: BROKERS_<BROKER>_<FIELD> (for example BROKERS_OKX_PASSPHRASE, BROKERS_IBKR_FLEX_FLEX_TOKEN). The broker_setup tool lists every supported broker, its exact variables, and a one-line guide to creating each key with read-only scope, which is all this server ever needs.

Signing in with LuxAlgo (optional)

Almost everything here is keyless and works without an account. The tools in the Account and Trade Journal sections below need to know who you are; they use your LuxAlgo account through standard OAuth 2.1, with app.luxalgo.com as the authorization server. Nothing is required up front: every client can connect, list tools and use the public ones anonymously, and sign-in is only requested when you first call an account tool.

Hosted (ChatGPT, Claude, Cursor, any remote connector). The server advertises its protected-resource metadata and answers an unauthenticated account-tool call with a 401 + WWW-Authenticate challenge; MCP clients handle the rest (discovery, PKCE, consent screen in your browser) and keep the token for you. Each tool also declares its policy in tools/list (securitySchemes: noauth for public tools, oauth2 for account tools), so ChatGPT's per-tool linking works as well. Clients may identify themselves via Client ID Metadata Documents or Dynamic Client Registration — the app accepts both. One client-side exception: Claude.ai/Desktop connectors sign in at connect time whenever OAuth metadata is discoverable, regardless of their Authentication setting, so they get their own address, https://claude.mcp.luxalgo.com/mcp, whose metadata is only reachable from the 401 (see Install).

Local (stdio). The server running on your machine is itself the OAuth client. Sign in once:

bash
npx -y @luxalgo/mcp login     # opens your browser; tokens are stored under your user config dir (0600)npx -y @luxalgo/mcp status    # who is signed in, token expirynpx -y @luxalgo/mcp logout

Tokens live in ~/.config/luxalgo/mcp-auth.json (%APPDATA%\luxalgo\mcp-auth.json on Windows, or LUXALGO_MCP_AUTH_FILE), are refreshed automatically, and are only ever sent to the LuxAlgo app. If your MCP client supports URL-mode elicitation (MCP 2026-07-28), you can skip the command: the first account-tool call asks the client to open the sign-in page and continues once you approve. Otherwise the tool answers with the challenge and the login hint.

What the token is for. This server never decides what you are entitled to — its code is public, so any such check would be decorative. Instead, once you are signed in, every request a tool makes to the LuxAlgo app carries your token, and the app resolves your account and plan from it exactly as it does when you use the web app. Public tools work without it; with it, the app can tailor what they return. When the app declines — no valid sign-in (401) or a feature outside your plan (403) — the tool reports that, naming the permission involved.

Tools

Library

ToolDescription
library_searchOne search over concepts (alias-aware) and indicators
library_get_conceptFull concept page as markdown
library_get_indicatorIndicator detail: body, family, concepts, source code availability
library_get_source_codeSource code, fetched only on demand: in full when publicly served, or the start of it (complete: false) for indicators the app previews to signed-out users; chart_url opens the indicator on a Vela chart
library_list_conceptsPaginated concept roster, optionally per family
library_list_indicatorsFiltered, paginated browse (family, concept, platform, tier) with server-side sort
library_list_familiesThe taxonomy backbone with counts
library_get_familyA family hub as markdown plus concept roster

Library outputs are compact JSON with canonical urls for citation. Concept and family pages are also directly fetchable as markdown: append .md to any concept URL.

Account (sign-in required)

ToolDescription
luxalgo_accountThe signed-in user's plan tier, entitlements (alerts, historical bars, AI credits, …) and profile basics — so an agent can tailor answers to what the plan actually allows

Trade Journal (sign-in required)

Your own trade journal in the LuxAlgo app — the same accounts, trades, annotations and notes the app shows — read and written as you. Dates are YYYY-MM-DD day keys in your journal timezone (journal_list_accounts reports it); account filters take ids from the same call.

ToolDescription
journal_list_accountsJournal accounts (broker-synced, imported or manual; currency, initial balance, lot method, last sync, archived state) and the journal timezone — the first call, since every accounts filter takes these ids
journal_overviewThe dashboard for a window: performance metrics, Edge Score, per-day P&L, equity curve, open positions, accounts and settings; compare adds the previous equal-length window
journal_calendarOne month of the P&L calendar: day cells, weekly and monthly totals, trading and winning days
journal_breakdownClosed trades grouped by weekday, time of day, hold time, symbol, side, position size, tag, rating and asset class — where the P&L comes from
journal_list_tradesTrade summaries, keyset-paginated; filter by accounts, open-day window, symbol, direction, status, tag; sort by opened/closed time, net or gross P&L, duration, quantity, symbol or rating, either direction
journal_get_tradeOne trade in full: fills (reported values, corrections, hidden), per-exit P&L, every annotation
journal_get_dayA single day's stats, trades and notes
journal_list_tagsThe user's annotation vocabulary — tags, mistakes, playbooks with usage counts — so new annotations reuse existing words
journal_search_notesDay notes and trade notes as one newest-first stream; text query, day window, symbol and account filters, paginated
journal_add_tradeLog a trade by hand: its fills into a manual or import account; returns the resulting trade(s)
journal_update_tradeAnnotate a trade: notes, tags (replace or add/remove), mistakes, playbook, rating, stop loss, profit target, reviewed
journal_write_noteAdd a note to a day
journal_update_noteReplace a day note's text or move it to another day

The journal tools and luxalgo_account are the only tools that need a LuxAlgo account; see Signing in with LuxAlgo. Without a sign-in they return an OAuth challenge instead of data — never a silent fallback. The write tools act only as the signed-in user and only on that user's journal; the app validates and owns every change.

Brokers (local stdio only)

ToolDescription
broker_setupSupported brokers, their env vars (set or unset, never values), read-only key guides
broker_accountsConnected accounts: broker, currency, equity, cash
broker_positionsOpen positions with market values, asset class, entry price; negative quantity means short
broker_tradesTrade history, newest first; filter by broker or symbol
broker_statsTotal equity, equity by broker, top positions, FIFO win rate and realized PnL
broker_refreshBypass the 5-minute cache and re-fetch now

Read-only by construction: the SDK's root export has no trading endpoints, the server never writes secrets anywhere, and per-broker failures are reported alongside results, never silently dropped.

Edge Stats

Hosted session statistics from the open-source edge-stats engine, precomputed nightly:

ToolDescription
edge_symbolsWhat the hosted store covers: symbols, session calendars, coverage windows, last build
edge_presetsThe catalog of precomputed questions, each stating in plain language what its number means
edge_reportOne result in the engine's full honesty envelope: estimate, N, Wilson 95% CI, minimum-sample guards, stability split, per-year counts, distribution, disclaimer

Every number arrives with its sample size — the engine has no code path that returns a percentage without one. Results are historical conditional frequencies, never predictions. For arbitrary composed queries or your own market data, run edge-stats locally; its own MCP server exposes the full engine over your local store.

Market Trackers

ToolDescription
trackers_datasetsThe catalog: every dataset's row count, freshness, years with data (live vs deep-history archive), ticker-searchability; pass dataset for its field roster, filterable paths, caveats, per-year coverage, source health and dump URLs
trackers_querySearch one dataset by ticker, free text, exact field values (where, dot paths) and event-date range, choosing which years to read; newest/oldest ordering with paging
trackers_latestThe newest daily delta of a dataset (today's insider filings, this week's congressional disclosures), optionally narrowed by ticker or text
trackers_tickerOne ticker across every ticker-bearing dataset for a year: per-dataset counts with the newest rows — a public-record dossier

The data is the CC0 output of LuxAlgo/market-trackers, published daily to LuxAlgo/market-trackers-data: year-sharded gzipped JSON in the repository's live tree, plus deep-history shards attached to the data repo's GitHub Releases and indexed in its archives.json. The server streams shards row by row (never loading a whole file) under a per-call budget of compressed bytes, so a deep-history year (often 30–60 MB compressed) is read one at a time. Amounts disclosed as ranges stay ranges; ticker mappings for contracts, lobbying, trials, FDA events and patents are best-effort against a curated map of public companies; every row keeps its primary-source deep link.

Challenge Simulator

Runs locally inside the server:

ToolDescription
propfirms_list_simulatableEvery simulatable firm and challenge in the live directory, provenance-disclosed
propfirms_challenge_rulesOne challenge's full encoded ruleset (drawdown modes, consistency, payout gating, citations), editable and re-simulatable inline
propfirms_simulateMonte Carlo of your stats (win rate, avg win, trades/day, risk sizing) through a firm's exact ruleset and funded horizon: pass probability with CI, which rule kills attempts, expected attempts and cost, EV, payout probability
propfirms_simulate_tradesSame, from your real R-multiple trade series; block bootstrap preserves your streaks
propfirms_optimal_riskRisk sweep: pass-optimal vs EV-optimal risk per trade (they differ)
propfirms_compareSame trader across up to 12 challenges, EV-sorted (not a ranking)
propfirms_pass_ratesThe site's reference-archetype odds, recomputed live (seed 42, 10k paths)
propfirms_validate_strategyScreen one strategy across every simulatable challenge against an explicit pass bar

Every simulation result carries its assumptions, unsimulated-rule flags, seed, and engine version. Results are distributions under stated assumptions, never promises. The engine runs locally; firm rules adapt live from the directory, and inline specs simulate fully offline.

Prop Firm Directory

The live directory the simulator draws from, queryable directly:

ToolDescription
propfirms_searchSearch firms; firm filters (platforms, markets, payments, Trustpilot, country availability) compose with nested challenge and offer filters, and include nests matching children
propfirms_getOne firm's full dossier: profile, every challenge, live offers, written overview
propfirms_search_challengesSearch challenges by rules (size, fee, steps, profit split, drawdown, trading restrictions) and parent firm; can attach applicable live offers
propfirms_search_offersCurrent discounts and promo codes, resolvable per firm or per challenge

Charts, in your browser, with Vela

Every tool above returns text and JSON. When the answer wants a chart, draw it with the open-source core of Vela by LuxAlgo (@luxalgo/vela, Apache-2.0, GitHub), the charting library behind Vela: a headless chart with its own WebGL2 renderer that takes bars you already have, or fetches them from keyless public providers, and runs indicator scripts through pluggable engines. Pine Script® lives in the @luxalgo/vela-pinets addon, which is what closes the loop with the Library: library_get_source_code hands an agent an indicator's exact Pine source, and Vela's open-source core executes that source on a chart.

To open an indicator on Vela, LuxAlgo's next-generation charting platform at vela.luxalgo.com/chart, give the user the chart_url that library_get_source_code returns when the indicator's code runs only on LuxAlgo.

[The Library's SuperTrend indicator, fetched through library_get_source_code, running on a Vela chart]

Not a mockup: the Library's SuperTrend source as returned by library_get_source_code, executed by @luxalgo/vela-pinets on a @luxalgo/vela 0.6 chart and screenshotted in headless Chromium. The bars are a labelled synthetic sample; point data at your own or register a provider for live ones.

The whole demo is two script tags and five lines. source is the source field of a library_get_source_code result:

html
<div id="chart" style="height: 480px"></div><script src="https://cdn.jsdelivr.net/npm/@luxalgo/[email protected]/dist/vela.global.min.js"></script><script src="https://cdn.jsdelivr.net/npm/@luxalgo/[email protected]/dist/vela-pinets.global.min.js"></script><script>  const chart = new Vela.Vela('#chart', { data: bars, timeframe: '1D', theme: 'dark' }); // bars: [{ time, open, high, low, close, volume? }]  chart.registerEngine('pine', new VelaPinets.PineEngine());  chart.addIndicator(source);</script>

With a bundler it is the same three calls over import { Vela } from '@luxalgo/vela' and import { PineEngine } from '@luxalgo/vela-pinets'; see Vela's quickstart. The same chart paints your own trades: Trade Journal takes the shape broker_trades returns and draws entries, exits and P&L labels through Vela's native-indicator API, engine-free, in one component you can lift as is.

Where each piece runs. This matters because it is the opposite of how the rest of this server works:

PieceWhereNotes
VelaA browser tab on your machine (Canvas 2D or WebGL2).Never inside this server, hosted or stdio, and never in an MCP response. An agent gets the Pine source and the trades as text; the chart is what you build with them.
BarsYours, via data, or Vela's keyless Binance, Coinbase and Hyperliquid providers, fetched by the browser.This server serves no market data, so a chart needs no LuxAlgo key and makes no LuxAlgo request.
Pine Script®@luxalgo/vela-pinets, which executes the PineTS runtime.AGPL-3.0, licensed separately from Vela's Apache-2.0 and this server's MIT. Vela itself ships no engine and carries no Pine code.
AttributionVela's mark, bottom-left of every chart.Stays on unless you show equivalent attribution next to the chart; see Vela's NOTICE.

Vela already draws the charts in Trade Journal and on the hosted Market Trackers, and velacharts.dev runs a live one.

Development

bash
npm installnpm run buildnpm start            # stdionpm run start:http   # streamable HTTP on :3333/mcpnpm test               # smoke suite over stdio (hits live endpoints); --only library,edge for a subsetnpm run test:http      # the same suite against a running HTTP entry on :3333npm run test:parity    # simulator tools vs upstream package + raw enginenpm run test:trackers  # offline checks of the Market Trackers streaming engine

Layout — one directory per concern, one directory per tool domain:

src/  index.ts            the `luxalgo-mcp` binary → entries/stdio.ts  entries/            stdio.ts (local), node-http.ts (plain Node), hosted.ts (shared by node-http and api/server.ts)  server/             manifest.ts (the list of tool modules; protected / local-only derived from it),                      create-server.ts (registration shared by every entry), version.ts (serverInfo)  tools/<domain>/     index.ts exports a ToolModule (name, tool names, protected, localOnly, register);                      api.ts wraps the domain's endpoints; the rest is the domain's own  tools/_shared/      result/format helpers and the ToolModule contract  auth/               OAuth: config, gate, verify, metadata, challenge, runtime, protected-tool, local/ (stdio client)  platform/           app-client.ts (the one HTTP client for the LuxAlgo app), analytics.tsapi/server.ts         the Vercel functiontest/                 smoke.mjs runner + smoke/<domain>.mjs suites, parity.mjs, trackers-check.mjs

Adding a tool domain: create src/tools/<domain>/index.ts exporting a ToolModule and list it in src/server/manifest.ts; registration asserts the module registers exactly the tools it declares. Mark tools that need a signed-in user in protectedTools (and register them with registerProtectedTool), and modules that read local credentials with localOnly.

Optional env: LUXALGO_APP_ORIGIN and LUXALGO_SITE_ORIGIN point the server at non-production environments; LUXALGO_CHART_ORIGIN (default https://vela.luxalgo.com) is where chart_url opens the chart; MARKET_TRACKERS_DUMPS_ORIGIN (default https://raw.githubusercontent.com/LuxAlgo/market-trackers-data/main) and MARKET_TRACKERS_DATA_REPO point the Market Trackers tools at another dumps tree.

OAuth env (see src/auth/config.ts): the authorization server is always LUXALGO_APP_ORIGIN + /api/auth; MCP_RESOURCE (default https://mcp.luxalgo.com/mcp) is this server's resource identifier and token audience — it must equal the app's LUXALGO_MCP_SERVER_RESOURCE. For local end-to-end work: LUXALGO_APP_ORIGIN=http://localhost:3001 MCP_RESOURCE=http://localhost:3333/mcp npm run start:http, with the app running on 3001 and the same MCP_RESOURCE exported for npx -y @luxalgo/mcp login / the stdio server. LUXALGO_AUTH_CHALLENGE=result makes the hosted entries let an anonymous protected call reach the tool (which answers the in-band _meta["mcp/www_authenticate"] challenge) instead of short-circuiting with HTTP 401 — the default; invalid tokens are always a 401. The Claude-only host is MCP_RESOURCE's host with claude. in front (http://claude.localhost:3333/mcp locally, where the smoke suite reaches it through X-Forwarded-Host); it must match the app's getLuxalgoClaudeMcpServerResource(). npm test covers the anonymous paths and the advertised securitySchemes on both transports; npm run test:http adds OAuth discovery on both hosts.

Disclaimer

Nothing this server returns is investment advice. Simulation outputs are modeled estimates under stated assumptions, not predictions or guarantees. Verify balances and performance numbers against your broker's own statements, and a prop firm's own page is authoritative for its current rules.

License

Code is MIT © LuxAlgo Global, LLC. Library content and Pine Script® sources served by this server keep their own licenses; see NOTICE.

The LuxAlgo name and logo are trademarks of LuxAlgo Global, LLC; see TRADEMARKS.md. To report a vulnerability, see SECURITY.md.

来源:README.md,提交 503f707

工具

41

library_get_concept

Get a Library concept

Explain a trading concept: the Library's full write-up as markdown — definition, formula, how traders read it, and its indicator implementations. Use for any 'what is X / how does X work' question. Needs the exact slug — find it with library_search or library_list_concepts.

输入参数slug必填context必填

library_get_indicator

Get a Library indicator

Details for one indicator: what it does, how to read it, family, concept links, preview image — plus whether its source code is available (fetch the code itself with library_get_source_code). Use when the user asks about a specific indicator.

输入参数slug必填context必填

library_get_source_code

Get an indicator's source code

The Pine Script® source code of a Library indicator. Kept separate from library_get_indicator because sources are long — call it only when the user wants the code itself. For some indicators the app returns only the start of the source to a signed-out user (`complete: false`, with the line counts): signing in to a LuxAlgo account, free included, returns all of it. `chart_url` opens the indicator on Vela either way.

输入参数slug必填context必填

library_list_concepts

List Library concepts

Browse every trading and technical-analysis concept in the Library — paginated, optionally one family. Use to enumerate a topic area or find slugs for library_get_concept and the concept filter of library_list_indicators; for keyword lookup prefer library_search.

输入参数pagefamilycontext必填page_size

library_list_indicators

List Library indicators

Browse the indicator catalog with filters and server-side sorting (newest first by default). The Library is organized by family and concept: filter by family (keys from library_list_families) or by concept slug (that concept's implementations; slugs from library_list_concepts or library_search), and optionally by trading platform or plan tier. Use for structured browsing — 'latest indicators', 'everything in the volatility family', 'indicators implementing liquidity sweeps'; for keyword discovery prefer library_search.

输入参数pagesorttexttierfamilyconceptcontext必填platformdirectionpage_size

library_list_families

List concept families

The Library's top-level taxonomy: 17 families of trading concepts (trend, momentum, SMC/ICT, statistics, …) with concept counts and hub links. The natural first call for orientation.

输入参数context必填

library_get_family

Get a family hub

A family's hub page as markdown — the written overview of that school of analysis plus its complete concept roster. Use after library_list_families, or when the user asks about a whole area like 'SMC' or 'Wyckoff'.

输入参数key必填context必填

propfirms_get

Get a prop firm

One prop firm's full dossier by slug: general profile (platforms, markets, payments, Trustpilot, restricted countries), every challenge with its rules, live offers with promo codes and affiliate links, and the written overview (about, rules, payout policy, FAQ). Find slugs with propfirms_search. Uncaptured (null) fields are omitted; challenges reference applicable offers via offerIds into the firm-level offers list. For simulated pass odds on this firm's challenges (reference archetypes, same engine as luxalgo.com/prop-firms), use propfirms_pass_rates.

输入参数context必填propfirmId必填

propfirms_search_challenges

Search prop-firm challenges

Search funded-account challenges across all visible prop firms. Filter by challenge rules (account size, fee, steps, profit split, drawdown mode, news/copy/auto trading, weekend holding, …) and by parent-firm properties. Pass propfirmId to list one firm's challenges, or challengeId to fetch specific ones. include=['offers'] returns a deduplicated top-level offers list, with each challenge referencing its applicable offers via offerIds (firm-wide offers included). Uncaptured (null) rule fields are omitted from results and never match filters. This returns each challenge's listed rules and terms, not outcomes: to simulate a challenge found here pass its ids to propfirms_simulate or propfirms_pass_rates, and to screen one strategy across many challenges at once use propfirms_validate_strategy.

输入参数sorttextstepscontext必填includeintervalpriceMaxpriceMinstepsMaxstepsMindirectionpageIndex另有 24 个

propfirms_search_offers

Search prop-firm offers

Search promotional offers (discounts and promo codes) across prop firms — defaults to live (active, unexpired) offers only. propfirmId narrows to one firm; challengeId resolves the offers that apply to a challenge (firm-wide offers included). Every offer carries the promo code, discount, end date, and affiliate link.

输入参数sorttextcontext必填offerIdisActivedirectionofferTextpageIndexpromoCodeisFeaturedpropfirmIdchallengeId另有 6 个

propfirms_list_simulatable

List prop firms and challenges

List the prop firms in the live LuxAlgo directory together with every simulatable challenge (challengeId, display name, account size, currency, price, and its rule-semantics provenance). Call this first to discover the firmId + challengeId pairs accepted by propfirms_challenge_rules, propfirms_simulate, propfirms_optimal_risk, propfirms_compare and propfirms_simulate_trades. Challenges whose loss-rule semantics cannot be established are listed under notSimulatable instead of being guessed. The listing is data, not endorsement: firms are alphabetical - no recommendation or ranking is implied, and none should be presented. DATA SOURCE & PROVENANCE: firm data comes live from LuxAlgo's public, keyless prop-firm directory API - the data behind luxalgo.com/prop-firms. Rule semantics are used verbatim where the directory serves structured rule columns; where it serves only free text, semantics are inferred ONLY when one reasonable reading exists, and every inferred field is disclosed in `inferredFields` (provenance 'directory+inferred') - relay those to the user next to any numbers. Challenges whose loss rules cannot be established are refused as not simulatable rather than guessed. Firms change rules; each firm's own page is always authoritative. NOTE: this lists only the firms and challenges whose rules the engine can encode honestly. The full directory — every visible firm with platforms, prices, payout terms, and live offers/promo codes — is served by propfirms_search, propfirms_search_challenges, and propfirms_search_offers.

输入参数context必填productType

propfirms_challenge_rules

Get a challenge's full ruleset

Fetch one directory challenge's complete ruleset (ChallengeSpec), adapted from the live LuxAlgo directory: evaluation steps (profit targets in percent units of the initial account, minimum trading days, time limits); the daily-loss rule with its exact semantics (basis = measured from prior-day balance vs prior-day equity; limitBasis = whether a pct limit is a fixed allowance of the initial balance or recomputed daily from the anchor; evaluation = breached on an intraday touch vs only at the close; includesOpenPnl = whether floating P&L can breach it); the max-loss rule and its drawdown mode (How the max-loss floor behaves - the single most consequential rule difference between firms. 'static-initial': floor fixed at initial balance minus the limit; never moves (classic CFD two-step). 'trailing-realized-eod': floor ratchets up with end-of-day balance highs; intraday highs do not move it. 'trailing-intraday-unrealized': floor trails the peak unrealized equity intraday and never stops trailing (futures-style; the most-miscalculated rule in the industry: it cuts pass probability dramatically). 'trailing-locks-at-initial': trails intraday peak equity until the floor reaches the initial balance, then freezes (common futures variant). Locking is also composable: locksAtInitial adds the same lock to an EOD trail, and lockOffsetAmount shifts the lock level to initial balance + that amount (e.g. 100 models 'stops trailing $100 above the start').); per-step consistency rules (steps[].consistency.maxBestDayProfitPct - SIMULATED: one outsized day effectively raises the target until the best-day share complies); fees (price, one-time vs monthly billing, reset fee, activation fee, refundable-on-pass); funded terms (profit split percent, payout frequency, first-payout minimum days, and funded.payoutRules - SIMULATED payout gating: minWinningDays, winningDayMinProfit, per-payout caps maxPayoutPctOfProfit/maxPayoutAmount, bufferAmount, and a windowed consistencyMaxBestDayPct gate); f

输入参数firmId必填context必填challengeId必填

propfirms_simulate

Simulate a trader through a challenge

Monte Carlo-simulate a trader with the given statistics through a prop-firm challenge and (by default) a funded horizon. Answers: "What is my chance of passing per attempt, and of ever getting funded? How many attempts and how much total money should I expect? Is this challenge positive expected value for me, and which rule actually kills my attempts?" Identify the challenge EITHER by directory reference (firmId + challengeId, discovered via propfirms_list_simulatable; firmId accepts the directory id or the firm's name) OR by a full inline `spec` object - the exact shape propfirms_challenge_rules returns, so you can fetch a directory entry, change one rule, and re-simulate to model rule variations. Provide exactly one of the two forms; providing both or neither is an error. Directory references need network access; inline specs are fully offline. The trader is described by flattened parametric fields (one clean design used across all tools): winRate (a FRACTION 0-1), avgWinR/avgLossR and optional winStdR/lossStdR in R-multiples (sizes relative to the amount risked per trade), tradesPerDay with a 'fixed' or 'poisson' day model, and risk sizing via riskMode + riskValue (percent units for percent modes). If you have the user's raw trade series rather than summary stats, prefer propfirms_simulate_trades - it preserves streaks. Returns structuredContent with the full SimResult: perAttempt.passProbability with a Wilson 95% CI and per-step pass rates plus a failure breakdown by rule (daily-loss vs max-loss vs time-limit - which tells the user WHAT to fix); journey.fundedProbability, attempts and cost distributions (cost includes prices, resets, monthly billing, activation, minus refunds), costGivenFunded and daysToFunded; perAttempt.avgDaysWhenPassed/avgDaysWhenFailed and perAttempt.stagnationDays (the longest run of days without a new equity high per attempt - the dead time between progress, which grows sharply as risk per trade shrinks); funded-stage payout distributions

输入参数seedspecpathsfirmIdavgWinR必填context必填winRate必填winStdRavgLossRlossStdRriskModeriskValue必填另有 7 个

propfirms_optimal_risk

Find pass- and EV-optimal risk per trade

Sweep risk-per-trade over a grid, run the full journey simulation at every point, and report two optima separately: bestByPassProbability (the risk that maximizes a single attempt's chance of passing) and bestByEv (the risk that maximizes expected value across attempts, fees and funded payouts). They usually differ (diverges=true) - and that divergence is the insight: lower risk survives loss limits more often, but EV also weighs the cost of extra attempts and the size of funded payouts, which can favor a different risk. Never present one number as THE optimal risk; report both optima and the trade-off, and let the user choose. The sweep uses common random numbers (the same seed at every grid point), so curves are smooth and the argmax is signal, not Monte Carlo noise. Grid units follow riskMode: percent units for percent modes (default grid 0.1 to 3 in steps of 0.1, i.e. 0.1%-3% per trade), currency per trade for 'fixed-amount' (set min/max/step explicitly). Parametric trader only (riskValue is not a parameter here - the grid supplies it). Cost scales with grid size: one full simulation per point, so ~30 points at the default 10,000 paths takes roughly 10 seconds; use fewer paths or a coarser grid for a first pass, then refine around the optima. UNITS: every *Pct rule field and every percent-mode risk value is in PERCENT UNITS (5 = 5%, 0.5 = 0.5%). The one exception is winRate, which is a FRACTION in [0, 1] (0.55 = 55% winners). Probabilities in results are fractions in [0, 1]. DETERMINISM: identical inputs including `seed` reproduce byte-identical results on any platform. Include the seed and path count when reporting numbers so users can reproduce them exactly; re-run with a few different seeds to gauge Monte Carlo spread. ASSUMPTIONS: every result carries assumptions.flags - dataset-declared rules the engine does NOT simulate (e.g. scaling plans or soft daily lockouts, which make real odds worse than simulated) plus engine simplifications - and assumptions.discl

输入参数maxminseedspecsteppathsfirmIdavgWinR必填context必填winRate必填winStdRavgLossR另有 8 个

propfirms_compare

Compare challenges for one trader

Simulate the SAME trader across several challenges (directory references and/or inline specs, up to 12) under identical options and seed, and return one row per challenge sorted by expected value. THIS IS NOT A RANKING: rows are ordered by EV for the caller's specific inputs - trader stats, risk sizing, and options - and a different trader profile reorders them. The tool computes data for the user's own decision; it implies no endorsement, league table, or recommendation of any firm, and results should be presented that way ('best EV for these inputs', never 'best firm'). Each row carries perAttemptPassProbability, fundedProbability, expectedAttempts, expectedCost, evTotal, pEvPositive, daysToFundedP50, and the challenge's flagsNotSimulated - challenges with more unsimulated rules have optimistic numbers, so compare flags alongside EV, not EV alone. Consistency rules and funded payout gating ARE simulated (engine v1), so EV already reflects them where a ruleset has them. For full per-challenge distributions run propfirms_simulate on the interesting rows. UNITS: every *Pct rule field and every percent-mode risk value is in PERCENT UNITS (5 = 5%, 0.5 = 0.5%). The one exception is winRate, which is a FRACTION in [0, 1] (0.55 = 55% winners). Probabilities in results are fractions in [0, 1]. DETERMINISM: identical inputs including `seed` reproduce byte-identical results on any platform. Include the seed and path count when reporting numbers so users can reproduce them exactly; re-run with a few different seeds to gauge Monte Carlo spread. ASSUMPTIONS: every result carries assumptions.flags - dataset-declared rules the engine does NOT simulate (e.g. scaling plans or soft daily lockouts, which make real odds worse than simulated) plus engine simplifications - and assumptions.disclaimer. These are material: always surface the flags and the disclaimer to the user alongside the numbers, never just the headline probability. Results are distributions under stated assumptions, n

输入参数seedpathsavgWinR必填context必填winRate必填winStdRavgLossRlossStdRriskModeriskValue必填attemptCapchallenges必填另有 4 个

propfirms_simulate_trades

Simulate from a real trade series

Simulate a challenge by resampling the trader's OWN R-multiple trade series with a stationary block bootstrap instead of a win-rate model. Why resampling matters: challenge rules are breached by streaks, not by averages - a daily-loss limit dies to a cluster of losses inside one day, and a trailing drawdown dies to a losing streak right after an equity peak. Real trade series are streaky (autocorrelation, volatility clustering, edge that comes and goes), and the stationary bootstrap resamples contiguous blocks of the actual series (geometric length, mean blockMeanLength, default 5 trades), so the trader's real streak structure survives into every simulated day. A parametric model with identical summary statistics shuffles trades independently and therefore understates breach risk for streaky traders. Use propfirms_simulate when only summary stats are available; use this whenever the actual trades are. Provide the series as rSeries (array of R-multiples: each trade's P&L divided by the amount risked on it), rSeriesText (pasted JSON/CSV/whitespace text, optional 'R' suffix per value), or one of the timestamped-log inputs below; exactly one of the four, at least 10 trades, 100+ strongly recommended. Returns the same full SimResult as propfirms_simulate (structuredContent, histograms off by default) plus a text summary that also reports the sample's win rate and mean R. TIMESTAMPED LOGS: tradeLogText accepts a pasted CSV/TSV trade log with a header row (open time and R required; close time and direction optional; loose header names are matched; timestamps without an offset are read as UTC). The R-series and, unless tradesPerDay is passed, the trades-per-day rate are derived from the log, and parse warnings are surfaced in the text output. NEWS WINDOWS: with a timestamped input, newsFilter runs the simulation TWICE on the same seed and options, once on the full history and once without the trades opened inside configurable windows around scheduled releases (a built-in re

输入参数seedspecpathsfirmIdcontext必填rSeriesriskModeriskValue必填attemptCapimportRisknewsFilterchallengeId另有 9 个

propfirms_pass_rates

Reference pass rates per archetype

Reference challenge pass rates computed live from the directory's encoded rules with the same engine, seed (42), path count (10,000) and reference archetypes luxalgo.com/prop-firms uses — per challenge and per archetype (developing 45% win rate / consistent 48% / proven edge 52%, all risking conservatively). Returns per-attempt pass probability with 95% CI, P(funded), expected attempts and total cost, EV, payout probability, funded-blowup probability, each cell's assumption flag ids, and the ruleset's provenance (structured directory columns vs fields inferred from listing text — always relay inferred fields). Deterministic per ruleset and cached — cheap to call. These are REFERENCE odds for orientation and comparison, not the user's personal odds: for their own statistics use propfirms_simulate (summary stats) or propfirms_simulate_trades (their real trade series). Not a ranking; a firm's page is authoritative for current rules (check lastVerified). Expected costs use the directory's listed challenge prices; full firm profiles and live offers are directory data (propfirms_get, propfirms_search_offers).

输入参数firmId必填context必填challengeId

propfirms_validate_strategy

Screen a strategy across all challenges

Answer 'which challenges would MY strategy actually pass?' in one call: simulate the given strategy through every simulatable challenge in the live directory (optionally scoped by productType, account-size range, priceMax, or firm) and split the results by an explicit, caller-stated bar. Describe the strategy EITHER as real trades (rSeries/rSeriesText R-multiples, preferred: the stationary block bootstrap preserves streaks, which is what breaches loss limits) OR as summary stats (winRate + avgWinR, optional spreads), plus tradesPerDay and risk sizing (riskMode + riskValue). The bar is minPassPerAttempt (a fraction, default 0.5) with optional requirePositiveEv; always state the bar when relaying results. Returns per challenge: pass probability per attempt with 95% CI, P(funded), expected attempts and total cost, EV over the funded horizon, P(EV>0), assumption flag ids, and which rule semantics were inferred from listing text. HONESTY FRAME: this is a screen of distributions for the caller's inputs and bar, NOT a ranking or endorsement; challenges whose rules cannot be encoded honestly are excluded and counted, never guessed; flagged (unsimulated) rules make numbers optimistic, so relay flags. One full simulation runs per challenge (default 5,000 paths each; results are deterministic per seed), and scopes above 40 challenges are refused rather than silently truncated: narrow the scope instead. Numbers move with risk sizing; sweep one challenge with propfirms_optimal_risk afterwards. Fees and expected costs use the directory's listed prices (live discounts are NOT applied); prices, firm profiles, and current offers are directory data (propfirms_search_challenges, propfirms_get, propfirms_search_offers).

输入参数firmseedpathsavgWinRcontext必填rSerieswinRatewinStdRavgLossRlossStdRpriceMaxriskMode另有 13 个

trackers_datasets

List Market Trackers datasets

The Market Trackers catalog: every dataset of US public-record market data the LuxAlgo pipeline publishes as CC0 dumps — congressional trades, insider (Forms 3/4/5) transactions, 13F holdings, federal contracts and grants, lobbying filings, FINRA short-sale volume, granted patents, clinical trials, FDA drug events, CFTC positioning, federal bills, FEC campaign finance, hearing transcripts, Federal Reserve communications, committee assignments, Wikipedia pageviews. Returns each dataset's row count, freshness, the years with data (live tree vs deep-history archives), and whether it is ticker-searchable. Pass dataset for the full field roster, filterable paths, caveats, per-year coverage, source health, and dump URLs — read it before composing trackers_query filters.

输入参数context必填dataset

trackers_query

Query a Market Trackers dataset

Search one Market Trackers dataset by ticker, free text, exact field values, and event-date range, with paging and newest/oldest ordering. Data is read from year-sharded CC0 dumps: pass years (or since/until) to choose which years to read — default is the newest year with data. Deep-history years (see archiveYears in trackers_datasets) can be tens of MB compressed each, so read them one or two at a time; the tool refuses selections over its byte budget and says how to narrow. Every row carries provenance.sourceUrl (the SEC filing, disclosure, award, or record it came from). Examples: insider purchases at NVDA in 2024 → dataset insider-transactions, ticker NVDA, years [2024], where {code: 'P'}; a member of Congress's trades → congress-trades, text set to their name; who lobbied on a bill → lobbying-filings, text 'H.R.1234'.

输入参数sorttextlimitsinceuntilwhereyearsoffsettickercontext必填dataset必填

trackers_latest

Newest Market Trackers rows

What the last daily publish added to one dataset — the newest ingestion day's rows (the dumps' latest.json), optionally narrowed by ticker or text. The cheapest way to see what is new: today's insider filings, this week's congressional disclosures, the latest lobbying registrations. Not available for snapshot-only bulk datasets (patents); use trackers_query there.

输入参数sorttextlimitwhereoffsettickercontext必填dataset必填

trackers_ticker

Ticker across Market Trackers

One ticker across every ticker-bearing Market Trackers dataset for one year (default: the current year): insider transactions, congressional trades, 13F holdings, federal contracts and grants, lobbying filings by the company, short-sale volume, clinical trials, FDA events, patents, Wikipedia pageviews. Returns per-dataset match counts with the newest rows of each — a public-record dossier from primary sources. Deep-history archive years too large for one fan-out are listed under skipped with the trackers_query call that reads them.

输入参数yearlimitticker必填context必填

edge_symbols

Hosted Edge Stats coverage

What the hosted Edge Stats store covers: the symbols, their session calendars, coverage windows, session counts, and when the nightly build last ran. Session statistics (how often a setup actually worked, with sample sizes and confidence intervals) come from the open-source edge-stats engine over free market data. Start here, then edge_presets for the questions you can ask, then edge_report for a result.

输入参数context必填

edge_presets

List Edge Stats report presets

The catalog of session-statistics questions the hosted store precomputes nightly — gap fills, opening-range breakouts, day-of-week effects, event-day behavior, and more. Each preset states in plain language what its number means. Returns preset ids for edge_report.

输入参数context必填category

edge_report

Get a hosted Edge Stats report

One precomputed session-statistics result: P(outcome | conditions) for a preset on a hosted symbol, in the engine's full honesty envelope — the estimate with N and a Wilson 95% confidence interval, minimum-sample guards, a first-half vs second-half stability split, per-year counts, the value distribution where the outcome is continuous, and the disclaimer. Historical conditional frequencies, not predictions. Preset ids come from edge_presets; symbols from edge_symbols.

输入参数preset必填symbol必填context必填

luxalgo_account

My LuxAlgo account

The signed-in user's LuxAlgo account: plan tier, entitlements (limits such as alerts, historical bars, AI credits) and profile basics. Use it to tailor answers to what the user's plan actually allows, or when the user asks what plan they are on. Requires signing in with a LuxAlgo account (OAuth).

输入参数context必填

journal_list_accounts

List journal accounts

The signed-in user's trade-journal accounts — id, name, broker, kind (`sync` mirrors a live broker connection, `import` came from statements, `manual` is hand-entered), currency, initial balance, P&L lot method, last broker sync, archived state — plus `timeZone`, the journal timezone every date in the journal tools is expressed in. Call this first: every other journal tool's `accounts` filter takes these ids and rejects unknown ones, and journal_add_trade needs a `manual` or `import` account. An empty list means no journal yet. Requires signing in with a LuxAlgo account (OAuth).

输入参数context必填

journal_overview

Journal dashboard

The journal dashboard in one call for a window: performance metrics (net/gross P&L, fees, win rate, day win rate, profit factor, expectancy, average win/loss and their ratio, largest win/loss, streaks, max drawdown, recovery factor, profit concentration, average realized R), the Edge Score with its six components, per-day P&L stats, the cumulative equity curve, open positions, and the accounts and settings the numbers cover. Closed trades bucket by close day in the journal timezone; open positions count toward any window that reaches today. `compare: true` adds `previous` — the equal-length window just before. Defaults to the last 30 days; pass `range: 'all'` or explicit `from`/`to` for more. Null metrics are not computable yet (e.g. no losses → `profitFactorIsInfinite`). Use journal_breakdown for where the P&L comes from and journal_list_trades for the trades themselves. Requires signing in with a LuxAlgo account (OAuth).

输入参数tofromrangecomparecontext必填accounts

journal_calendar

Journal P&L calendar

One month of the P&L calendar: week rows of day cells (net and gross P&L, fees, trade/win/loss/breakeven counts, volume; null for days with no trades), each week's net P&L and trade count, and the month's net P&L, trade count, trading days and winning days. Days are in the journal timezone. Omit `month` for the current month. Drill into one day with journal_get_day. Requires signing in with a LuxAlgo account (OAuth).

输入参数monthcontext必填accounts

journal_breakdown

Journal P&L breakdown

Where the P&L actually comes from: closed trades in the window grouped nine ways — weekday, time of day, hold time, symbol, side, position size, tag, rating and asset class — each group with trade count, wins, losses, net P&L, average net P&L and win rate (breakevens excluded). Defaults to all time, since groups need sample size; narrow with `range` or `from`/`to`. The tool for 'what am I good or bad at' questions; journal_overview has the headline numbers. Requires signing in with a LuxAlgo account (OAuth).

输入参数tofromrangecontext必填accounts

journal_list_trades

List journal trades

Trade summaries — `key`, account, symbol, asset class, direction, status (open/win/loss/breakeven), open and close times, quantity and open quantity, average entry/exit, gross and net P&L, fees, fill count, duration, realized R, tags, rating, reviewed flag, hasNotes — newest-opened first by default. `sort` orders by any of openedAt, closedAt, netPnl, grossPnl, durationMs, quantity, symbol or rating (names match the response fields); `order` is desc unless set, except symbol which defaults to asc. Trades lacking the sort value (open trades for closedAt/durationMs, unrated for rating) come last in either order; netPnl is after fees, grossPnl before. Filter by account ids, open-day window (`from`/`to` are inclusive YYYY-MM-DD day keys in the journal timezone, applied to the trade's open day; open positions are always listed), symbol, direction, status or one exact tag. Keyset-paginated: pass `nextCursor` back as `cursor` with the same sort, order and filters. Examples: biggest winners this month = from/to + sort netPnl; worst by gross = sort grossPnl, order asc, status loss; longest holds = sort durationMs. Summaries carry no fills or note text: journal_get_trade with the `key` has those. Requires signing in with a LuxAlgo account (OAuth).

输入参数totagfromsortlimitordercursorstatussymbolcontext必填accountsdirection

journal_get_trade

Get one journal trade

One trade in full: the summary fields plus its fills (each with the effective values, what the source reported, the user's corrections and whether it is hidden), per-exit gross P&L, hidden fills inside the trade's span, and every annotation — notes, tags, mistakes, playbook id, stop loss, profit target, review time. Use after journal_list_trades or journal_get_day when the user asks about a specific trade or before annotating it. Requires signing in with a LuxAlgo account (OAuth).

输入参数key必填context必填

journal_get_day

Get one journal day

A single trading day: its stats (null when nothing traded), its trades (closed that day, or opened that day and still open) as summaries, and the day's notes with their ids. `date` is a YYYY-MM-DD day key in the journal timezone. Use it for 'how did Tuesday go', and to find note ids for journal_update_note. Requires signing in with a LuxAlgo account (OAuth).

输入参数date必填context必填accounts

journal_list_tags

List journal tags, mistakes and playbooks

The user's annotation vocabulary: every tag, mistake and playbook id they have put on any trade (open or closed), most-used first with the number of trades carrying each. Check it before journal_update_trade so new annotations reuse the user's own words instead of minting near-duplicates. Per-trade tags are on each trade summary, not here. Requires signing in with a LuxAlgo account (OAuth).

输入参数context必填accounts

journal_search_notes

Search journal notes

Search the notes feed — day notes and trades that carry notes — newest first as one stream split by kind: `notes` (day notes, with ids for journal_update_note) and `tradeNotes` (the trade summary with its note text; annotate via journal_update_trade). Filter by case-insensitive text (`q`), day-key window, symbol (trade notes only — day notes have no symbol and drop out) and account ids; keyset-paginated via `cursor`/`nextCursor`. Omit every filter for the latest notes. Requires signing in with a LuxAlgo account (OAuth).

输入参数qtofromlimitcursorsymbolcontext必填accounts

journal_add_trade

Log a trade by hand

Log a trade by adding its fills to a `manual` or `import` journal account (never a broker-synced one — the sync owns those). The journal derives trades from fills: a long round trip is a buy fill then a sell fill, a short is sell then buy, scale-ins and partial exits are just more fills, and a lone fill opens a position. Times are ISO 8601 instants with offset; fees are per fill. Fills identical to existing ones are skipped as duplicates. Returns the insert counts and the trade(s) the fills now belong to, with `key`s for journal_update_trade. Correcting or removing an existing fill is done in the app, not here. Requires signing in with a LuxAlgo account (OAuth).

输入参数fills必填context必填accountId必填

journal_update_trade

Annotate a journal trade

Annotate a trade — the user-owned fields only: `notes` (free text about this trade), `tags`, `mistakes`, `playbookId`, `rating` 1–5, `stopLoss` and `profitTarget` (price levels; the stop is what realized R is measured against) and `reviewed`. `tags`/`mistakes` replace the whole list; use `addTags`/`removeTags`/`addMistakes`/`removeMistakes` to change a few entries without clobbering the rest (check journal_list_tags for the user's existing words). Pass null to clear a field. Does not touch fills, prices or P&L — those derive from the fills. Returns the updated trade in full. Requires signing in with a LuxAlgo account (OAuth).

输入参数key必填tagsnotesratingaddTagscontext必填mistakesreviewedstopLossplaybookIdremoveTagsaddMistakes另有 2 个

journal_write_note

Write a journal note

Add a new note to a trading day — any day, traded or not; `date` is YYYY-MM-DD in the journal timezone. Days hold any number of notes, so this never overwrites: to change an existing note use journal_update_note, and for a note about one specific trade use journal_update_trade's `notes`. Returns the note with its id. Day notes in the LuxAlgo journal: https://docs.luxalgo.com/platform/workspaces/journal/notes Requires signing in with a LuxAlgo account (OAuth).

输入参数body必填date必填context必填

journal_update_note

Update a journal note

Replace a day note's text and/or move it to another day, by note id (from journal_get_day or journal_search_notes). The body is replaced whole — to append, read the current text first and send the full new version. Trade notes are edited with journal_update_trade, not here. Returns the updated note. Day notes in the LuxAlgo journal: https://docs.luxalgo.com/platform/workspaces/journal/notes Requires signing in with a LuxAlgo account (OAuth).

输入参数bodydatenoteId必填context必填

版本历史

4
  1. v2.1.0最新Oct 26, 2026
  2. v2.0.0Oct 25, 2026
  3. v1.5.0Sep 25, 2026
  4. v1.0.0Sep 16, 2026

评分

已满足适用检查项的 100%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通必需25 分
  • 已声明认证方式必需10 分
  • 已列出工具必需15 分
  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分

其他 Algo 集成