Skip to main content
Glama
knishioka

IB Analytics MCP Server

by knishioka
etf_calculator_usage_guide.md10.4 kB
# ETF計算ツール使用ガイド **作成日**: 2025年10月17日 **対象**: Claude Desktop、Claude Code、開発者 --- ## 📋 概要 ETF差し替え計算を**100%正確**に実行するためのMCPツール群。 すべての算術計算をPython側で実行し、LLMの計算ミスを完全に防止。 --- ## 🛠️ 利用可能なツール ### 1. `calculate_etf_swap` 単一ETFの差し替え計算 **用途**: - 「VOOをCSPXに差し替える場合、何株必要?」 - 「TLTからIDTLへの差し替えコストは?」 - 「年間メリットと投資回収期間は?」 **引数**: ```python calculate_etf_swap( from_symbol="VOO", # 売却するETF from_shares=40, # 売却株数 from_price=607.39, # 売却価格 from_expense_ratio=0.0003, # 経費率(0.03%) from_dividend_yield=0.0115, # 配当利回り(1.15%) from_withholding_tax=0.30, # 源泉税率(30%) to_symbol="CSPX", # 購入するETF to_price=714.78, # 購入価格 to_expense_ratio=0.0007, # 経費率(0.07%) to_dividend_yield=0.0115, # 配当利回り(1.15%) to_withholding_tax=0.00, # 源泉税率(0%) trading_fee_usd=75.0 # 取引コスト(オプション) ) ``` **出力例**: ```json { "from_etf": { "symbol": "VOO", "shares": 40, "price": 607.39, "total_value": 24295.60 }, "to_etf": { "symbol": "CSPX", "shares": 34, "price": 714.78, "total_value": 24302.52 }, "required_shares": 34, "purchase_amount": 24302.52, "surplus_cash": -6.92, "annual_withholding_tax_savings": 84.00, "annual_expense_change": -9.72, "annual_net_benefit": 74.28, "payback_period_months": 12.1 } ``` --- ### 2. `calculate_portfolio_swap` ポートフォリオ全体の差し替え計算 **用途**: - 「複数のETFを一括で差し替える場合の総コストは?」 - 「ポートフォリオ全体での年間メリットは?」 - 「総投資回収期間は?」 **引数**: ```python swaps_json = json.dumps([ { "from_symbol": "VOO", "from_shares": 40, "from_price": 607.39, "from_expense_ratio": 0.0003, "from_dividend_yield": 0.0115, "from_withholding_tax": 0.30, "to_symbol": "CSPX", "to_price": 714.78, "to_expense_ratio": 0.0007, "to_dividend_yield": 0.0115, "to_withholding_tax": 0.00 }, { "from_symbol": "TLT", "from_shares": 200, "from_price": 91.34, "from_expense_ratio": 0.0015, "from_dividend_yield": 0.0433, "from_withholding_tax": 0.30, "to_symbol": "IDTL", "to_price": 3.40, "to_expense_ratio": 0.0007, "to_dividend_yield": 0.0445, "to_withholding_tax": 0.15 } ]) calculate_portfolio_swap( swaps=swaps_json, trading_fee_usd=75.0 ) ``` **出力例**: ```json { "individual_results": [ { "from_etf": {...}, "to_etf": {...}, ... }, { "from_etf": {...}, "to_etf": {...}, ... } ], "summary": { "total_from_value": 42563.60, "total_to_value": 42570.72, "total_from_shares": 240, "total_to_shares": 5407, "surplus_cash": -7.12, "annual_withholding_savings": 199.18, "annual_expense_change": -4.89, "annual_net_benefit": 204.07, "payback_period_months": 4.4, "trading_fee": 75.0 } } ``` --- ### 3. `validate_etf_price_mcp` ETF価格の妥当性検証 **用途**: - 「この価格は正しい?異常に低くない?」 - 「参照ETFと比較して妥当?」 - 「計算前に価格をチェックしたい」 **引数**: ```python validate_etf_price_mcp( symbol="IDTL", price=3.40, reference_symbol="TLT", # オプション reference_price=91.34 # オプション ) ``` **出力例**: ```json { "symbol": "IDTL", "price": 3.40, "reference_symbol": "TLT", "reference_price": 91.34, "price_ratio": 0.037, "warnings": [ "ℹ️ IDTLはTLTの3.7%の価格 - 1株あたりの設計が異なる(正常)" ], "is_valid": true } ``` --- ## 📖 使用例 ### ケース1: 単一ETFの差し替え **ユーザー**: ``` TLT 200株をIDTLに差し替える場合、何株必要で年間メリットはいくら? ``` **Claude Desktopの処理**: ```python # Step 1: 価格取得(WebSearch または get_current_price) tlt_price = 91.34 idtl_price = 3.40 # Step 2: 価格検証 validation = validate_etf_price_mcp( symbol="IDTL", price=3.40, reference_symbol="TLT", reference_price=91.34 ) # 検証OK # Step 3: 計算実行 result = calculate_etf_swap( from_symbol="TLT", from_shares=200, from_price=91.34, from_expense_ratio=0.0015, from_dividend_yield=0.0433, from_withholding_tax=0.30, to_symbol="IDTL", to_price=3.40, to_expense_ratio=0.0007, to_dividend_yield=0.0445, to_withholding_tax=0.15 ) ``` **回答**: ``` TLT 200株をIDTLに差し替える場合: 必要株数: 5,373株 購入金額: $18,268.20 余剰金: -$0.20(ほぼ完全一致) 年間メリット: - 配当源泉税削減: $115.36/年 - 経費削減: $14.61/年 - 純メリット: $129.98/年 投資回収期間: 約7ヶ月 注意: IDTLはTLTの1/27の価格設計です(正常) ``` --- ### ケース2: ポートフォリオ全体の差し替え **ユーザー**: ``` VOO、QQQ、TLT、INDA、VNMをすべてアイルランド籍ETFに差し替えた場合の 総コストと年間メリットを教えて。 ``` **Claude Desktopの処理**: ```python # 各ETFの価格を取得 # ... (省略) ... # ポートフォリオ全体を計算 swaps = [ {"from_symbol": "VOO", "to_symbol": "CSPX", ...}, {"from_symbol": "QQQ", "to_symbol": "EQQQ", ...}, {"from_symbol": "TLT", "to_symbol": "IDTL", ...}, {"from_symbol": "INDA", "to_symbol": "SUIN", ...}, {"from_symbol": "VNM", "to_symbol": "EIMI", ...}, ] result = calculate_portfolio_swap( swaps=json.dumps(swaps), trading_fee_usd=75.0 ) ``` **回答**: ``` ポートフォリオ全体の差し替えサマリー: 総売却額: $75,806.00 総購入額: $75,860.00 必要な追加資金: $54.00 売却株数: 380株 購入株数: 5,643株 年間メリット: - 配当源泉税削減: $312.50/年 - 経費増加: -$18.20/年 - 純メリット: $294.30/年 投資回収期間: 約3ヶ月 取引コスト$75を考慮しても3ヶ月で回収可能 推奨: すべて差し替えを推奨(年間$294の純メリット) ``` --- ## 🔧 開発者向け: Pythonでの直接使用 ```python from decimal import Decimal from ib_sec_mcp.tools.etf_calculator import ETFSwapCalculator # 計算機の初期化 calculator = ETFSwapCalculator(trading_fee_usd=Decimal("75.00")) # 単一ETFの計算 result = calculator.calculate_swap( from_symbol="VOO", from_shares=40, from_price=Decimal("607.39"), from_expense_ratio=Decimal("0.0003"), from_dividend_yield=Decimal("0.0115"), from_withholding_tax=Decimal("0.30"), to_symbol="CSPX", to_price=Decimal("714.78"), to_expense_ratio=Decimal("0.0007"), to_dividend_yield=Decimal("0.0115"), to_withholding_tax=Decimal("0.00"), ) # 結果の表示 print(calculator.format_calculation_result(result)) # 結果へのアクセス print(f"必要株数: {result.required_shares}") print(f"年間メリット: ${result.annual_net_benefit:.2f}") print(f"投資回収期間: {result.payback_period_months:.1f}ヶ月") ``` --- ## ⚠️ 重要な注意事項 ### 1. 価格の正確性 MCPツールは入力された価格を信頼します。 **必ず最新の正確な価格を使用してください。** 推奨: - `get_current_price()` MCPツールで取得 - Yahoo Finance等の信頼できるソースから取得 - 計算前に`validate_etf_price_mcp()`で検証 ### 2. 計算の前提 - **取引コスト**: デフォルト$75(変更可能) - **端数処理**: ROUND_HALF_UP(四捨五入) - **通貨**: すべてUSD建て - **配当**: 年間ベース - **経費率**: 年間ベース ### 3. LLMは計算しない **重要**: LLMは以下を行わない: - ❌ 算術計算(足し算、掛け算、割り算) - ❌ 株数の計算 - ❌ 年間メリットの計算 - ❌ 投資回収期間の計算 すべての計算はPython側で実行され、LLMは結果を整形するのみ。 ### 4. 検証の重要性 計算前に必ず`validate_etf_price_mcp()`を使用: ```python # 悪い例(検証なし) result = calculate_etf_swap(...) # 誤った価格でも計算 # 良い例(検証あり) validation = validate_etf_price_mcp(...) if validation["is_valid"]: result = calculate_etf_swap(...) else: print("警告:", validation["warnings"]) # 人間に確認を求める ``` --- ## 🎯 よくある質問 ### Q1: なぜPython側で計算するのか? **A**: LLMは算術計算が苦手で、誤りが発生しやすいため。 **実例**: 今回のIDTL価格計算 - LLM計算: $88.67(26倍の誤り) - Python計算: $3.40(正確) ### Q2: なぜDecimal型を使うのか? **A**: float型は浮動小数点誤差があり、金融計算には不適切。 ```python # float型(誤差あり) 0.1 + 0.2 == 0.3 # False! # Decimal型(正確) Decimal("0.1") + Decimal("0.2") == Decimal("0.3") # True ``` ### Q3: 価格が異常に低い場合は? **A**: `validate_etf_price_mcp()`が警告を出します。 例: IDTL $3.40(TLTの1/27) ```json { "is_valid": true, "warnings": [ "ℹ️ IDTLはTLTの3.7%の価格 - 1株あたりの設計が異なる(正常)" ] } ``` **注意**: 警告が出ても`is_valid: true`の場合、価格は正常です。 参照ETFと設計が異なるだけです。 ### Q4: 複数アカウントの計算は? **A**: `calculate_portfolio_swap()`を使用してすべてのETFをまとめて計算。 各アカウントのETFを1つのリストにまとめれば、複数アカウントにも対応。 --- ## 📚 関連ドキュメント - **`docs/calculation_error_prevention_strategy.md`** - 対策戦略全体 - **`docs/phase1_completion_summary.md`** - Phase 1完了サマリー - **`ib_sec_mcp/tools/etf_calculator.py`** - 実装コード --- **作成者**: IB Analytics Development Team **最終更新**: 2025年10月17日 **バージョン**: 1.0.0

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/knishioka/ib-sec-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server