ローカル LLM を金融取引の意思決定サポートに応用する — コードレビュー 4 段階カスタマイズの転用

前回の記事では、ローカル LLM(Ollama + Qwen3)を社内コードレビューに特化させる 4 段階のカスタマイズ手法を紹介しました。この仕組みは金融取引の意思決定サポートにもそのまま応用できます。

個人投資家が株式や BTC などの売買判断を行う際に、ニュース分析・テクニカル指標の解釈・リスク評価を自分の PC 上で、自分の投資ルールに基づいてAI に補助させる構成です。

なぜローカル LLM が金融取引に向いているのか

金融取引は、AI の活用にローカル環境が特に適している分野です。

利点説明
プライバシーポートフォリオ・売買履歴・資産額をクラウドに送信しない
コスト毎日の市場分析やニュース要約を API 課金なしで実行可能
カスタマイズ自分の投資スタイル・リスク許容度に完全に特化できる
速度ネットワーク遅延がなく、市場の急変時にも即座に分析可能
独立性API 障害やサービス停止の影響を受けない

2024 年末時点で個人がビットコインの発行上限の約 69% を保有しており、個人投資家にとって自分だけの分析ツールを持つ意義はますます大きくなっています。

コードレビューから金融取引への対応表

前回の記事の 4 段階がどのように転用できるかを整理します。

レベルコードレビュー金融取引サポート
1. Modelfileコーディング規約を教える売買ルール・リスク管理ルールを教える
2. RAG障害報告・設計書を検索決算短信・ニュース・四季報を検索
3. Few-shot過去のレビュー事例を見せる過去の売買判断の成功/失敗事例を見せる
4. LoRAPR レビュー履歴で再訓練金融センチメント分析データで再訓練
レベル 1:投資ルールを「教える」    ← すぐできる
レベル 2:市場情報を「渡す」       ← 1〜2日
レベル 3:売買パターンを「見せる」  ← 数日
レベル 4:金融の頭脳を「鍛える」   ← 1〜2週間

レベル 1:Modelfile に投資ルールを埋め込む(即日導入)

自分の投資ルール・リスク管理基準をシステムプロンプトとして設定します。

Modelfile の作成

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# 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

モデルの作成と使用

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
# 投資分析モデルを作成
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/(ビジネスロジックのドキュメント)が最も効果的でした。金融取引では売買日誌がこれに相当します。

1
2
3
4
5
6
7
8
9
# 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 のナレッジベース機能をそのまま使えます。

1
2
3
4
5
6
7
# 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
  1. Workspace → Knowledgetrade-journal ナレッジベースを作成
  2. 売買日誌をアップロード
  3. チャットで #trade-journal トヨタ自動車を分析して と入力

自動でニュースを取り込む

手動でドキュメントを追加するだけでなく、RSS フィードやニュース API から自動取得するスクリプトを組むとさらに実用的です。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
#!/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 事例ファイルの作成

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
[
  {
    "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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# 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 アダプタやオープンソースプロジェクトが既に豊富に存在します。

金融特化のオープンソースプロジェクト

プロジェクト概要LoRAHugging Face
FinGPT金融センチメント分析に特化した LLM フレームワーク。LoRA で低コスト学習可能。GPT-4 と同等の精度を報告FinGPT モデル
FinLlamaLlama 2 ベース、34,000 件の金融テキストで LoRA 訓練。アルゴリズム取引向けセンチメント分析公開済み
FinMem記憶階層を持つ LLM トレーディングエージェント。短期・中期・長期の情報を階層的に管理--
MarketSenseAIRAG + LLM エージェントで株式分析。S&P 100 で累積リターン 125.9%(インデックス 73.5%)を報告--
TradingAgentsマルチエージェント構成(ファンダメンタルズ担当・テクニカル担当・センチメント担当が協議して判断)--

既存の LoRA アダプタを活用する

ゼロから学習する前に、Hugging Face で公開されている金融特化 LoRA アダプタを試すのが効率的です。

1
2
3
4
5
6
7
8
# 既存の金融センチメント 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 形式です。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
[
  {
    "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 学習が可能です。

1
2
3
4
5
6
# 金融センチメント分析用に LoRA 学習
mlx_lm.lora \
  --model mlx-community/Qwen3-14B-4bit \
  --data ./trading-training-data \
  --train \
  --iters 1000

Ollama への取り込み

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# trading-finetuned.Modelfile
FROM ./trading_model_gguf/model-q4_k_m.gguf

SYSTEM """
あなたは個人投資家のリサーチアシスタントです。
(レベル 1 のルールをここにも記述)
"""

PARAMETER num_ctx 32768
PARAMETER temperature 0.2
1
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 の出力は確認材料のひとつとして活用する

参考