TL;DR
大規模言語モデルはファイナンスの推論が得意である一方、実際にファイナンスの数理計算を行う点では目に見えて不安定です。LLMにオプションの価格を聞くと、返ってくる価格が実行のたびにズレることがあります。ギリシャ(Greeks)を聞くと、特にそれ以外の高次(ヴァンナ、チャーム、スピード)は、間違っていたり一貫性がなかったりすることが頻繁にあります。
これは既知の失敗パターンであり、特定のモデルに限った問題ではありません。解決策は標準的なエンジニアリングです。専用の計算機を呼び出してください。この投稿では、LangChainエージェントに73の決定論的(deterministic)な定量ファイナンスのエンドポイント(オプション価格、ギリシャ、リスク指標、ポートフォリオ最適化、モンテカルロ、バックテストなど)へのアクセスを、たった1行のコードで与える方法を説明します。最初の1,000回/日までは無料です(サインアップ不要)。
30秒でわかる問題
# 本当はこうなってほしい
response = llm.invoke("Price a European call: spot=100, strike=105, 6 months, 20% vol, 5% rate")
# "$4.58" ✓
# 実運用では実際にこうなる
# - 価格は近いところに着地することもあるが、実行のたびにブレる
# - デルタ、ガンマ、ベガは概ね妥当なこともあるが、ヴァンナ、チャーム、スピード、カラーはしばしば誤りまたは不整合
# - 連鎖的な推論に依存する数値(IVソルバー、バリアオプション、経路依存)はさらに悪化する
数理は決定論的です。モデルが決定論的ではありません。エージェント駆動の用途(バックテスト、リスク管理、ペーパートレーディング、分析パイプラインなど)では同じ入力なら同じ出力が必要です。
解決策:QuantOracle
QuantOracleはREST APIで、純粋な定量計算機63個に加えて、10個の「コンポジット」ワークフロー(戦略バックテスト、ポートフォリオのリバランス計画、オプション戦略オプティマイザ、ヘッジ推奨、完全なリスクテアシート)を備えています。Hull、Wilmott、Bailey & Lopez de Pradoに対して引用検証済みです。
- 1,000回無料コール/IP/日、APIキー不要
- 有料プランはx402マイクロペイメントをUSDC(BaseまたはSolana)で使用($0.002〜$0.10/コール)
- 決定論的:同じ入力は常に同じ出力を生成
- MCPサーバー、LangChainツールキット、OpenAI GPT、素のRESTのすべてに対応
LangChainに1行で組み込む
pip install langchain-quantoracle langchain-openai langchain
from langchain_quantoracle import QuantOracleToolkit
from langchain_openai import ChatOpenAI
from langchain.agents import AgentExecutor, create_tool_calling_agent
from langchain_core.prompts import ChatPromptTemplate
# QuantOracleのすべてのツールを読み込む — 73のエンドポイントがすべてLangChainのツールになる
tools = QuantOracleToolkit().get_tools()
llm = ChatOpenAI(model="gpt-4o")
prompt = ChatPromptTemplate.from_messages([
("system", "You are a quant analyst. Use QuantOracle tools for all financial math — never compute in-context."),
("human", "{input}"),
("placeholder", "{agent_scratchpad}"),
])
agent = create_tool_calling_agent(llm, tools, prompt)
executor = AgentExecutor(agent=agent, tools=tools, verbose=True)
以上です。これで、あなたのエージェントにはブラック=ショールズ、22のポートフォリオ・リスク指標、ケリー(Kelly)サイズ、13のテクニカル指標、モンテカルロ、戦略バックテスト、そして60以上のその他が備わります。
例1:ギリシャ付きでオプションを価格付けする
result = executor.invoke({
"input": "Price a European call with spot=100, strike=105, 6 months to expiry, "
"20% annualized vol, 5% risk-free. I want the price, delta, gamma, vega, and theta."
})
エージェントは適切なツール(options_price)を選び、それを呼び出して次を返します:
Price: $4.58
Greeks:
Delta: 0.4612
Gamma: 0.0281
Theta: -0.0211 (daily)
Vega: 0.2808
これらは完全に一致するブラック=ショールズの値です。実行のたびに再現できます。
例2:リターン系列から完全なリスク分析
result = executor.invoke({
"input": "Price a European call with spot=100, strike=105, 6 months to expiry, "
"20% annualized vol, 5% risk-free. I want the price, delta, gamma, vega, and theta."
})
エージェントは適切なツール(options_price)を選び、それを呼び出して次を返します:
Price: $4.58
Greeks:
Delta: 0.4612
Gamma: 0.0281
Theta: -0.0211 (daily)
Vega: 0.2808
これらは完全に一致するブラック=ショールズの値です。実行のたびに再現できます。
例2:リターン系列から完全なリスク分析
返却形式: {"translated": "翻訳されたHTML"}
result = executor.invoke({
"input": "ここでは日次リターンがあります: [0.01, -0.02, 0.03, 0.005, -0.01, 0.02, -0.015, 0.025, "
"0.01, -0.005, 0.015]。完全なリスク分解を教えてください。"
})
エージェントは risk_full-analysis のコンポジット(1回のAPI呼び出しで、7回の個別呼び出しを置き換えます)を呼び出し、次を返します:
リスク・ティアシート(11期間):
シャープ: 2.83
ソルティノ: 4.59
VaR(95%): -0.03
最大ドローダウン: -0.03
ケリーのレバレッジ: 10.65x
ハースト: 0.50(中立 — ランダムウォーク)
CAGR: 122.98%
同じ入力は常に同じ出力を生成します。ドリフトなし、幻覚(ハルシネーション)なし、シャープの計算が不安定になることもありません。
例 3: 戦略をバックテストする
result = executor.invoke({
"input": "この価格系列で 20/50 SMA のクロスオーバーをバックテストしてください: "
"[100, 101, 102, ...]。初期資本 $10000、5 bps の手数料。"
})
エージェントは backtest_strategy(約10回の個別呼び出しを置き換えるコンポジットのエンドポイント)を呼び出して、次を受け取ります: シャープレシオ、カルマー、最大ドローダウン、勝率、取引リスト、エクイティカーブ、そして買い持ち(ベンチマーク)との比較。
コンポジットと個別計算機とバッチの使い分け
ツールキットには、状況に応じて3つのレベルのツールが用意されています:
-
個別計算機(
options_price,risk_portfolio,stats_hurst-exponent, ...)—きめ細かな制御。1回の呼び出しで扱う概念は1つだけです。無料枠。 -
コンポジットのワークフロー(
backtest_strategy,portfolio_rebalance-plan,options_strategy-optimizer,hedging_recommend,risk_full-analysis, ...)—5〜15個の計算機呼び出しを1つの往復(ラウンドトリップ)にまとめ、目的に合わせた出力を返します。有料のみ(1件あたり $0.015〜$0.10)ですが、部品を手作業でつなぎ合わせるより、はるかに安く、そして速くなります。 -
バッチエンドポイント(
POST /v1/batch)—1つのHTTPリクエストで、最大100件まで任意の計算機呼び出しを実行します。パラメータスイープ、ウォークフォワードのバックテスト、またはレイテンシがコストを支配するようなあらゆるワークロードに最適です。価格は個別の合計で、上乗せ(マークアップ)はありません。IPあたり最初のバッチ呼び出しは無料。次のバッチは x402 により支払いが発生します。
目安:
- 1回の計算 → 個別計算機
- 名前付きのワークフロー(リスク分析、バックテスト、ヘッジ選定)→ コンポジット
- 多数の小さな計算を同時に → バッチ
1回のバックテスト実行が、1回ずつ別々にHTTP呼び出しすると200回になる場合でも、バッチ呼び出しは2回になります。エージェントが反復(イテレート)するなら、通常はレイテンシとコストの両方でバッチが勝ちます。
カテゴリでフィルタしてツール一覧を小さく保つ
よくあるLangChainの落とし穴: プロンプトに73個のツールが入ると、小型モデルが混乱します。カテゴリでフィルタしてください:
# オプションのみのエージェント
tools = QuantOracleToolkit(categories=["options", "derivatives"]).get_tools()
# リスク/ポートフォリオのみのエージェント
tools = QuantOracleToolkit(categories=["risk", "portfolio", "stats"]).get_tools()
# 暗号資産にフォーカスしたエージェント
tools = QuantOracleToolkit(categories=["crypto", "simulate"]).get_tools()
利用可能なカテゴリ: options, derivatives, risk, indicators, simulate, portfolio, fixed-income, fi, stats, crypto, fx, macro, tvm, trade, pairs, backtest, hedging。
無料枠を超えたら
1,000回/日(IPごと)を超えると、APIは HTTP 402 を返し、x402 の支払い要件ヘッダーが付与されます。x402に対応したHTTPクライアント(例: AgentCash、Coinbase AgentKit)を使っている場合、支払いは自動です(BaseまたはSolana上のUSDCで、1回あたり $0.002〜$0.10)。それ以外の場合、ツールキットは例外を発生させるため、支払いレイヤーを自分で追加する必要があります。
これがエージェント型システムにとって重要な理由
エージェントがバックテスト中に50回のツール呼び出しを行うとき、すべての計算が正しくなければならない。ブラック=ショールズについて85%の精度しかないLLMでは、バックテストは作れません。作れるのはノイズだけです。すべての計算を決定論的な計算機に移すことで、次が実現します:
- 再現可能な結果(次回の実行で同じシャープが得られる)
- キャッシュ可能(入力ハッシュでメモ化できる)
- 監査可能(任意の手順を再実行できる)
- 高速(サーバ側で計算1回あたりミリ秒未満)
- 安価(同等のLLMトークンより桁違いに安い)
このパターン — 推論にはLLM+計算には決定論的API — は、生産(プロダクション)のエージェントシステムで実際に機能する唯一の考え方です。今これを取り入れておけば、エージェントが現実の操作を始めたとしても作り直す必要がありません。
リンク
返却形式: {"translated": "翻訳されたHTML"}- APIドキュメント: https://api.quantoracle.dev/docs
- ツールの検出: https://api.quantoracle.dev/tools
- x402 検出(Base + Solana): https://api.quantoracle.dev/.well-known/x402
- GitHub: https://github.com/QuantOracledev/quantoracle
- Pypi:
langchain-quantoracle - MCP サーバー:
npx quantoracle-mcp(npm) - OpenAI GPT: https://chatgpt.com/g/g-69d9c28bddb481918e674e2f9d9f3e97-quantoracle
無料プランは充実しており、サインアップは不要です。MITライセンスです。金融数学に触れるエージェントを作っているなら(オプションの価格設定、ポートフォリオ分析、リスク、バックテストなど)、自作する前に一度試してみてください。

