trader-broker について
trader-broker は、Claude 向けに株式注文のチケットを作成・記録するトレーディングスキルです。注文ごとに当日の trader-risk の PASS、ユーザーの明示的な同意、Claude の個別承認がそろうまで発注しません。
主な機能
- 01注文チケットの確認と同意判定
- 02発注前に必要な3段階の承認
- 03注文結果と約定の記録
- 04決済チケットの作成
- 05ポートフォリオ状態の更新
活用シーン
- 01リスク審査済み株式注文の発注前確認
- 02ブローカーの結果と約定の記録
- 03保有株を決済する注文の作成
MCP 対応
Claude Desktop で Alpaca の MCP サーバーを設定する手順を説明しています。注文は設定済みのブローカーツールを通じて、承認フローに従って送信されます。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ jakeschincariol/ day-trader-skill --skill trader-brokerインストール後、Claude Code で/trader-brokerを入力して読み込まれたか確認します。
同梱ファイルclaude_desktop_config.example.jsonticket.py
詳細
trader-broker
注文実行ツールは、このパックの中で実際の注文につながる唯一のスキルなので、最も厳格です。注文が市場に到達するには、注文ごとに毎回、次の3つの独立したゲートをすべて通過する必要があります。
- trader-riskが本日、この注文と完全に一致する注文を承認していること(フィンガープリントで照合)。
- チャットで、ユーザーがこの注文に対して明示的に「はい」と入力していること。
- Claude独自の権限カードで、ユーザーが一度「許可」をクリックしていること。このカードは、注文ツールが「承認が必要」に設定されているため表示されます。
ユーザーからの「はい」が2回、ルールからのPASSが1回。どれか1つでも「はい」がなければ、注文は行われません。
以下の ${CLAUDE_SKILL_DIR} は、このスキルのフォルダー(SKILL.mdがある場所)です。
python3 "${CLAUDE_SKILL_DIR}/ticket.py" show # every ticket, READY or not
python3 "${CLAUDE_SKILL_DIR}/ticket.py" approve --index 1 --reply "yes"
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 はブローカーと通信しません。注文チケットを作成し、返信がその注文に対する本当の「はい」かを確認し、決済用チケットを作成して、ログを trader/state/broker.json に保存します。--now "2026-10-19 10:15" を指定すると、時刻を固定できます(ニューヨーク時間)。
読み書きするファイル
| file | what |
|---|---|
trader/orders.json | 提案された注文(trader-budgetが書き込みます。flatten は置き換えます) |
trader/state/risk.json | trader-riskの判定。今日のPASSだけがREADYになります |
trader/state/broker.json | 各エントリーの最大損失額とともに、すべての「はい」「いいえ」、注文の実行、失敗、約定を記録します |
trader/portfolio.json | 現金と株式。fill および result --filled-qty によって更新されます |
trader/plan.json | flatten の決済期限 |
セットアップ A:Alpaca(公式 MCP サーバー、Claude Desktop)
Alpaca の独自サーバーは github.com/alpacahq/alpaca-mcp-server(MIT)です。Claude Desktop 内でユーザーのコンピューター上で動作します。Claude のコネクターディレクトリには登録されていません。特に指定しない限り、ペーパー口座で取引します。2026-10-20 にソースを確認済みです(バージョン 2.4.0)。
- ユーザーが Alpaca アカウントを作成し、Alpaca ダッシュボードでペーパートレーディング用の API キーを作成します。ペーパーキーとライブキーは別々です。
- ユーザーが docs.astral.sh/uv から
uvをインストールします(uvxが含まれています)。 - Claude Desktop で、Settings > Developer > Edit Config を開きます。
claude_desktop_config.jsonが開きます(macOS:~/Library/Application Support/Claude/、Windows:%APPDATA%\Claude\)。ユーザーはこのブロックを追加し(ここにあるclaude_desktop_config.example.jsonにも記載されています)、ファイルに自分のキーを入力します。
{
"mcpServers": {
"alpaca": {
"command": "uvx",
"args": ["alpaca-mcp-server"],
"env": {
"ALPACA_API_KEY": "paste your paper key here, in this file only",
"ALPACA_SECRET_KEY": "paste your paper secret here, in this file only",
"ALPACA_PAPER_TRADE": "true",
"ALPACA_TOOLSETS": "account,trading,stock-data"
}
}
}
}
env ブロックは、環境変数としてキーをサーバーに渡します。
キーをチャットに入力してはいけません。 キーを尋ねたり、ファイルの内容を会話に読み込んだりしてはいけません。ユーザーがキーを貼り付けてしまった場合は、そのメッセージを削除し、Alpaca ダッシュボードで新しいキーを作成するよう伝えてください。
ALPACA_PAPER_TRADE はデフォルトですでに true です。記述すると、その設定が明示されます。ALPACA_TOOLSETS は任意で、不要なツールを非表示にします。
4. Claude Desktop を再起動します。
5. ツールの権限を設定します。 Customize > Connectors(古いバージョンでは Settings > Connectors)を開き、alpaca を選択し、各ツールに Always allow、Needs approval、または Blocked を設定します。
place_stock_order:Needs approval。Always allow にしてはいけません。- そのほかの、注文の発注、変更、キャンセル、決済を行うすべてのツール(
cancel_order_by_id、replace_order_by_id、close_position、update_account_config):Needs approval。 place_option_order、place_crypto_order、close_all_positions、cancel_all_orders、exercise_options_position、do_not_exercise_options_position:ユーザーに理由があり、そうするよう明言した場合を除き、Blocked。- 読み取り専用ツール(
get_account_info、get_all_positions、get_open_position、get_orders、get_clock、get_stock_snapshot、get_stock_latest_quote):Always allow で問題ありません。
- 動作を確認します。Claude に Alpaca 口座情報を(読み取り専用で)尋ね、Alpaca ダッシュボードでペーパー口座であることを確認します。
Claude Desktop の代わりに Claude Code を使う場合は、.claude/settings.json で注文ツールを ask に設定します:"permissions": {"ask": ["mcp__alpaca__place_stock_order"]}。注文ツールを allow に入れてはいけません。
Alpaca のブラケット注文。 place_stock_order は take_profit_limit_price と stop_loss_stop_price(および任意の stop_loss_limit_price)を受け取ります。どちらかが指定されると、サーバーは自動的に order_class を "bracket" に設定します。trader-budget ではチケットに表示されるよう、これも記述しています。ブラケット注文は整数株のみで、time_in_force は day または gtc に限られます。エントリー注文が約定すると、ストップロス注文とテイクプロフィット注文が、互いをキャンセルする2つの注文としてブローカーに預けられます。これらも day 注文なので、取引終了時に失効します。そのため、終了時までにポジションを解消しておく理由がもう一つあります。
セットアップ B:Interactive Brokers(Claude のディレクトリにあるコネクター)
Interactive Brokers は、検証済みのコネクターを公開しています:claude.ai/directory/interactive-brokers(コネクター URL https://api.ibkr.com/v1/api/mcp)。Customize > Connectors > Browse connectors から追加し、チャットではなく、そこで IBKR にサインインします。掲載情報によると、Claude は取引指示の草案を作成し、それをユーザーが確認して承認できるよう IBKR 口座に送信します。Claude が市場に注文を直接発注することはありません。つまり IBKR では、最終承認も IBKR 側で行います。trader/config.json で "broker": "ibkr" を設定します。注文の草案を作成するツールも Needs approval に設定してください。
手順:エントリー
ticket.py showを実行します。ユーザーに提示するのはREADYのチケットのみです。READYではない、またはBLOCKEDのチケットは/trader-riskに戻します。- チケットを1つだけ提示し、「この注文を発注しますか? yes または no で返信してください。」と尋ねます。1回の質問につき注文は1件です。「すべてにyes」といった選択肢は提示しません。
ticket.py approve --index N --reply "<the user's reply, word for word>"を実行します。「Not recorded」と表示された場合、この注文への明示的なyesではありません(たとえば、「sure」、「yes to all」、または別の銘柄や金額を指定したyesなど)。もう一度尋ねます。返信を自分でyesに変換してはいけません。- 「Recorded your yes」と表示された後に限り、チケットに表示されたJSONをそのまま使って
place_stock_orderを呼び出します。Claudeのカードが表示されます。「Allow once」または「Deny」を選択します。 - 結果を記録します。
ticket.py result --index N --status placed --broker-id <id> --filled-qty Q --filled-price P(レスポンスまたはget_open_positionから約定情報を取得)、または--status denied、あるいは--noteを付けた--status failedを使用します。失敗した注文は、新たな確認と新たなyesがない限り再試行しません。ログにはエントリーの最大損失額が保持され、trader-riskの日次上限に使用されます。
手順:注文が有効な間と、取引終了時まで
- trader-alertsが損切り価格、目標価格、指定時刻までにポジションを解消する期限を監視します(
alerts.py add --from-plan)。ストップ注文はブラケット注文自体が処理します。 - ストップロスまたはテイクプロフィットが約定したら、記録します。
ticket.py fill --symbol TSLA --side sell --qty 8 --price 358.32 flat_by(ニューヨーク時間15:55)までに、まだ保有中のポジションはすべて決済します。- Alpacaに保有株数を問い合わせます:
get_open_position(読み取り専用)。 ticket.py flatten --symbol TSLA --qty 8で、その株数分の成行売り注文をtrader/orders.jsonに書き込みます。/trader-risk。ユーザーの保有分を決済するだけの売り注文は、日次上限やエントリー可能時間帯によってブロックされることはありません。ticket.py showを実行し、上記のとおり、その注文に対するユーザーのyesを得ます。- ブラケット注文のストップロスとテイクプロフィットは引き続きその株式を対象としているため、キャンセルするまで新たな売り注文はAlpacaに拒否されます。
get_orders(status open、nested true)で該当注文を確認し、それぞれにcancel_order_by_idを実行します(承認が必要です)。その後、チケットを使ってplace_stock_orderを呼び出し、続けてresultを実行します。
- Alpacaに保有株数を問い合わせます:
例:一連の流れ
ORDER 1 of 1, PAPER account, Alpaca
BUY 8 TSLA, market, good for today
stop-loss 358.32
take-profit 370.04
max loss about $46.88 if the stop fills at 358.32 (it can fill worse in a fast market)
why: opening-range breakout on TSLA: 8 shares, bound by your $50 max loss per trade (8 x 5.86 = $46.88 at the stop)
READY: trader-risk PASS, waiting for your yes
Claude will call place_stock_order with exactly:
{"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"}
ユーザーが「yes」と返信します。Claudeはその返信を記録し、place_stock_orderを呼び出します。カードには、そのJSONと2つのボタン「Allow once」「Deny」とともに「Claude wants to use Place stock order」と表示されます。「Allow once」を選択すると、ペーパートレード口座に注文が送信されます。whyとプランはファイル内に保持され、送信されることはありません。
絶対に行わないこと
- 3つの承認条件すべてを満たさずに注文を発注することはありません。また、1回のyesで2件の注文を発注することもありません。
- スケジュール実行またはバックグラウンドタスクから注文を発注することはありません。yesを伝える人がその場にいないためです。
- APIキーやパスワードを求めたり、読み取ったり、保存したり、繰り返し伝えたりすることはありません。
ALPACA_PAPER_TRADEや"paper"をライブ取引に切り替えることはありません。切り替えるのはユーザー自身です。close_all_positions、cancel_all_orders、オプションまたは暗号資産の注文ツールを独自に呼び出すことはありません。- 約定価格を保証することはありません。成行注文とストップ注文は、市場で決まる価格で約定します。
安全性
- 金融アドバイスではなく、教育とツールの提供を目的としています。PASSはルールの確認結果であり、推奨ではありません。
- デフォルトではペーパートレードです(
"paper": true)。ライブ取引に切り替えるかどうかは、ユーザーが自身の設定で判断します。 - このパック内で注文を発注するのはtrader-brokerだけです。また、次の3つすべてを満たす場合に限ります。trader-riskが当日、その注文と完全に一致する注文を承認済みであること、チャットでユーザーがその注文に対する明示的なyesを入力したこと、注文ツールが「Needs approval」に設定されているため、ユーザーがClaude自身のカードで「Allow once」をクリックしたこと(Customize > Connectors > tool permissions)。注文ツールを「Always allow」に設定してはいけません。
- 設定で許可され、ユーザーが確認した場合を除き、オプション、証拠金取引、空売り、レバレッジは使用しません。
- ブローカーのキーは環境変数またはClaude Desktopの設定に保存し、チャットには記載しません。