PythonでChatGPT APIを使った株式ニュース感情分析と自動売買シグナル生成

AI×自動売買

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に通知を飛ばす仕組みにすると、手動チェックの手間が減ります。

🔗 関連記事

Pythonで株価バックテストを実装する方法【初心者向け・移動平均クロス戦略】

タイトルとURLをコピーしました