ローカル LLM を金融取引の意思決定サポートに応用する — コードレビュー 4 段階カスタマイズの転用
前回の記事では、ローカル LLM(Ollama + Qwen3)を社内コードレビューに特化させる 4 段階のカスタマイズ手法を紹介しました。この仕組みは金融取引の意思決定サポートにもそのまま応用できます。
個人投資家が株式や BTC などの売買判断を行う際に、ニュース分析・テクニカル指標の解釈・リスク評価を自分の PC 上で、自分の投資ルールに基づいてAI に補助させる構成です。
なぜローカル LLM が金融取引に向いているのか
金融取引は、AI の活用にローカル環境が特に適している分野です。
| 利点 | 説明 |
|---|---|
| プライバシー | ポートフォリオ・売買履歴・資産額をクラウドに送信しない |
| コスト | 毎日の市場分析やニュース要約を API 課金なしで実行可能 |
| カスタマイズ | 自分の投資スタイル・リスク許容度に完全に特化できる |
| 速度 | ネットワーク遅延がなく、市場の急変時にも即座に分析可能 |
| 独立性 | API 障害やサービス停止の影響を受けない |
2024 年末時点で個人がビットコインの発行上限の約 69% を保有しており、個人投資家にとって自分だけの分析ツールを持つ意義はますます大きくなっています。
コードレビューから金融取引への対応表
前回の記事の 4 段階がどのように転用できるかを整理します。
| レベル | コードレビュー | 金融取引サポート |
|---|---|---|
| 1. Modelfile | コーディング規約を教える | 売買ルール・リスク管理ルールを教える |
| 2. RAG | 障害報告・設計書を検索 | 決算短信・ニュース・四季報を検索 |
| 3. Few-shot | 過去のレビュー事例を見せる | 過去の売買判断の成功/失敗事例を見せる |
| 4. LoRA | PR レビュー履歴で再訓練 | 金融センチメント分析データで再訓練 |
レベル 1:投資ルールを「教える」 ← すぐできる
レベル 2:市場情報を「渡す」 ← 1〜2日
レベル 3:売買パターンを「見せる」 ← 数日
レベル 4:金融の頭脳を「鍛える」 ← 1〜2週間
レベル 1:Modelfile に投資ルールを埋め込む(即日導入)
自分の投資ルール・リスク管理基準をシステムプロンプトとして設定します。
Modelfile の作成
# trading-advisor.Modelfile
FROM qwen3:14b
SYSTEM """
あなたは個人投資家のリサーチアシスタントです。
提示された銘柄情報・ニュース・チャートデータを分析し、
売買判断の材料を客観的に提示してください。
## あなたの役割
- 投資助言ではなく、情報の整理と分析の補助を行う
- 最終的な売買判断は投資家自身が行う
- 不確実な情報には必ず「不確実」と明記する
## リスク管理ルール(私の投資方針)
- 1 銘柄あたりの投資額はポートフォリオの 10% 以内
- 損切りラインは購入価格の -8%
- 利確目標は +15% を基本とし、トレンドに応じて調整
- レバレッジ取引は行わない
- 月間の最大損失額は総資産の 5% まで
## 分析フレームワーク
1. ファンダメンタルズ分析
- PER, PBR, ROE, 配当利回り
- 売上高・営業利益の成長率(直近 3 期)
- 自己資本比率、有利子負債比率
2. テクニカル分析
- 移動平均線(5日, 25日, 75日)との乖離
- RSI(30以下で売られすぎ、70以上で買われすぎ)
- MACD のクロス状況
- 出来高の変化
3. センチメント分析
- ニュースの論調(ポジティブ / ネガティブ / 中立)
- SNS での言及傾向(過熱感の有無)
- 機関投資家の動向(大量保有報告等)
## BTC・暗号資産の追加分析観点
- オンチェーン指標(アクティブアドレス数、取引所流入出量)
- Fear & Greed Index
- ハッシュレートの推移
- 規制ニュース(各国の法規制動向)
- 半減期サイクルとの関連
## 出力フォーマット
- **[判断]** 買い検討 / 売り検討 / 様子見 / 情報不足
- **[確信度]** 高 / 中 / 低(根拠の強さに基づく)
- **[根拠]** 3 つ以上の根拠を箇条書き
- **[リスク要因]** 想定されるリスク
- **[確認事項]** 判断前に追加確認すべき情報
⚠️ この分析は情報提供目的であり、投資助言ではありません。
投資判断はご自身の責任で行ってください。
"""
PARAMETER num_ctx 32768
PARAMETER temperature 0.2
PARAMETER repeat_penalty 1.1
モデルの作成と使用
# 投資分析モデルを作成
ollama create my-trading-advisor -f trading-advisor.Modelfile
# 使用例:個別銘柄の分析
ollama run my-trading-advisor "
トヨタ自動車(7203)について分析してください。
- 株価: 2,850円
- PER: 12.5倍
- PBR: 1.1倍
- 配当利回り: 3.2%
- 直近決算: 営業利益 前年比 +15%
- RSI: 42
- 25日移動平均線を下回っている
- 最近のニュース: 北米 EV 工場の増設を発表
"
コードレビューとの違い
コードレビューでは temperature 0.1(一貫性重視)でしたが、金融分析では 0.2 に少し上げています。市場分析には「複数の見方」を提示する柔軟性が必要だからです。ただし高すぎると根拠のない推測が混じるため、0.3 以上にはしません。
レベル 2:RAG で市場情報を検索させる(1〜2 日)
決算短信、アナリストレポート、自分の売買日誌など、蓄積した情報を検索させて分析の文脈を与えます。
取り込むべきドキュメント
docs/
├── earnings/ # 決算短信・四半期報告書
│ ├── 7203-toyota-2025q3.md
│ └── 9984-softbank-2025q3.md
├── market-analysis/ # 市場分析メモ
│ ├── us-interest-rate-2026.md
│ └── btc-halving-cycle.md
├── trade-journal/ # 自分の売買日誌 ← 最も重要
│ ├── 2026-01-trades.md
│ ├── 2026-02-trades.md
│ └── 2026-03-trades.md
├── rules/ # 投資ルール・戦略
│ ├── risk-management.md
│ └── sector-rotation-strategy.md
└── watchlist/ # 監視銘柄リスト
├── japanese-stocks.md
└── crypto-assets.md
売買日誌が最も重要な理由
コードレビューでは docs/(ビジネスロジックのドキュメント)が最も効果的でした。金融取引では売買日誌がこれに相当します。
# 2026-02-15 トヨタ自動車(7203)買い
- **エントリー**: 2,750円
- **根拠**: RSI 28 で売られすぎ、25日線から -5% 乖離、決算は好調
- **損切りライン**: 2,530円(-8%)
- **利確目標**: 3,160円(+15%)
- **結果**: 2026-03-01 に 3,020円で利確(+9.8%)
- **振り返り**: 利確目標前に売却したのは正解。その後 2,900円まで下落。
移動平均線へのリバウンドで利確する判断は今後も継続する。
この日誌が RAG に入っていれば、似た状況の銘柄を分析する際に「過去にこういう判断で成功/失敗した」という文脈を LLM が参照できます。
Open WebUI での構築
前回の記事で紹介した Open WebUI のナレッジベース機能をそのまま使えます。
# Open WebUI + Ollama を起動
docker run -d -p 3000:8080 \
-v ollama:/root/.ollama \
-v open-webui:/app/backend/data \
--name open-webui \
--restart always \
ghcr.io/open-webui/open-webui:ollama
- Workspace → Knowledge で
trade-journalナレッジベースを作成 - 売買日誌をアップロード
- チャットで
#trade-journal トヨタ自動車を分析してと入力
自動でニュースを取り込む
手動でドキュメントを追加するだけでなく、RSS フィードやニュース API から自動取得するスクリプトを組むとさらに実用的です。
#!/bin/bash
# fetch_market_news.sh - 市場ニュースを日次で取得
DATE=$(date +%Y-%m-%d)
OUTPUT="docs/news/${DATE}-market-news.md"
# 日経の主要ニュース(RSS を Markdown に変換)
curl -s "https://assets.wor.jp/rss/rdf/nikkei/news.rdf" | \
python3 -c "
import sys, xml.etree.ElementTree as ET
tree = ET.parse(sys.stdin)
print('# 市場ニュース ${DATE}\n')
for item in tree.findall('.//{http://purl.org/rss/1.0/}item'):
title = item.find('{http://purl.org/rss/1.0/}title').text
link = item.find('{http://purl.org/rss/1.0/}link').text
print(f'- [{title}]({link})')
" > "$OUTPUT"
echo "ニュースを取得しました: $OUTPUT"
レベル 3:Few-shot で売買パターンを学習させる(数日)
過去の「この状況ではこう判断した」という具体的な成功・失敗事例をプロンプトに埋め込みます。
Few-shot 事例ファイルの作成
[
{
"situation": "RSI 25, 25日線から-7%乖離, 決算は前年比+20%, セクター全体は下落トレンド",
"judgment": "[買い検討][確信度: 中] ファンダメンタルズは良好だが、セクター全体の下落が重石。RSI の売られすぎシグナルは信頼できるが、セクター反転の兆候を確認してからエントリーが安全。",
"result": "3週間後にセクター反転し+12%。待ってからのエントリーが正解だった。",
"category": "テクニカル+セクター分析"
},
{
"situation": "BTC 急落 -15%(24時間), Fear & Greed Index 12(Extreme Fear), 取引所への大量送金が確認",
"judgment": "[様子見][確信度: 高] Extreme Fear は歴史的に底値圏だが、取引所への大量送金は追加売り圧力を示唆。パニック売りが収まるまで 2〜3 日待つべき。",
"result": "さらに -8% 下落後に反発。3日待ってからのエントリーで +25%。",
"category": "暗号資産・センチメント"
},
{
"situation": "決算発表後に株価 +8% 急騰, 出来高は通常の 5 倍, PER は業界平均の 1.5 倍に",
"judgment": "[様子見][確信度: 中] 好決算は織り込み済みの可能性。出来高急増は短期筋の参入を示唆。PER が割高水準のため、調整を待ってからの検討が妥当。",
"result": "1週間後に -5% 調整。そこでエントリーし +10%。",
"category": "ファンダメンタルズ・タイミング"
},
{
"situation": "日銀が利上げを発表, 銀行セクター全体が +3%, 保有中の三菱UFJ が +4%",
"judgment": "[保有継続][確信度: 高] 利上げは銀行セクターにとってポジティブ。金利上昇局面では銀行株の利ざや拡大が見込める。利確は時期尚早。",
"result": "その後 2ヶ月で +18%。保有継続の判断は正解。",
"category": "マクロ経済・セクター"
}
]
Few-shot を含む Modelfile
# trading-fewshot.Modelfile
FROM qwen3:14b
SYSTEM """
あなたは個人投資家のリサーチアシスタントです。
以下の投資ルールと過去の判断事例に基づいて分析してください。
## 投資ルール
(レベル 1 と同じルールをここに記述)
## 過去の判断事例
### 事例 1: テクニカル + セクター分析
状況: RSI 25, 25日線から-7%乖離, 決算は前年比+20%, セクター全体は下落トレンド
判断: [買い検討][確信度: 中] ファンダメンタルズは良好だが、セクター反転の兆候を確認してからエントリーが安全。
結果: 3週間後にセクター反転し+12%。
### 事例 2: 暗号資産・パニック相場
状況: BTC 急落 -15%, Fear & Greed Index 12, 取引所への大量送金
判断: [様子見][確信度: 高] パニック売りが収まるまで 2〜3 日待つべき。
結果: さらに -8% 下落後に反発。3日待ってからのエントリーで +25%。
### 事例 3: 決算後の急騰
状況: 決算後 +8% 急騰, 出来高 5 倍, PER が業界平均の 1.5 倍
判断: [様子見][確信度: 中] 好決算は織り込み済みの可能性。調整を待つ。
結果: 1週間後に -5% 調整。そこでエントリーし +10%。
上記の事例と同様の状況を検出した場合、過去の判断パターンを参考にしつつ、
現在の市場環境との違いも考慮して分析してください。
"""
PARAMETER num_ctx 32768
PARAMETER temperature 0.2
売買日誌から Claude Code に Few-shot JSON を生成させる
コードレビューの記事では GitHub の PR レビューから Claude Code に事例を選別させました。金融版では売買日誌から事例を抽出します。
docs/trade-journal/ に保存されている売買日誌を読み、
以下の形式の JSON に変換して docs/trading-fewshot.json に出力してください。
## 出力形式
[
{
"situation": "市場状況の要約(テクニカル指標、ファンダメンタルズ、ニュース)",
"judgment": "[判断][確信度] 判断の根拠",
"result": "結果と振り返り",
"category": "分析カテゴリ"
}
]
## 選別基準
- 明確な判断根拠が記録されている取引のみ採用
- 成功事例と失敗事例を半々程度含める(失敗から学ぶため)
- 同じパターンの取引は代表的なものを 1 件選ぶ
- 30〜50 件に絞り込む
レベル 4:LoRA で金融センチメント分析を強化する(1〜2 週間)
ここが金融分野ならではの大きな利点です。金融特化の LoRA アダプタやオープンソースプロジェクトが既に豊富に存在します。
金融特化のオープンソースプロジェクト
| プロジェクト | 概要 | LoRA | Hugging Face |
|---|---|---|---|
| FinGPT | 金融センチメント分析に特化した LLM フレームワーク。LoRA で低コスト学習可能。GPT-4 と同等の精度を報告 | ✅ | FinGPT モデル |
| FinLlama | Llama 2 ベース、34,000 件の金融テキストで LoRA 訓練。アルゴリズム取引向けセンチメント分析 | ✅ | 公開済み |
| FinMem | 記憶階層を持つ LLM トレーディングエージェント。短期・中期・長期の情報を階層的に管理 | - | - |
| MarketSenseAI | RAG + LLM エージェントで株式分析。S&P 100 で累積リターン 125.9%(インデックス 73.5%)を報告 | - | - |
| TradingAgents | マルチエージェント構成(ファンダメンタルズ担当・テクニカル担当・センチメント担当が協議して判断) | - | - |
既存の LoRA アダプタを活用する
ゼロから学習する前に、Hugging Face で公開されている金融特化 LoRA アダプタを試すのが効率的です。
# 既存の金融センチメント LoRA を Qwen ベースで利用
from peft import PeftModel, PeftConfig
# 例: DeepSeek-Qwen ベースの金融センチメントモデル
# https://huggingface.co/huggnface/FinDeepSeek-R1-Distill-Qwen-1.5B-LoRA-Sentiment
config = PeftConfig.from_pretrained(
"huggnface/FinDeepSeek-R1-Distill-Qwen-1.5B-LoRA-Sentiment"
)
自分の取引データで追加学習する
既存の金融 LoRA をベースに、自分の売買日誌で追加の LoRA 学習を行うことで、汎用的な金融センチメント分析能力 + 自分の投資スタイルに合った判断パターンを両立できます。
学習データの形式はコードレビューと同じ Alpaca 形式です。
[
{
"instruction": "以下の市場情報を分析し、売買判断の材料を提示してください。",
"input": "銘柄: トヨタ自動車(7203)\n株価: 2,750円\nRSI: 28\n25日線乖離率: -5%\n直近決算: 営業利益 +15%\nニュース: 北米EV工場増設を発表\nセクター: 自動車セクター全体は横ばい",
"output": "[買い検討][確信度: 中]\n\n根拠:\n1. RSI 28 は売られすぎ水準で、リバウンドの可能性が高い\n2. 決算は好調(営業利益 +15%)でファンダメンタルズは良好\n3. EV 工場増設は中長期的にポジティブ\n\nリスク要因:\n- セクター全体が横ばいで、個別の好材料だけでは上値が限定的\n- 為替(円高方向)のリスクを確認する必要あり\n\n確認事項:\n- 為替見通し(ドル円)\n- 北米 EV 市場の競合状況"
},
{
"instruction": "以下の市場情報を分析し、売買判断の材料を提示してください。",
"input": "銘柄: BTC/JPY\n価格: 15,200,000円\n24時間変動: -12%\nFear & Greed Index: 15(Extreme Fear)\n取引所流入: 大幅増加\nニュース: 米SEC が新規制を検討中",
"output": "[様子見][確信度: 高]\n\n根拠:\n1. Fear & Greed Index 15 は歴史的に底値圏だが、即座の反発は保証されない\n2. 取引所への大量流入は追加の売り圧力を示唆\n3. SEC の規制ニュースは短期的にネガティブだが、過去の規制報道は数日で織り込まれる傾向\n\nリスク要因:\n- 規制が想定より厳しい場合、さらに -20% の下落もあり得る\n- レバレッジポジションの強制清算が連鎖する可能性\n\n確認事項:\n- SEC 規制の具体的な内容と施行時期\n- 取引所流入の継続状況(24時間後に再確認)\n- オンチェーンのクジラ動向"
}
]
MLX でのファインチューニング(Mac の場合)
前回の記事で紹介した通り、Mac ユーザーは MLX で LoRA 学習が可能です。
# 金融センチメント分析用に LoRA 学習
mlx_lm.lora \
--model mlx-community/Qwen3-14B-4bit \
--data ./trading-training-data \
--train \
--iters 1000
Ollama への取り込み
# trading-finetuned.Modelfile
FROM ./trading_model_gguf/model-q4_k_m.gguf
SYSTEM """
あなたは個人投資家のリサーチアシスタントです。
(レベル 1 のルールをここにも記述)
"""
PARAMETER num_ctx 32768
PARAMETER temperature 0.2
ollama create my-trading-advisor-ft -f trading-finetuned.Modelfile
株式と BTC で異なる分析観点
同じ 4 段階のフレームワークを使いますが、資産クラスごとに重視すべき情報が異なります。
| 分析観点 | 株式 | BTC・暗号資産 |
|---|---|---|
| ファンダメンタルズ | PER, PBR, ROE, 配当利回り | オンチェーン指標、アクティブアドレス数 |
| テクニカル | 移動平均線, RSI, MACD | 同左 + ハッシュレート |
| センチメント | 決算発表、アナリストレポート | Fear & Greed Index, SNS 過熱度 |
| マクロ | 金利、為替、セクターローテーション | 規制動向、半減期サイクル |
| RAG に入れるべき資料 | 決算短信、四季報、IR 資料 | ホワイトペーパー、規制ニュース、オンチェーンレポート |
| Few-shot の重点 | 決算前後の売買パターン | パニック相場での対応パターン |
実践的な運用フロー
毎朝のルーティン:
1. ニュース自動取得(スクリプト)→ docs/news/ に保存
2. Ollama + RAG で「今日の注目ポイント」を質問
3. 監視銘柄の指標を入力して分析を依頼
4. 判断材料を確認し、自分で最終判断
売買実行後:
5. 売買日誌に記録(エントリー理由、損切り/利確ライン)
6. 月次で日誌を振り返り、Few-shot 事例を更新
四半期ごと:
7. 新しい売買日誌データで LoRA を再学習(必要に応じて)
マルチエージェント構成(上級)
TradingAgents の研究では、複数のエージェントが異なる視点で分析し、最終判断を協議する構成が高い成果を上げています。ローカル環境でもこの構成を簡易的に再現できます。
ファンダメンタルズ担当(Modelfile A)
↓ 「決算は好調、PER は妥当」
テクニカル担当(Modelfile B)
↓ 「RSI は中立、明確なシグナルなし」
センチメント担当(Modelfile C)
↓ 「ニュースはポジティブ、SNS は過熱気味」
↓
統合判断エージェント(Modelfile D)
→ 「買い検討だが、SNS の過熱感から少額でエントリー推奨」
それぞれ異なるシステムプロンプトを持つ Modelfile を作成し、Python スクリプトで順次呼び出して統合する形です。
重要な注意点と免責事項
LLM にできること・できないこと
| できること | できないこと |
|---|---|
| ニュースのセンチメント分析 | 将来の価格予測 |
| 複数指標の統合的な整理 | インサイダー情報の検出 |
| 過去パターンとの類似度判定 | ブラックスワンイベントの予測 |
| リスク要因の列挙 | 市場心理のリアルタイム把握 |
| 売買日誌に基づく振り返り | 感情的な判断の排除(人間側の問題) |
法規制上の注意
- LLM の出力は情報提供であり、投資助言ではない
- 金融商品取引法上、投資助言業を営むには金融庁への登録が必要
- 他者に対して LLM の分析結果を投資助言として提供してはならない
- 自分自身の判断材料として使用する分には問題ない
過信のリスク
- LLM は学習データの期間内のパターンしか知らない
- 市場の構造変化(コロナショック級)には対応できない
- LLM の分析を「確認」として使い、「判断」は自分で行うことが大原則
導入ロードマップ
第 1 週:レベル 1(Modelfile)
├ 自分の投資ルールを Modelfile に記述
├ 監視銘柄の分析を毎日試す
└ 出力フォーマットを自分好みに調整
第 2〜3 週:レベル 2(RAG)
├ 過去の売買日誌を Open WebUI にアップロード
├ 決算短信・IR 資料を追加
└ 日次ニュース取得スクリプトを設定
第 4 週:レベル 3(Few-shot)
├ 売買日誌から成功/失敗事例を 30 件選別
├ Modelfile に事例を追加
└ 分析精度の変化を確認
第 5〜6 週以降:レベル 4(LoRA)(必要に応じて)
├ Hugging Face の金融 LoRA アダプタを試す
├ 自分の取引データで追加学習
└ ベースモデルとの比較評価
全体構成:コードレビューとの比較
Level 4 まで考慮した金融取引向けの全体構成図と詳細な解説は、別ファイルにまとめています。
→ 金融取引 LLM の全体構成:コードレビューとの比較(構成図付き)
構成図(SVG)と編集用の .drawio ファイルも同じ Gist に含まれています。
まとめ
- コードレビューの 4 段階カスタマイズは金融取引にそのまま転用可能: Modelfile → RAG → Few-shot → LoRA の構成は、対象を「コード」から「市場情報」に変えるだけで機能する
- ローカル LLM は金融に特に適している: ポートフォリオ情報を外部に送信しない、API コストゼロ、自分の投資スタイルに完全カスタマイズ可能
- 売買日誌が最重要データソース: RAG にも Few-shot にも LoRA にも、自分の過去の判断記録が最も価値のあるデータになる
- 金融特化のオープンソースが豊富: FinGPT、FinLlama、TradingAgents など、LoRA アダプタや金融エージェントフレームワークが公開されている
- LLM は「判断」ではなく「分析補助」: 最終的な売買判断は必ず自分で行う。LLM の出力は確認材料のひとつとして活用する
参考
- ローカル LLM を社内業務に特化させる 4 段階カスタマイズ
- FinGPT: Open-Source Financial Large Language Models - GitHub
- FinGPT:金融 LLM の民主化を目指して - AIReview
- FinLlama: LLM-Based Financial Sentiment Analysis for Algorithmic Trading - ACM
- FinMem: LLM Trading Agent with Layered Memory - GitHub
- MarketSenseAI 2.0: Enhancing Stock Analysis through LLM Agents - arXiv
- TradingAgents: Multi-Agents LLM Financial Trading Framework - arXiv
- Integrating LLMs in Financial Investments: A Survey - arXiv
- LLM で動く投資アドバイザーを作ってみた - Zenn
- LLM エージェントを用いた株価予測アプリケーション - ELSPINA
- LLM × チャート分析の新時代 - note
- 金融テキストにおけるセンチメント分析の課題整理 - 言語処理学会
- 金融庁金融研究センター Discussion Paper - FSA
- FinDeepSeek-R1-Distill-Qwen LoRA Sentiment - Hugging Face
- Best Open Source LLM for Finance in 2026 - SiliconFlow
- 9 Best LLMs for Stock Trading and Market Analysis in 2026
- J-Quants API - 日本取引所グループ
- 立花証券 e 支店 API(個人向け無料日本株 API)
- Qwen3 Technical Report - arXiv
- AI エージェントで金融取引予測モデルを作ってみた - GMO