price-alerts について
米国市場のウォッチリストルールを最新の株価で評価し、新たに発生したアラートだけを報告するスキルです。クールダウンや重複抑制、市場時間の確認、任意の通知に対応し、注文の発注や変更は行いません。
主な機能
- 01価格と指標のルール評価
- 02新規アラートのみ報告
- 03ラッチとクールダウンの適用
- 04市場時間と古い株価の確認
- 05テキストと JSON の出力
- 06任意の通知先に対応
活用シーン
- 01ウォッチリストの価格、ストップ、目標値の監視
- 02日次変動、指標、決算時期の確認
- 03設定済みのアラート通知の送信
- 04クールダウン状態を更新せず条件を確認
MCP 対応
接続済みの Alpaca または TradingView MCP サーバーを使い、スクリプトの代わりに読み取り専用の株価や指標を取得できます。アラートルールと重複抑制の状態処理は同じです。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ eli-alvarado/ us-watchlist-alerts --skill price-alertsインストール後、Claude Code で/price-alertsを入力して読み込まれたか確認します。
詳細
価格アラート(米国市場)
ウォッチリスト(watchlist-manager を参照)のアラートルールを最新の株価に照らして評価し、新しいアラートのみを報告します。
投資助言ではありません。注文の発注、変更、取消は絶対に行わないでください。アラートが発生した場合も、ブローカーツールが接続されている場合も、この会話でユーザーがその注文を明示的に確認した場合を除き、注文を行わないでください。
実行方法
python scripts/alerts.py --watchlist watchlist.json --state .alert_state.json # text output
python scripts/alerts.py --format json # machine-readable
python scripts/alerts.py --force-session # evaluate even when market closed
python scripts/alerts.py --dry-run # don't update cooldown state
python scripts/alerts.py --notify # also deliver via WATCHLIST_NOTIFY sinks
python scripts/market_calendar.py # current ET session
出力:ALERT <message> の行、no new alerts、または「アラートセッション外」を示すメモです。データエラーは標準エラー出力に WARN として出力されます。NOTIFY <sink> は通知の配信を確認します。シンクのエラーは WARN notify … として出力され、チェックを中断してはいけません。通知シンクをブローカーとして扱わないでください。
アラートの種類
| type | value | 発生条件 | kind |
|---|---|---|---|
price_above / price_below | 価格 | 最終価格が値以上/以下 | 水準 |
stop_hit | 価格(デフォルト:ティッカーの stop) | ロング:最終価格 <= stop、ショート:最終価格 >= stop | 水準(stop が設定されている場合は暗黙的に有効) |
target_hit | - | 最終価格がいずれかの targets エントリーを超える | 水準(targets が設定されている場合は暗黙的に有効) |
pct_change_up / pct_change_down / pct_move | % | 前日終値からの変化率 >= 値 | 日次 |
gap_up / gap_down | %(デフォルト 2) | 前日終値に対する始値 | 日次 |
new_52w_high / new_52w_low | - | 最終価格が過去 252 取引日の値幅を超える | 日次 |
near_52w_high / near_52w_low | %(デフォルトは settings.near_52w_pct) | 52 週高値/安値から値%以内 | 日次相当(水準ラッチ) |
golden_cross / death_cross | fast、slow(50/200) | 最新バーで SMA の fast が slow をクロスする | 日次 |
cross_above_ma / cross_below_ma | MA の期間(デフォルト 50) | 最終終値が SMA をクロスする | 日次 |
rsi_above / rsi_below | RSI 水準。period(14)は任意 | 日次終値に対するワイルダー RSI | 水準 |
iv_above / iv_below | IV のパーセンテージ | 非公式の Yahoo ATM IV(最も近い満期)。欠損または 0 の場合はスキップ | 水準 |
volume_spike | 倍率(デフォルト 2.0) | 本日の出来高 >= 値 x 20 日平均 | 日次 |
earnings_within | 日数(デフォルト 3) | 次回決算日まで N 日以内 | 日次 |
intraday_range_pct | % | (day_high-day_low)/prev_close。高値/安値がない場合はスキップ | 日次 |
任意のルールに cooldown_minutes を設定すると、settings.cooldown_minutes を上書きできます。
スパム防止ルール(scripts/alerts.py で実装、状態は .alert_state.json に保存)
- 水準アラートのラッチ:一度発生すると、価格が
rearm_pct(デフォルト 0.5%)分だけ水準を逆方向に超えるまで通知されません。株価が 240 ドル付近で推移していても、通知が繰り返されることはありません。iv_*は、ATM IV がしきい値を超えなくなると再アームされます。 - 日次イベントアラート:ティッカー/種類ごとに、取引日あたり最大 1 回だけ発生します。
- クールダウン(
cooldown_minutes、デフォルト 240)は、再発するすべてのアラートに適用されます。 - 上限は
max_alerts_per_run(デフォルト 20)です。上限を超えたアラートは状態に記録されないため、次回実行時に発生する可能性があります。多数のアラートが発生した場合は、長文を羅列するのではなく「アラート 7 件、うち TSLA が 4 件」のように要約してください。 - 状態ファイルが存在しない場合、または破損している場合は、新しい状態で開始しますが、この実行では重複が発生する可能性があることをユーザーに警告してください。
targets[]の各水準は、それぞれ独立したラッチ付きtarget_hitです(T1 の発生によって T2 が抑制されることはありません)。
市場時間(America/New_York、scripts/market_calendar.py で処理)
- プレマーケットは04:00~09:30、通常取引時間は09:30~16:00、時間外取引は16:00~20:00 ETです。短縮取引日は(感謝祭の翌日、クリスマスイブ、平日の7月3日)13:00に取引を終了し、時間外取引は17:00までです。
- NYSEの休場日:元日(土曜日の場合は振替休場なし)、キング牧師記念日、プレジデンツデー、聖金曜日、メモリアルデー、ジューンティーンス、独立記念日、レイバーデー、感謝祭、クリスマス(土曜日なら金曜日、日曜日なら月曜日に振替)。臨時休場:同梱の
data/holidays_overrides.json、NYSE_EXTRA_CLOSURES/settings.extra_closures、および(Alpacaのキーが設定されている場合)公式カレンダーにない平日です。カレンダーでは営業日となっている平日に株価が古く見える場合は、その旨を伝えてください。 settings.sessionsでアラートを実行する時間帯を指定します。デフォルトは["regular"]です。時間外取引では"pre"/"after"を追加します。時間外取引の株価情報は薄く、無料の情報源では遅延する場合があることに注意してください。- 時刻は必ずETで記載してください(ユーザーの現地時刻がわかる場合は、「10:05 ET / 9:05 CT」のように併記してください)。
データソース(scripts/quotes.py、次の順に自動フォールバック)
- 指定されている場合は
--fixtureのパス(テスト/デモ専用)。 ALPACA_API_KEY_IDおよびALPACA_API_SECRET_KEYが設定されている場合は、Alpacaのスナップショットと日足バー(米国の公式フィード)。- インストールされている場合は
yfinance(pip install yfinance)。 - Yahooの公開チャートAPI(標準ライブラリを使用、非公式、ベストエフォート):まず
query1.finance.yahoo.com、次にquery2。 FINNHUB_API_KEYが設定されている場合は、Finnhubの株価情報とローソク足。ALPHAVANTAGE_API_KEYが設定されている場合は、Alpha Vantageの日足データ。
--providerまたはWATCHLIST_PROVIDERで使用するデータソースを指定できます。HTTP 429/5xxは再試行され、失敗はプロバイダー、HTTPステータス、ヒントが付いたQuoteErrorとして記録されます。無料データは約15分遅延する場合があります。精度が重要な場合は、その旨を伝えてください。
決算日は株価情報の取得後に補完され、最初に得られた情報が使われます。既存のフィールド(yfinance/fixture)→ Yahoo calendarEvents(キー不要)→ Finnhubの決算カレンダー→ Alpha VantageのEARNINGS_CALENDARの順です。株価情報のearnings_sourceには、採用された情報源が記録されます。
古い株価情報: --stale-after/WATCHLIST_STALE_AFTER/settings.stale_after_seconds(デフォルトは900)で設定します。通常取引時間中にas_ofがこの値より古い場合は警告してください。0を指定すると無効になります。
ATM IV: iv_above/iv_belowが設定されたティッカーのみ取得します。非公式のYahooオプションチェーンを使用し、最も近い満期日のATMコール/プットの平均値をパーセントで示します。IVランクではありません。確認するにはpython scripts/quotes.py AAPL --ivを実行してください。
通知(任意): WATCHLIST_NOTIFY=ntfy,slack,webhook,desktop,fileおよび/または--notifyを使用します。環境変数についてはREADMEを参照してください。空の結果/スキップ/ドライランでは通知しないでください。配信エラーは警告として扱います。
既知の制限事項: 臨時休場日はdata/holidays_overrides.json(不完全)に加え、環境変数/設定、および任意のAlpaca公式カレンダーのオーバーレイ(1日単位でキャッシュ)で管理されます。Yahooのエンドポイントは非公式です。docs/LIMITATIONS.mdを参照してください。
MCPの選択肢: alpaca MCP サーバー(alpacahq/alpaca-mcp-server)またはtradingview MCP(atilaahmettaner/tradingview-mcp)が接続されている場合、スクリプトの代わりに株価情報/インジケーターの取得に使用できます。その場合も同じルールとスパム防止ロジックを適用し、同じ形式で.alert_state.jsonを読み書きしてください。ブローカーのMCPは読み取り専用の呼び出しに限って使用してください。
レポート形式
🔔 3 new alerts (10:05 ET, regular session, data: yahoo, ~15m delayed)
- AAPL $241.50 is above $240.00 (thesis: services margin; stop $210, T1 $250)
- TSLA down -6.0% today, gapped down -5.0%, volume 3.0x avg
- TSLA reports earnings in 1 day (2026-10-16)
ティッカーごとにまとめ、状況説明として保存済みの投資仮説/ストップ価格/目標価格を含めてください。推奨はしないでください。アラートがない場合は短い一文だけを返すか、ハートビート実行中(HEARTBEAT.mdを参照)の場合は何も返さないでください。
チャットからアラートを作成
「AAPLが200を下回ったら通知して」→ python scripts/watchlist.py update AAPL --alert price_below:200 --append(ティッカーが未登録の場合は、先に追加してください)。ルールを平易な英語で確認してください。