options-payoff について
options-payoff は、画像やテキストからオプション戦略を分析するスキルです。満期時の損益と Black-Scholes による理論価値を計算し、入力を調整できるインタラクティブな HTML チャートを生成します。
主な機能
- 01戦略の識別と各レッグ情報の抽出
- 02満期損益と理論価値の計算
- 03複数のスプレッドとカスタム戦略への対応
- 04スライダーとリアルタイム損益統計
- 05インタラクティブチャートまたは単体 HTML の生成
活用シーン
- 01バーティカルスプレッドやバタフライの損益範囲の確認
- 02IV、満期までの日数、現物価格の調整
- 03損益分岐点と最大利益・損失の確認
- 04オプション戦略の入力値をチャート化
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ himself65/ finance-skills --skill options-payoffインストール後、Claude Code で/options-payoffを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
README.mdreferences/bs_code.mdstrategies.md詳細
オプション損益曲線スキル
ホストが以下のシェルプローブをまだ実行していない場合(たとえば Codex)、セットアップ方法を選ぶ前に、シェルツールを使って ! で囲まれたコマンドを実行してください。実際の出力を使用し、シェルにアクセスできない場合は、その制限を報告してください。
ホストで利用可能なビジュアライゼーションツールを使ってインタラクティブな HTML チャートを生成します。Codex では、以下を表示するスタンドアロンの HTML ファイルを生成します。
- 満期時の損益曲線(灰色の破線)— 満期時の本質的価値
- 理論価格曲線(色付きの実線)— 現在の DTE/IV における Black-Scholes 価格
- すべての主要パラメーターを調整する動的スライダー
- リアルタイム統計:最大利益、最大損失、損益分岐点、現在の原資産価格での損益
Step 1: ユーザー入力から戦略を抽出する
ユーザーがスクリーンショットまたはテキストを提供したら、以下を抽出します。
| フィールド | 確認場所 | 不明な場合のデフォルト |
|---|---|---|
| 戦略タイプ | タイトルバー/レッグの説明 | "custom" |
| 原資産 | ティッカーシンボル | SPX |
| 権利行使価格 | タイトルまたはレッグ表の K1、K2、K3... | 最も近い端数のない価格 |
| 支払い/受け取りプレミアム | 約定価格または平均価格 | 5.00 |
| 数量 | ポジションサイズ | 1 |
| 乗数 | 株式オプションは 100、SPX は 100 | 100 |
| 満期 | タイトルの日付 | 30 DTE |
| 現在価格 | スクリーンショットまたはテキストに表示された原資産の現在価格 | ライブ価格(下記参照)。価格を取得できない場合のみ中央の権利行使価格 |
| IV | グリークス欄の表示値、またはベガからの推定値 | 20% |
| 無リスク金利 | — | 4.3% |
スクリーンショットの現在価格:現在価格は原資産の現在価格です。ブローカーのスクリーンショットでは省略されていたり、権利行使価格から離れた場所に表示されていたりすることがよくあります。権利行使価格のラベルから読み取らないでください。表示されている価格を使い、なければライブ価格(SPX の場合は下記のプローブ、その他の原資産の場合は yfinance)を使用してください。価格を取得できない場合に限り中央の権利行使価格を使い、その旨をユーザーに伝えてください。
現在の SPX 参照価格:
!`python3 -c "exec('try:\n import yfinance as yf\n p=yf.Ticker(\'^GSPC\').fast_info[\'lastPrice\']\n print(f\'SPX ≈ {p:.0f}\')\nexcept Exception:\n print(\'SPX price unavailable — check market data\')')"`
Step 2: 戦略タイプを特定する
以下の対応する戦略に当てはめ、references/strategies.md の該当セクションを参照してください。
| 戦略 | レッグ | 主な識別要素 |
|---|---|---|
| butterfly | K1 を買い、K2 を 2 枚売り、K3 を買う | 3 つの権利行使価格、タイトルに "Butterfly" |
| vertical_spread | K1 を買い、K2 を売る(同じ満期) | 2 つの権利行使価格、デビットまたはクレジット |
| calendar_spread | 遠い満期の K を買い、近い満期の K を売る | 同じ権利行使価格、2 つの満期 |
| iron_condor | K2/K3 を売り、K1/K4 のウィングを買う | 4 つの権利行使価格、2 つのスプレッド |
| straddle | K のコールを買い、K のプットを買う | 同じ権利行使価格、両方のオプションタイプ |
| strangle | OTM コールを買い、OTM プットを買う | 2 つの権利行使価格、どちらも OTM |
| covered_call | 株式 100 株をロングし、K のコールを売る | 株式+ショートコール |
| naked_put | K のプットを売る | 単一レッグ |
| ratio_spread | K1 を 1 枚買い、K2 を N 枚売る | 数量が不均等 |
一覧にない戦略では custom モードを使い、個々のレッグに分解して損益を合算してください。
Step 3: 損益を計算する
Black-Scholes プット価格
d1 = (ln(S/K) + (r + σ²/2)·T) / (σ·√T)
d2 = d1 - σ·√T
put = K·e^(-rT)·N(-d2) - S·N(-d1)
Black-Scholes コール価格(プット・コール・パリティによる)
call = put + S - K·e^(-rT)
バタフライのプット損益(満期時)
if S >= K3: 0
if S >= K2: K3 - S
if S >= K1: S - K1
else: 0
1 株あたりの純損益 = 損益 − 支払いプレミアム
バーティカルスプレッド(コールのデビット)の損益(満期時)
long_call = max(S - K1, 0)
short_call = max(S - K2, 0)
payoff = long_call - short_call - net_debit
カレンダースプレッドの理論価格
カレンダースプレッドは単純な満期関数では表せません。必ず両方のレッグに BS 価格を使用してください。
value = BS(S, K, T_far, r, IV_far) - BS(S, K, T_near, r, IV_near)
カレンダースプレッドの満期曲線では、近い満期のレッグは無価値となり、遠い満期のレッグには残存期間 T での BS 価格を使います。
アイアンコンドルの損益(満期時)
put_spread = max(K2-S, 0) - max(K1-S, 0) // short put spread
call_spread = max(S-K3, 0) - max(S-K4, 0) // short call spread
payoff = credit_received - put_spread - call_spread
Step 4: ウィジェットをレンダリングする
visualize:read_me が利用可能な場合は、作成前に ["chart", "interactive"] モジュールを読み込み、visualize:show_widget を使ってレンダリングしてください。それ以外の場合は、文書化されたインターフェースに従い、利用可能なホストのビジュアライゼーションツールを使ってください。インラインレンダラーのない Codex では、チャートの依存関係と CSS を含む完全な HTML ドキュメントをワークスペースに保存し、可能であればブラウザーで動作を確認して、クリック可能なファイルリンクを返してください。以下のすべてのコントロールと計算を維持してください。ホストが公開していないツールは呼び出さないでください。
必須のコントロール(スライダー)
構成セクション:
- すべての権利行使価格(戦略に応じて K1、K2、K3 など)
- 支払った/受け取ったプレミアム
- 数量
- 倍率(デフォルトは 100。明確にするため表示します)
価格変数セクション:
- IV %(5~80%、刻み幅 0.5)
- DTE — 満期までの日数(0~90)
- 無リスク金利 %(0~8%)
スポット価格:
- 全幅のスライダー。範囲 = [min_strike - 20%, max_strike + 20%]。デフォルトは実際の現在のスポット価格
必須の統計カード(リアルタイム更新)
- 最大利益(満期時)
- 最大損失(満期時)
- 損益分岐点(両側の戦略では両方を表示)
- スポット価格時点の現在の理論 P&L
チャート仕様
- X 軸:SPX/原資産価格
- Y 軸:合計 USD P&L(1 株あたりではありません)
- 青の実線 = 現在の DTE/IV における理論値
- 灰色の破線 = 満期時のペイオフ
- 緑の破線の垂直線 = 権利行使価格(K2 の中央の権利行使価格は明るく表示)
- 琥珀色の破線の垂直線 = 現在のスポット価格
- 0 より上の塗りつぶし = 緑、透明度 10%;0 より下 = 赤、透明度 10%
- ツールチップ:ホバー時に両方の曲線を表示
コードテンプレート
ウィジェット内で次の JS 構造を使用し、戦略に応じて pnlExpiry() と bfTheory() を調整してください。
// Black-Scholes helpers (always include)
function normCDF(x) { /* Horner approximation */ }
function bsCall(S,K,T,r,sig) { /* standard BS call */ }
function bsPut(S,K,T,r,sig) { /* standard BS put */ }
// Strategy-specific expiry payoff (returns per-share value BEFORE premium)
function expiryValue(S, ...strikes) { ... }
// Strategy-specific theoretical value using BS
function theoreticalValue(S, ...strikes, T, r, iv) { ... }
// Main update() reads all sliders, computes arrays, destroys+recreates Chart.js instance
function update() { ... }
// Attach listeners
['k1','k2',...,'iv','dte','rate','spot'].forEach(id => {
document.getElementById(id).addEventListener('input', update);
});
update();
ステップ 5:ユーザーに回答する
ウィジェットをレンダリングした後、次の内容を簡潔に説明します。
- 検出された戦略と、各レッグの割り当て方法
- 現在の設定における最大利益/最大損失
- 重要なポイントを 1 つ(例:「現在のスポット価格は利益ゾーンを 950 ポイント下回っており、満期は明日です」)
簡潔にまとめてください。チャートを見れば分かります。
参考ファイル
references/strategies.md— 各戦略タイプの詳細なペイオフ計算式と例外ケースreferences/bs_code.md—normCDFを含む、コピーしてすぐ使える Black-Scholes の JS 実装
特定の戦略のペイオフ計算式の例外ケースが不明な場合は、関連する参考ファイルを読んでください。