【AI為替予測#1】ニュースと指標の収集エンジンの作成
始めに
大学生が為替取引でお金を増やす大会、全日本外貨取引選手権に参加しています、KawaseNinjasです!
私たちはAIが自動で現在の為替市場と世界情勢を読み、どの通貨を買い、売るべきかを自動で定期的に教えてくれる仕組みを作成中です。
私たちのnoteではその進捗と内容を随時投稿していくので是非「いいね」「フォロー」お願いします🙇
(いいねが多くなったらソースコード等も公開予定です)
初回の投稿はこちらです!是非ご覧ください
今回は下の画像で言う「インターネットクローリングエンジン」を作成するパートです!
この部分ではインターネットから為替市場の予測に役立つであろうデータを取集し、整え、AIに渡すプロンプトを作成します。
ですが、もしかしたらプロのトレーダーの方であれば、自分で判断するために必要なデータを集めてきて、自分のために表示する仕組みにも転用できそうだなーとも考えています。もしそういう需要があれば教えてください🙇
構成
テクニカル指標の収集
こちらはyfinanceというpythonライブラリを用いています。APIを叩くだけで最大で1時間足の細かさ通貨ペアの変動が取得できとても便利です!
取得したデータから今回は以下のテクニカル指標を計算しています
・RSI
RSI = 100 - (100 / (1 + 平均上昇幅 / 平均下落幅))
過熱(70以上)や売られすぎ(30未満)などの状態を判定する。
・SMA(20)
SMA_20 = (Closeの過去20本の単純平均)
過去平均との乖離を見ることで、相場の過熱度や方向性を把握
・MACD
MACD(Moving Average Convergence Divergence)移動平均収束拡散法
トレンドの転換点を探知する(MACDクロスなど)。ニュース記事の収集と要約ニュースの収集と要約
こちらはRSSという仕組みを利用して収集しています。新しい記事が出たと検知されたらそのURLを取得し、そのURLをスクレイピングして記事本文を抽出・LLMに短く要約させデータベースに格納します。
🌐 RSSとは?簡単に言うと…
RSS(アールエスエス)
たとえば:
毎日新聞社のウェブサイトに新しい記事が出たとき、
その情報をわざわざ見に行かなくても、
「RSSリーダー」やプログラムが自動でチェックして知らせてくれます
def fetch_and_store_rss():
session = SessionLocal()
d.print_ts(f"<<< scheduled task: fetch_and_store_rss >>>", level='debug')
for category, urls in RSS_FEEDS.items():
d.print(f"Fetching RSS feeds for category: {category} contains {len(urls)}", level="debug", output_path="./data/fetch_and_store_rss.log")
d.print(f"Fetching RSS feeds for category: {category} contains {len(urls)}", level="debug")
for url in urls:
feed = feedparser.parse(url)
for entry in feed.entries:
published = datetime(*entry.published_parsed[:6]) if entry.get("published_parsed") else datetime.now()
exists = session.query(NewsArticle).filter_by(title=entry.title, published=published).first()
if exists:
d.print(f"⏩ skip article: {entry.title} (already exists)", output_path="./data/fetch_and_store_rss.log")
continue
# RSSエントリのリンクの種類で処理を分岐 http, pdf, pptx, xlsx
ext = os.path.splitext(entry.link)[1].lower()
if ext == ".pdf":
d.print(f"Processing PDF: {entry.link}", level="warning")
full_text = extract_pdf_text(entry.link)
elif ext in [".ppt", ".pptx"]:
d.print(f"Processing PPTX: {entry.link}", level="warning")
full_text = extract_pptx_text(entry.link)
elif ext in [".xls", ".xlsx"]:
d.print(f"Processing XLSX: {entry.link}", level="warning")
full_text = extract_xlsx_text(entry.link)
else:
full_text = extract_article_text(entry.link)
with open("/app/data/article.txt", "a", encoding="utf-8") as f:
print(f"{full_text}", file=f, flush=True)
if not full_text:
full_text = entry.get("summary", entry.get("title", ""))
summary = summarize_text(full_text)
with open("/app/data/summary.txt", "a", encoding="utf-8") as f:
print(f"{summary}", file=f, flush=True)
d.print(f"✅ new article: {entry.title}", output_path="./data/fetch_and_store_rss.log")
article = NewsArticle(
category=category,
title=entry.title,
summary=summary,
url=entry.link,
published=published
)
session.add(article)
d.print("🆗 All RSS feeds processed", level="debug")
session.commit()
session.close()一応コードだとこんな感じです。一部なのでこれだけでは動きませんが、、
動作例
これが動作すると下のようにデータベースに保存されるので好きな時に取り出したり読んだりできます。


活用先(プロンプト生成)
このデータベースにアクセスすることで、任意日付時点のテクニカル指標と最新ニュースを簡単に取得できるようになりました!
これを用いて次のようなプロンプト(AIへの入力)に変換しました。
[通貨ペア]: USD/JPY
[現在の日時]
2025/07/01 13:00
[直近6時間(1時間足)の価格とRSIの推移]:
1時間前: 始値: 143.9980, 終値: 144.0100, RSI: 45.6
2時間前: 始値: 143.9980, 終値: 143.9150, RSI: 43.1
3時間前: 始値: 143.9160, 終値: 143.8020, RSI: 33.0
4時間前: 始値: 143.8040, 終値: 143.5640, RSI: 29.7
5時間前: 始値: 143.5650, 終値: 143.7920, RSI: 33.1
6時間前: 始値: 143.7970, 終値: 143.7230, RSI: 26.0
※RSIの解釈:
- RSI > 70: 買われすぎ(反転下落の可能性)
- RSI < 30: 売られすぎ(反転上昇の可能性)
- RSIの方向性: 上昇/下降トレンドの強さを示す
[直近3日間(日足)の価格と移動平均]:
2025-06-28: 始値: 144.8780, 終値: 144.6150, SMA(20): 144.7597
2025-06-30: 始値: 144.4740, 終値: 144.4450, SMA(20): 144.6137
2025-07-01: 始値: 144.4470, 終値: 143.7230, SMA(20): 144.3767
※SMA(20)の解釈:
- 価格 > SMA(20): 上昇トレンドの可能性
- 価格 < SMA(20): 下降トレンドの可能性
- SMA傾斜: 上向きなら強気、下向きなら弱気
[MACD(現在)]: MACD: -0.3774, Signal: -0.3721
※MACDの解釈:
- MACD > シグナル: 買いシグナル
- MACD < シグナル: 売りシグナル
- MACDがゼロラインを上回る: 強気相場
- MACDがゼロラインを下回る: 弱気相場
[ニュース要約]:
- 2025-07-01 09:00 「日銀夏休み親子見学会2025」の申込み受付終了のお知らせ: 「日銀夏休み親子見学会2025」の申込み受付は2025年7月1日をもって終了しました。多くのご応募ありがとうございます。通常の見学案内(小学5年生以上)は本店見学のページで確認可能です。照会先は情報サービス局 親子見学会担当(Tel:03-3277-1902)です。
- 2025-07-01 09:00 「日銀夏休み親子見学会2025」の開催および申込み方法について: 「日銀夏休み親子見学会2025」は2025年8月25日~28日、日本銀行本店(東京都中央区)で開催。来館見学とオンライン見学会の2種類あり、両方とも事前予約制(先着順)。来館見学は小学4~6年生と保護者対象、各回20人定員。オンライン見学会は8月28日、小学4~6年生と保護者対象。申込みは7月1日~15日、E-mail(post.prd4@boj.or.jp)で行い、個人情報は見学会以外では使用しない。問い合わせは日本銀行情報サービス局(電話:03-3277-1902)。
- 2025-07-01 07:41 A shadow Fed chief could lead to a ‘revolt’ on the FOMC against Powell’s successor, former vice chair warns - MSN: 2023年4月16日、米国連邦準備銀行(FRB)議長ジェームズ・ポールは、シカゴ経済クラブで講演した。元FRB副議長のアラン・ブリンダーは、ポールの任期が終わる前に「シャドウ・FRB議長」を任命すると市場混乱を引き起こすと警告した。ワールド・ストリート・アナリストも、これは自己矛盾する考えでドルと国債を下げる可能性があると指摘した。トランプ大統領は、ポールの代替者を「非常に近く」任命すると言ったが、金利を下げるよう圧力かけている。ポールの任期は2026年5月までで、通常は3〜4か月の移行期があるが、早期任命は市場に金利下落を煽る可能性がある。
- 2025-07-01 04:06 FOMC can't make decisions while uncertainty looms, says former Dallas Fed President Richard Fisher - Forex Factory: 元Dallas銀行連合会長のリチャード・フィッシャーは、不確実性が続く中でFOMCが判断できないと語った。米国経済データはFED governorsに金利引き下げの決定を説得できなかった。トランプ氏はドルの強さを主張したが、実際にはドルが弱まっていた。
- 2025-07-01 04:00 日銀当座預金増減要因と金融調節(6月実績): 対象記事が取得できませんでした。以下のタイトルをもとに日本語で要約します:
**「米国利上げ見通しで為替市場不安定化」**
米国利上げ見通しが強まり、為替市場に不安定化の傾向が見られる。国際通貨基金(IMF)が米国経済の成長を上方修正したことを受けて、市場の期待が高まっている。 yenの価格変動に影響を与える可能性がある。
- 2025-07-01 02:10 審議委員の発令について: 2025年7月1日、日本銀行政策委員会審議委員に増一行が任命されました。中村豊明は6月30日に任期満了により退任しました。日本銀行政策委員会室が発令しました。
- 2025-07-01 01:00 「日銀夏休み親子見学会2025」の開催および申込み方法について: 日本銀行は2025年8月25日~28日に行う「日銀夏休み親子見学会2025」を開催。来館見学とオンライン見学会の2形式があり、両者とも事前予約制(先着順)で、申込み期間は7月1日~15日。来館見学は東京都中央区日本橋本石町2-1-1の日本銀行本店で、小学4年生~中学生と保護者を対象にし、各回20人を募集。オンライン見学会は8月28日、同様の対象者を対象にし、Webexを用いたリモート参加。申込みはpost.prd4@boj.or.jpまで、件名に「(来館)日銀夏休み親子見学会2025」または「(オン)日銀夏休み親子見学会2025」を記載。
- 2025-06-30 23:50 貸出約定平均金利(5月): 日本銀行は2025年7月1日8時50分に「貸出約定平均金利の推移(2025年5月)」を公表し、翌営業日以降に時系列統計データ検索サイトに掲載する。公表データには、短期・長期の貸出金利の変動が含まれており、国内銀行、都市銀行、地方銀行、第二地方銀行、信用金庫などの分類別に掲載されている。問い合わせ先は金融機構局金融データ課預貸金統計グループである。
- 2025-06-30 23:50 短観(6月)<概要、要旨>: 記事タイトル:日本銀行、2025年6月の短観発表
2025年7月1日、日本銀行が公表データを発表した。公表データには概要と調査全容が掲載され、時系列データと解説・関連資料も含む。
- 2025-06-30 20:34 FOMC can't make decisions while uncertainty looms, says former Dallas Fed President Richard Fisher - MSN: 元ダラス銀行連邦準備銀行長のリチャード・フィッシャー氏は、不確実性が続く中で、FOMCは決断を下せない可能性があると述べた。フィッシャー氏は、米国景気の不確実性や世界的な経済状況の変化により、FOMCの判断が困難であると指摘した。この発言は、為替市場に影響を与える可能性のある情報であり、今後の政策動向に注目が集まっている。
※ニュース解釈のポイント:
- 金利政策関連: 金利上昇予想→通貨高、金利低下予想→通貨安
- 経済指標: 予想より良い→通貨高、予想より悪い→通貨安
- 地政学リスク: リスク回避時は安全通貨(USD, JPY, CHF)に資金流入
- 中央銀行発言: タカ派的発言→通貨高、ハト派的発言→通貨安
---
Q: 今後48時間以内にこの通貨は上昇(Buy)、下落(Sell)、または横ばい(Hold)する可能性は高いですか?信頼度(0.0~1.0)と合わせて回答してください。
ただし、変動率が0.7%未満の場合は「Hold」としてください。
回答は次の【回答テンプレート】に従ってください。
【回答テンプレート】
分析:
1. テクニカル指標: ...
2. 価格とトレンド: ...
3. ニュースの影響: ...
4. 予想される価格変動幅: ...
判断: 「Buy/Hold/Sell」
信頼度: 0.0~1.0
===ちゃんとデータベースの内容や数値が使われています。日時指定をすることで自動で生成ができるようになっています。
これをAIに投げればこの日時での予測をしてくれるということです。本当はこのプロンプトの内容や形式が非常に重要なのですが、あまり為替に明るくないのでどのようなデータをどういう形式で与えればいいかあまり分かっていません、、ぜひアドバイスいただければと思います!
さて、AI に予測させる内容は
今後48時間以内にこの通貨は上昇(Buy)、下落(Sell)、または横ばい(Hold)する可能性は高いですか?信頼度(0.0~1.0)と合わせて回答してください。 ただし、変動率が0.7%未満の場合は「Hold」としてください。
としています。48時間のいつでもいいからこの通貨ペアがどのくらい変動するのかということです。
この内容でAIに投げて予測精度を比較したノートはこちらです!是非ご覧ください!
まだまだ渡すデータもプロンプトの形式も要検討、、という感じですね。やりがいがありそうです。
終わり
重ねてになりますが、このnoteの続きが気になると思っていただけましたら是非「いいね」お願いします!私たちのやる気に直結します!ではまた次回!
