ChatGPT APIで株式ニュースの感情(強気/弱気/中立)を自動判定し、売買シグナルを生成する実装をまとめます。
📘 外部参考:OpenAI API ドキュメント(公式)
結論から言うと:
- ChatGPT APIでニュースの感情(強気/弱気/中立)を自動判定できます
- 価格モメンタムと組み合わせてBUY/SELL/HOLDシグナルを生成できます
- Discord通知と組み合わせると毎朝のアラートが自動化できます
ChatGPT APIで感情分析する仕組み
📘 外部参考:Sequence Classification(Hugging Face 公式)
株式市場はニュースや決算発表に敏感に反応します。ChatGPT APIを使えば「強気(Bullish)」「弱気(Bearish)」「中立(Neutral)」の3段階でスコアを自動判定できます。
必要なライブラリ
pip install openai requests pandas python-dotenv
感情分析の実装
import openai, json, pandas as pd
openai.api_key = "YOUR_OPENAI_API_KEY"
def analyze_sentiment(text: str) -> dict:
prompt = f"株式ニュース: {text}
感情スコア(-1〜1)とBullish/Bearish/NeutralをJSONで答えてください"
resp = openai.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": prompt}],
temperature=0.1
)
return json.loads(resp.choices[0].message.content)
news_list = [
"トヨタが通期利益予想を上方修正、EV販売が好調",
"米FRBが利上げを示唆、株式市場に売り圧力",
]
results = [analyze_sentiment(n) for n in news_list]
print(pd.DataFrame(results))
感情スコアから売買シグナルを生成
import yfinance as yf, numpy as np
def generate_signal(ticker: str, sentiment_score: float) -> str:
hist = yf.Ticker(ticker).history(period="5d")
momentum = (hist["Close"].iloc[-1] - hist["Close"].iloc[0]) / hist["Close"].iloc[0]
composite = sentiment_score * 0.5 + np.tanh(momentum * 10) * 0.5
if composite > 0.3: return "BUY"
if composite < -0.3: return "SELL"
return "HOLD"
tickers = {"7203.T": 0.7, "6758.T": -0.4, "9984.T": 0.1}
for t, s in tickers.items():
print(f"{t}: {generate_signal(t, s)}")
Discord Webhookで通知自動化
📘 外部参考:Discord Webhook ガイド(公式・日本語)
import requests
DISCORD_WEBHOOK_URL = "https://discord.com/api/webhooks/YOUR_WEBHOOK_URL"
def send_signal(ticker, signal, score):
emoji = {"BUY": "📈", "SELL": "📉", "HOLD": "➡️"}[signal]
requests.post(DISCORD_WEBHOOK_URL, json={"content": f"{emoji} {ticker}: {signal} (score={score:.2f})"})
まとめ
実際に試してみると、感情スコア単体では精度が低いので、価格モメンタムと組み合わせるのが現実的だと感じています。毎朝Discordに通知を飛ばす仕組みにすると、手動チェックの手間が減ります。

