Was macht trader-broker?
Der Order-Executor ist die einzige Fähigkeit in diesem Paket, die zu einer echten Order führen kann, daher ist sie die strengste. Eine Order erreicht den Markt erst nach drei separaten Toren, jedes Mal, für jede Order:
- trader-risk hat genau diese Order heute bestanden (durch Fingerabdruck abgeglichen).
- Der Benutzer hat im Chat ein explizites Ja für diese eine Order eingegeben.
- Der Benutzer hat auf Erlauben einmal auf Claudes eigener Berechtigungskarte geklickt, die erscheint, weil das Order-Tool auf „Benötigt Zustimmung" gesetzt ist.
Zwei Jas vom Benutzer, ein BESTANDEN von den Regeln. Kein Ja, keine Order.
${CLAUDE_SKILL_DIR} unten ist der Ordner dieser Fähigkeit (wo diese SKILL.md lebt).
python3 "${CLAUDE_SKILL_DIR}/ticket.py" show # jedes Ticket, READY oder nicht
python3 "${CLAUDE_SKILL_DIR}/ticket.py" approve --index 1 --reply "ja"
python3 "${CLAUDE_SKILL_DIR}/ticket.py" result --index 1 --status placed --broker-id ID --filled-qty 8 --filled-price 364.20
python3 "${CLAUDE_SKILL_DIR}/ticket.py" fill --symbol TSLA --side sell --qty 8 --price 370.04
python3 "${CLAUDE_SKILL_DIR}/ticket.py" flatten --symbol TSLA --qty 8
python3 "${CLAUDE_SKILL_DIR}/ticket.py" log
ticket.py spricht niemals mit einem Broker. Es rendert Tickets, prüft, ob eine Antwort ein echtes Ja für diese Order ist, erstellt das Glattstellungs-Ticket und führt das Log in trader/state/broker.json. Mit --now "2026-10-19 10:15" wird die Uhr festgelegt (New Yorker Zeit).
Was es liest und schreibt
| Datei | Inhalt |
|---|---|
trader/orders.json | die vorgeschlagenen Orders (trader-budget schreibt es; flatten ersetzt es) |
trader/state/risk.json | trader-risk's Entscheidungen; nur ein BESTANDEN von heute ist READY |
trader/state/broker.json | jedes Ja, Nein, platziert, fehlgeschlagen und ausgeführt, mit dem max. Verlust jedes Eintrags |
trader/portfolio.json | Geld und Aktien, aktualisiert durch fill und durch result --filled-qty |
trader/plan.json | die späteste Glattstellungszeit für flatten |
Setup A: Alpaca (offizieller MCP-Server, Claude Desktop)
Alpacas eigener Server ist auf github.com/alpacahq/alpaca-mcp-server (MIT). Er läuft auf dem Rechner des Benutzers in Claude Desktop. Er befindet sich nicht in Claudes Konnektor-Verzeichnis. Er handelt auf einem Papier-Konto, sofern nicht anders angegeben. Überprüft gegen den Quellcode vom 20.10.2026 (Version 2.4.0).
- Der Benutzer erstellt ein Alpaca-Konto und generiert Paper Trading-API-Schlüssel im Alpaca-Dashboard. Papier-Schlüssel sind getrennt von Live-Schlüsseln.
- Der Benutzer installiert
uv(es bietetuvx), von docs.astral.sh/uv. - In Claude Desktop: Einstellungen > Entwickler > Konfiguration bearbeiten. Dadurch wird
claude_desktop_config.jsongeöffnet (macOS:~/Library/Application Support/Claude/, Windows:%APPDATA%\Claude\). Der Benutzer fügt diesen Block hinzu (auch inclaude_desktop_config.example.jsonhier) und gibt seine eigenen Schlüssel in die Datei ein:
{
"mcpServers": {
"alpaca": {
"command": "uvx",
"args": ["alpaca-mcp-server"],
"env": {
"ALPACA_API_KEY": "fügen Sie hier Ihren Papierschlüssel ein, nur in dieser Datei",
"ALPACA_SECRET_KEY": "fügen Sie hier Ihr Papiergeheimnis ein, nur in dieser Datei",
"ALPACA_PAPER_TRADE": "true",
"ALPACA_TOOLSETS": "account,trading,stock-data"
}
}
}
}
Der env-Block übergibt die Schlüssel als Umgebungsvariablen an den Server. Schlüssel gelangen niemals in den Chat. Fragen Sie niemals danach, lesen Sie diese Datei niemals zurück ins Gespräch, und falls der Benutzer trotzdem einen Schlüssel einfügt, sagen Sie ihm, er solle diese Nachricht löschen und im Alpaca-Dashboard neue Schlüssel erstellen. ALPACA_PAPER_TRADE ist standardmäßig bereits true; das Hinschreiben macht es sichtbar. ALPACA_TOOLSETS ist optional und blendet die Werkzeuge aus, die der Benutzer nicht benötigt.
4. Claude Desktop neu starten.
5. Legen Sie die Tool-Berechtigungen fest. Anpassen > Konnektoren (Einstellungen > Konnektoren in älteren Versionen), öffnen Sie alpaca, und wählen Sie für jedes Tool Immer erlauben, Benötigt Zustimmung oder Blockiert:
- place_stock_order: Benötigt Zustimmung. Niemals Immer erlauben.
- jedes andere Tool, das etwas platziert, ändert, storniert oder schließt (cancel_order_by_id, replace_order_by_id, close_position, update_account_config): Benötigt Zustimmung.
- place_option_order, place_crypto_order, close_all_positions, cancel_all_orders, exercise_options_position, do_not_exercise_options_position: Blockiert, es sei denn der Benutzer hat einen Grund und sagt dies.
- schreibgeschützte Tools (get_account_info, get_all_positions, get_open_position, get_orders, get_clock, get_stock_snapshot, get_stock_latest_quote): Immer erlauben ist in Ordnung.
6. Prüfen Sie es: Bitten Sie Claude um die Alpaca-Kontoinformationen (schreibgeschützt) und bestätigen Sie im Alpaca-Dashboard, dass es sich um das Papierkonto handelt.
Setzen Sie in Claude Code (anstelle von Claude Desktop) das Order-Tool in .claude/settings.json auf ask: "permissions": {"ask": ["mcp__alpaca__place_stock_order"]}, und setzen Sie niemals ein Order-Tool in allow.
Bracket-Orders bei Alpaca. place_stock_order akzeptiert take_profit_limit_price und stop_loss_stop_price (und optional stop_loss_limit_price). Wenn eines davon vorhanden ist, setzt der Server order_class selbsttätig auf "bracket"; trader-budget schreibt es trotzdem, damit das Ticket es anzeigt. Ein Bracket funktioniert nur mit ganzen Aktien, mit time_in_force day oder gtc. Nachdem der Einstieg gefüllt wurde, warten der Stop-Loss und der Take-Profit als zwei Orders, die sich gegenseitig aufheben. Sie sind ebenfalls Tagesorders, also enden sie bei Börsenschluss: ein weiterer Grund, bis dahin glatt zu sein.
Setup B: Interactive Brokers (Konnektor in Claudes Verzeichnis)
Interactive Brokers veröffentlicht einen verifizierten Konnektor: claude.ai/directory/interactive-brokers (Konnektor-URL https://api.ibkr.com/v1/api/mcp). Fügen Sie ihn über Anpassen > Konnektoren > Konnektoren durchsuchen hinzu und melden Sie sich dort bei IBKR an, nicht im Chat. Die Auflistung besagt, dass Claude Handelsanweisungen entwerfen kann, die an das IBKR-Konto des Benutzers zur Überprüfung und Genehmigung gesendet werden, und dass Claude niemals Orders direkt an den Markt übermittelt. Bei IBKR erfolgt das endgültige Ja also ebenfalls in IBKR. Setzen Sie "broker": "ibkr" in trader/config.json. Setzen Sie auch seine Tools, die Orders entwerfen, auf Benötigt Zustimmung.
Schritte: Der Einstieg
ticket.py show. Nur READY-Tickets werden dem Benutzer angezeigt. Ein Ticket, das NICHT READY oder BLOCKED ist, geht zurück zu/trader-risk.- Zeigen Sie EIN Ticket und fragen Sie: "Diese Order platzieren? Antworten Sie mit ja oder nein." Eine Order pro Frage. Bieten Sie niemals "ja zu allen" an.
- Führen Sie
ticket.py approve --index N --reply "<wortwörtliche Antwort des Benutzers>"aus. Wenn "Not recorded" ausgegeben wird, war die Antwort kein explizites Ja für diese Order (z.B. "sicher", "ja zu allen" oder ein Ja, das eine andere Aktie oder Menge nennt). Fragen Sie erneut. Verwenden Sie niemals selbst eine Antwort in ein Ja um. - Erst nach "Recorded your yes" rufen Sie
place_stock_ordermit genau dem JSON auf, das das Ticket ausgegeben hat. Claudes Karte erscheint: Erlauben einmal oder Ablehnen. - Protokollieren Sie, was passiert ist:
ticket.py result --index N --status placed --broker-id <id> --filled-qty Q --filled-price P(die Ausführung aus der Antwort oderget_open_position), oder--status denied, oder--status failedmit--note. Eine fehlgeschlagene Order wird nicht ohne erneute Prüfung und neues Ja wiederholt. Das Log enthält den max. Verlust des Einstiegs für trader-risk's Tageslimit.
Schritte: Während die Position offen ist, und glatt bis Börsenschluss
- trader-alerts überwacht den Stop, das Ziel und die späteste Glattstellungszeit (
alerts.py add --from-plan). Die eigenen Orders des Brackets kümmern sich um das Stoppen. - Wenn der Stop-Loss oder der Take-Profit gefüllt wird, protokollieren Sie es:
ticket.py fill --symbol TSLA --side sell --qty 8 --price 358.32. - Bis
flat_by(15:55 New York) wird alles noch Offene glattgestellt:- Fragen Sie Alpaca, wie viele Aktien gehalten werden:
get_open_position(schreibgeschützt). ticket.py flatten --symbol TSLA --qty 8schreibt einen Marktverkauf für diese Aktien intrader/orders.json./trader-risk. Ein Verkauf, der nur schließt, was der Benutzer hält, wird niemals durch die Tageslimits oder das Einstiegsfenster blockiert.ticket.py show, dann das Ja des Benutzers für diese eine Order, wie oben.- Der Stop-Loss und der Take-Profit des Brackets halten diese Aktien noch, daher lehnt Alpaca einen neuen Verkauf ab, bis sie storniert sind:
get_orders(Status open, nested true) zeigt sie an;cancel_order_by_idstorniert jede einzelne (Benötigt Zustimmung). Dannplace_stock_ordermit dem Ticket, dannresult.
- Fragen Sie Alpaca, wie viele Aktien gehalten werden:
Beispiel: Der Spielfilm
ORDER 1 von 1, PAPER-Konto, Alpaca
KAUFEN 8 TSLA, Markt, gültig für heute
Stop-Loss 358.32
Take-Profit 370.04
max. Verlust etwa 46,88 $, wenn der Stop bei 358,32 gefüllt wird (kann in einem schnellen Markt schlechter sein)
Begründung: Opening-Range-Breakout bei TSLA: 8 Aktien, begrenzt durch Ihr max. Verlust von 50 $ pro Trade (8 x 5,86 $ = 46,88 $ beim Stop)
READY: trader-risk BESTANDEN, warte auf Ihr Ja
Claude wird place_stock_order mit genau diesem aufrufen:
{"symbol": "TSLA", "side": "buy", "qty": "8", "type": "market", "time_in_force": "day",
"order_class": "bracket", "take_profit_limit_price": "370.04", "stop_loss_stop_price": "358.32"}
Der Benutzer antwortet "ja". Claude zeichnet es auf, ruft place_stock_order auf, und die Karte zeigt „Claude möchte Place stock order verwenden" mit diesem JSON und zwei Knöpfen: Erlauben einmal, Ablehnen. „Erlauben einmal" sendet es an das Papierkonto. Die why und der Plan bleiben in der Datei; sie werden niemals gesendet.
Was es niemals tut
- Platziert niemals eine Order ohne alle drei Tore und niemals zwei Orders mit einem Ja.
- Platziert niemals Orders aus einer geplanten oder Hintergrundaufgabe: niemand ist da, um Ja zu sagen.
- Fragt niemals nach, liest niemals, speichert niemals oder wiederholt niemals API-Schlüssel oder Passwörter.
- Schaltet niemals
ALPACA_PAPER_TRADEoder"paper"auf live um. Das macht der Benutzer selbst. - Ruft niemals
close_all_positions,cancel_all_ordersoder Options- bzw. Crypto-Order-Tools eigenständig auf. - Verspricht niemals einen Ausführungspreis: ein Marktauftrag und ein Stop werden zu dem Preis ausgeführt, den der Markt hergibt.
Sicherheit
- Bildung und Werkzeuge, keine Finanzberatung. Ein BESTANDEN ist eine Regelprüfung, keine Empfehlung.
- Paper Trading standardmäßig (
"paper": true). Live zu gehen ist die eigene Entscheidung des Benutzers, in seiner eigenen Konfiguration. - Nichts in diesem Paket platziert eine Order außer trader-broker, und zwar nur, wenn alle drei Bedingungen gelten: trader-risk hat genau diese Order heute bestanden, der Benutzer hat im Chat ein explizites Ja für diese eine Order eingegeben, und der Benutzer hat auf Erlauben einmal auf Claudes eigener Karte geklickt, weil das Order-Tool auf „Benötigt Zustimmung" gesetzt ist (Anpassen > Konnektoren > Tool-Berechtigungen). Setzen Sie ein Order-Tool niemals auf „Immer erlauben".
- Keine Optionen, kein Margin, keine Leerverkäufe und kein Hebel, es sei denn, die Konfiguration erlaubt es und der Benutzer bestätigt.
- Broker-Schlüssel leben in Umgebungsvariablen oder der Claude Desktop-Konfiguration, niemals im Chat.