最終更新: 2026年06月
「ニュースを読んで相場を判断する」——ファンダメンタルズ派のトレーダーが長年行ってきたことを、LLMは自動化できるのか。
2025〜2026年にかけてこのテーマの学術研究が急増した。結論を先に言えば、LLMのセンチメント分析は株式市場では有意なシグナル生成能力を示したが、FX市場への転用は追加の検証が必要だ。しかし「可能性がある」というエビデンスは蓄積されている。
本稿では、研究成果の批判的な読み方と、個人が現実的に実装できるシステムの設計を整理する。
学術研究が示すLLMセンチメント分析の性能
代表的な研究の発見
**Ballinari & Maly (Swiss National Bank, 2025)**は、FX市場に特化したLLMセンチメント分析の研究として注目される。スイス国立銀行ワーキングペーパーとして公開されており、FX市場ニュースに対するLLMの感情解釈能力を評価している。
**「Sentiment trading with large language models」(arXiv: 2412.19245)**では、965,375件の金融ニュース記事(2010〜2023年)を分析した大規模研究の結果が報告されている。LLMのセンチメントスコアと翌日の株式リターンに正の相関を確認しており、各モデルの予測精度は:
| モデル | 翌日リターン予測精度 | |---|---| | OPT(GPT-3ベース) | 74.4% | | BERT | 72.5% | | FinBERT | 72.2% | | 辞書モデル(従来手法) | 50.1% |
ロング・ショート戦略のシャープレシオはOPTで3.05(辞書モデルは1.23)。LLMが従来の感情分析手法を大幅に上回ることを示した。
重要な留意点:これらはすべて株式市場の結果だ。FX市場は株式市場と性質が異なる(24時間市場、流動性・情報伝播の違い等)ため、同じ精度が期待できるとは限らない。
**「Comparing LLMs for Sentiment Analysis in Financial Market News」(arXiv: 2510.15929, Teles & Figueiredo, 2025)**では、複数LLMの金融ニュース感情分類精度を比較し、「LLMは古典的モデルを大多数のケースで上回る」と結論づけている。
Forex Live / FXstreetのニュース分析研究では、ChatGPT 3.5を使ったFXニュースの感情分類が、FinBERTと比較して市場リターンとの相関を36%向上させたと報告されている。FX特化型の比較としては数少ない実証研究の一つだ。
「研究結果」を実務に使う前に理解すべき限界
限界1:バックテストの過去依存性
2010〜2023年のデータで有効だった戦略が、2026年以降も有効とは限らない。特に「LLMベースの戦略が広まる」ほど市場の織り込みが早くなる。
限界2:株式市場とFX市場の違い
企業ニュース(決算・M&A等)と為替ニュース(経済指標・中央銀行・地政学)では情報の構造が異なる。株式市場での高いシャープレシオを為替市場に転用すると結果が異なる可能性が高い。
限界3:データ品質の問題
「ロイター全記事」と「自分がスクレイピングしたニュース」では質が違う。個人が使えるニュースデータソースは限られており、機関投資家と同等のデータ品質を確保するのは難しい。
限界4:実行コストとスリッページ
研究の多くはコスト無視の「理論的」リターン。スプレッド・スリッページ・API遅延を含めた「実際のリターン」は理論値より大幅に低下する。
免責: 学術研究の結果は過去のデータに基づくものであり、将来の投資収益を保証しません。FX取引は元本損失リスクを伴います。
実装設計:LLMセンチメント分析パイプライン
ステップ1:ニュースデータの収集
LLM APIはリアルタイムニュースにアクセスできないため、別途取得が必要。
import feedparser
import time
from datetime import datetime
FX_NEWS_FEEDS = [
"https://www.forexlive.com/feed/news",
"https://www.fxstreet.com/rss/news",
# 日本語ソース
"https://jp.reuters.com/rssFeed/businessNews",
]
def fetch_recent_news(max_age_minutes: int = 30) -> list[dict]:
"""直近N分以内のFXニュースを収集する"""
articles = []
cutoff = time.time() - (max_age_minutes * 60)
for feed_url in FX_NEWS_FEEDS:
feed = feedparser.parse(feed_url)
for entry in feed.entries:
pub_time = time.mktime(entry.published_parsed) if hasattr(entry, 'published_parsed') else 0
if pub_time > cutoff:
articles.append({
"title": entry.get("title", ""),
"summary": entry.get("summary", "")[:500], # 500字制限
"published": datetime.fromtimestamp(pub_time).isoformat(),
"source": feed_url
})
return articles
ステップ2:LLMによるセンチメントスコアリング
import anthropic
import json
client = anthropic.Anthropic()
def score_news_sentiment(articles: list[dict], target_currency: str = "USDJPY") -> dict:
"""ニュース記事リストを分析してセンチメントスコアを生成する"""
if not articles:
return {"score": 0, "confidence": "low", "reason": "no_data"}
# 記事をまとめてプロンプトに変換
news_text = "\n".join([
f"[{a['published']}] {a['title']}: {a['summary']}"
for a in articles[:10] # 最新10件に絞る
])
prompt = f"""以下のFXニュース記事を分析し、{target_currency}への影響をスコアリングしてください。
<news_articles>
{news_text}
</news_articles>
分析要件:
- ヘッドラインの煽り文句に惑わされず、実際の政策・経済への影響を評価する
- 複数の記事が矛盾する場合は信頼性の高い情報源を優先する
- 短期(1〜4時間)と中期(1〜3日)を分けて評価する
JSON形式のみで回答:
{{
"short_term_score": -10から+10(USD側が+),
"medium_term_score": -10から+10,
"confidence": "high/medium/low",
"key_driver": "最も影響が大きいニュースのタイトル",
"conflicting_signal": "矛盾するシグナルがあれば記述、なければnull",
"high_impact_risk": "今後4時間以内の高インパクト予定イベントがあれば記述"
}}"""
message = client.messages.create(
model="claude-opus-4-8",
max_tokens=256,
thinking={"type": "adaptive"},
messages=[{"role": "user", "content": prompt}]
)
response_text = ""
for block in message.content:
if block.type == "text":
response_text = block.text
break
try:
return json.loads(response_text)
except json.JSONDecodeError:
return {"short_term_score": 0, "confidence": "low", "error": "parse_failed"}
ステップ3:スコアの活用とフィルタリング
def should_trade_based_on_sentiment(
sentiment: dict,
signal_direction: str, # "long" or "short"
minimum_score: float = 3.0
) -> bool:
"""センチメントスコアに基づいてトレードを承認するか判断する"""
# 低信頼度のスコアはスキップ
if sentiment.get("confidence") == "low":
return False
short_score = sentiment.get("short_term_score", 0)
# ロングシグナルの場合:スコアが+3以上
if signal_direction == "long" and short_score >= minimum_score:
return True
# ショートシグナルの場合:スコアが-3以下
if signal_direction == "short" and short_score <= -minimum_score:
return True
# テクニカルとファンダメンタルズが逆方向 → スキップ
return False
実践的な活用パターン
パターン1:経済指標発表前後のフィルター
指標発表30分前〜後は、LLMスコアの信頼性が特に上がる(情報が明確なため)。この時間帯に絞って使うことで、ノイズを減らせる。
パターン2:中央銀行声明文の即時スコアリング
FOMC・ECB・日銀の声明文が公開された直後に全文をClaudeに送り、前回比での政策変化スコアを生成する。声明文は字数が多く人間が即時に読み込むのが難しい——ここがLLMの価値が出やすい場面だ。
パターン3:逆センチメントシグナル
研究によって、センチメントが極端に強気(+8以上)または弱気(-8以下)の場合、「既に織り込み済み」として逆方向に傾くケースも報告されている。過熱センチメントを逆張りシグナルとして使う設計も検討に値する。
Claudeと会話しながらインジケータが作れるhedgrow-fxはこちら。
FinBERTとの比較:LLMを選ぶ理由
FinBERT(金融特化の感情分析モデル)はかつてFX分析の標準だったが、LLMと比べて以下の点で劣後している:
| 比較項目 | FinBERT | Claude/GPT系LLM | |---|---|---| | 文脈理解 | 単文レベル | 複数記事の相互参照 | | 新語・造語への対応 | 弱い | 強い | | 日本語対応 | 限定的 | 高品質 | | プロンプトによるカスタマイズ | 不可 | 可能 | | コスト | 低(自己ホスト) | 中(API費用) | | 精度(学術比較) | ベースライン | 大幅に上回る |
コストと精度のトレードオフはあるが、個人トレーダーの利用規模では月数百円〜数千円の範囲に収まる。
よくある質問(FAQ)
Q: ニュースセンチメントと価格変動の「タイムラグ」はどれくらいですか?
A: 学術研究では「翌日リターン」との相関が多く報告されている。超短期(1時間以内)への影響は不明確だ。スキャルピングよりスウィング〜デイトレード向きの用途と考えた方が現実的。
Q: 日本語ニュースと英語ニュース、どちらで分析すべきですか?
A: USD/JPYのように日米両方の材料が影響する通貨ペアは、英日両方のソースを使うのが理想。Claude Opus 4.8は両言語の分析品質に大きな差はないが、国際的な金融メディア(ロイター・ブルームバーグ)は英語の方が情報量が多い。
Q: センチメントスコアの「信頼性」はどう評価すればいいですか?
A: 同じニュースセットを複数回送って一致率を確認する「コンシステンシーテスト」を定期的に実施するのが有効。±2以上のスコアのブレが頻発する場合はプロンプトを再設計する。
Claudeと会話しながらインジケータが作れるhedgrow-fxはこちら。
免責事項: 本記事はLLMセンチメント分析技術の情報提供を目的としています。学術研究の結果は過去のデータに基づくものであり、将来の投資収益を保証しません。FX取引は元本損失リスクを伴い、損益はすべて投資家自身の責任に帰します。
