株式診断アシスタント|生成AI・ChatGPTで株価を予測する、やり方・プロンプト例

株式診断アシスタント|生成AI・ChatGPTで株価を予測する、やり方・プロンプト例

AIによる株価予測は、今日の投資判断に新たな視点を提供する可能性を秘めています。しかし、市場の不確実性やAIの学習限界を理解せず、その予測を盲信することは極めて危険です。この記事では、株の予想AIがどのように市場データを分析し、未来を予測しようとするのか、その仕組みと活用における具体的なリスク、そして賢明な利用のための注意点を徹底解説します。投資は常に自己責任であり、本情報は、投資判断の補助となる参考情報としてご活用ください。

株価予測に必要な情報の全体構造

企業固有情報

企業の性質・ビジネスモデル・競争力を把握するためのデータ。

  • 企業名・証券コード(例:トヨタ自動車、7203)
  • 業種・セクター(自動車、半導体、金融など)
  • 売上・営業利益・純利益などの過去3〜5年の財務情報
  • EPS(1株あたり利益)と配当実績
  • 株主構成・大株主の動向
  • IR資料や決算説明会での今後の展望(ガイダンス)

株価・テクニカルデータ

AIが現在の株価の動きや相場の状態を理解するための情報。

  • 現在の株価(直近終値)と直近の高値・安値
  • 出来高の推移
  • 移動平均線(5日・25日・75日など)
  • RSI・MACD・ボリンジャーバンドなどのテクニカル指標
  • ゴールデンクロス・デッドクロスの有無
  • 株価チャート画像(あれば)

市場・業界動向

個別株の動向は、市場・業界の影響を強く受けます。

  • 業界トレンド(成長業界か衰退業界か)
  • セクター全体の株価パフォーマンス(例:半導体指数SOX)
  • 競合他社の業績・株価推移
  • 国内外での規制・法改正や補助金などの政策情報

マクロ経済・金利・為替情報

全体相場の基調や投資マインドを左右するため、必要不可欠です。

  • 日経平均・TOPIX・S&P500など主要株価指数の動向
  • 為替(ドル円・ユーロ円など)
  • 長短金利(日本・米国)
  • インフレ率・消費者物価指数(CPI)
  • 政策金利の動向・中央銀行の声明(FRB・日銀など)

イベント・ニュース

株価に直結するような材料の有無も、予測精度に大きく影響します。

  • 決算発表・配当発表・株式分割
  • 経営陣の変更・M&A・自社株買い
  • 規制や法改正
  • 大口の投資家による売買情報(例:大量保有報告書)
  • 社会的インパクトのあるニュース(不祥事、提携発表など)

投資家心理・センチメント

AIが「今の市場が強気なのか弱気なのか」を読み取るための指標。

  • 恐怖指数(VIXなど)
  • SNS上の話題・株掲示板の投稿傾向
  • Googleトレンドなどの検索ボリューム(銘柄名、業界名)

GPT活用における前提条件

ChatGPTの出力が有効に働くためには、以下の認識・前提が重要です

  • ChatGPTはリアルタイム株価・未来予測(正確な数値)はできない
  • 傾向分析・予測材料の整理・意思決定補助には非常に有用
  • 入力情報が多く、構造化されているほど精度が上がる

活用目的別の入力情報一覧

目的GPTに渡すべき情報
中長期の株価動向を分析財務データ、業界動向、マクロ環境、決算情報
テクニカルな短期売買支援株価チャート、移動平均、RSI、MACD、出来高など
リスク評価・不安要素の洗い出し最近のIR・ニュース、SNS動向、競合比較
セクター全体の展望複数銘柄の財務・株価比較、業界ニュース
今買うべきか?売るべきか?現在株価、直近材料、AIによる賛否要素の整理

🔸プロンプト例(株価診断アシスタント:リアルタイム対応・コード入力型)

あなたは「株価診断アシスタント」です。  
以下の【株式コード】をもとに、対象企業の最新情報をリアルタイムWEB検索で収集し、株価の今後の見通しを投資判断の参考として総合的に分析してください。

【株式コード】例)7203

▼取得対象情報(すべてリアルタイムでWEBから取得)
1. 最新の株価(現在値、直近の高値・安値、過去1ヶ月の変動)
2. テクニカル指標(RSI・MACD・移動平均・出来高・ゴールデンクロス等)
3. 最新ニュース(決算、業績予想、株主関連、材料ニュース、不祥事など)
4. 業界・競合動向(同業他社の動き・相場全体の動きとの比較)
5. 経済環境の影響(為替、金利、CPI、日経平均の地合いとの相関)
6. 投資家の注目度(SNSや掲示板などでの言及・センチメント傾向)
7. その他特記事項(M&A、自社株買い、配当、分割など株価に影響する材料)

▼出力形式(以下の7項目に整理)
① 現在の株価と直近の値動きの概要  
② テクニカル的な買い・売りシグナルの有無  
③ 直近の企業ニュース要約と影響度の評価  
④ 業界全体と比較した当銘柄の立ち位置  
⑤ 投資家心理・注目度(強気/弱気の傾向)  
⑥ マクロ環境との相性と注意点  
⑦ 総合的な見通し(中立的に、メリット・リスクの両面を簡潔に)

※必要な情報はすべてリアルタイム検索で取得してください  
※分析にあたっては定量的根拠と定性的解釈を組み合わせてください  
※推測ではなく「今得られる公開情報」をもとに論じてください  
※数値・事実が古いままの場合は「最新データが取得不可」と明記してください

🔸使い方

  • 上記プロンプトの【株式コード】の箇所を、調べたい日本株の証券コードに差し替えるだけで済みます(例:9984→ソフトバンクグループ)。
  • 米国株など海外銘柄に対応させたい場合は「ティッカーコード」と国名を併記させて拡張可能です。

 

 

Pythonで株式コード(証券コード)を指定し、リアルタイムに株価・ニュース・テクニカル情報等を取得・解析する株式診断アシスタント

必要な構成要素(Pythonでリアルタイム処理する場合)

証券コード入力

  • 例:7203(トヨタ)

リアルタイム情報の取得手段(API or Webスクレイピング)

主に以下の選択肢があります:

情報種別取得手段説明
株価・チャートyfinance(米国株)/ kabutan, SBI, Yahoo! Finance JPのスクレイピング日本株は公式APIが少ないため、HTML解析が現実的
ニュース・IR情報RSS or スクレイピング(例:日経・Kabutan)キーワードと照合
テクニカル指標自前計算(pandas+ta-lib or pandas-ta)移動平均・MACD・RSIなどを株価時系列から導出

Pythonコード例(最小構成・日本株用)

ありがとうございます。
ご指示に従い、株式コード(例:7203)を入力すると、リアルタイムの株価・ニュース・テクニカル指標を収集し、ChatGPT APIで要約評価まで出力する、フル構築型のPythonスクリプト設計案を提示いたします。

機能一覧(仕様設計)

項目内容
入力日本株の証券コード(例:7203)
出力株価・ニュース・テクニカル指標・企業要約・AIによる投資判断
データ取得スクレイピング(Yahoo!・Kabutan等)
テクニカル計算pandas-taでMACD・RSI等
AI要約OpenAI GPT API(要APIキー)
表示方法コンソール出力+簡易可視化(matplotlib)
保存CSVログ自動保存(履歴管理可能)

必要ライブラリ(事前インストール)

pip install requests beautifulsoup4 pandas matplotlib openai pandas-ta

フルスクリプト(Python)

import requests
from bs4 import BeautifulSoup
import pandas as pd
import matplotlib.pyplot as plt
import pandas_ta as ta
import openai
import datetime
import time

# OpenAI APIキー設定(ご自身のキーに置き換えてください)
openai.api_key = "YOUR_API_KEY"

def fetch_stock_price(code):
    url = f'https://www.nikkei.com/nkd/company/?scode={code}'
    r = requests.get(url)
    soup = BeautifulSoup(r.text, 'html.parser')
    try:
        price = soup.select_one('.m-stockPriceElm_value').text.strip()
        return price
    except:
        return "取得失敗"

def fetch_kabutan_news(code):
    url = f"https://kabutan.jp/stock/news?code={code}"
    r = requests.get(url)
    soup = BeautifulSoup(r.text, 'html.parser')
    news_items = []
    for row in soup.select("table.news_table tr")[1:6]:
        try:
            time = row.select_one('td.time').text.strip()
            title = row.select_one('td a').text.strip()
            news_items.append(f"{time} - {title}")
        except:
            continue
    return news_items

def fetch_historical_data(code):
    url = f"https://query1.finance.yahoo.com/v7/finance/download/{code}.T?period1=1609459200&period2={int(time.time())}&interval=1d&events=history"
    df = pd.read_csv(url)
    return df

def analyze_technicals(df):
    df['RSI'] = ta.rsi(df['Close'], length=14)
    macd = ta.macd(df['Close'])
    df = pd.concat([df, macd], axis=1)
    return df

def plot_chart(df, code):
    plt.figure(figsize=(10,4))
    plt.plot(df['Date'], df['Close'], label="Close Price")
    plt.title(f"株価推移:{code}")
    plt.xlabel("日付")
    plt.ylabel("株価")
    plt.xticks(rotation=45)
    plt.tight_layout()
    plt.savefig(f"{code}_chart.png")
    plt.close()

def summarize_with_gpt(code, price, news, df):
    latest = df.iloc[-1]
    prompt = f"""
以下は日本株「{code}」に関する最新データです:

【現在の株価】:{price}円
【テクニカル指標】:
 - RSI:{latest['RSI']:.2f}
 - MACD:{latest['MACD_12_26_9']:.2f} / Signal:{latest['MACDs_12_26_9']:.2f}

【直近ニュース】:
{chr(10).join(news)}

これらの情報をもとに、投資家に対して中立的に今後のリスク・注目点・今買うべきかどうかを簡潔にアドバイスしてください。数値的根拠とニュースの影響も考慮してください。
"""
    response = openai.ChatCompletion.create(
        model="gpt-4",
        messages=[{"role":"user", "content": prompt}],
        temperature=0.5,
    )
    return response['choices'][0]['message']['content']

def main():
    code = input("証券コードを入力してください(例:7203): ").strip()
    print("\n📈 株価取得中...")
    price = fetch_stock_price(code)
    print(f"現在株価: {price}円")

    print("\n📰 ニュース取得中...")
    news = fetch_kabutan_news(code)
    for item in news:
        print(" -", item)

    print("\n📊 過去データ取得&指標分析中...")
    try:
        df = fetch_historical_data(code)
        df = analyze_technicals(df)
        plot_chart(df, code)
    except:
        print("Yahoo!から株価時系列の取得に失敗しました。")
        return

    print("\n🤖 GPTによる要約評価中...")
    summary = summarize_with_gpt(code, price, news, df)

    print("\n🔍 分析結果(AI要約):")
    print(summary)

    # ログ保存
    date_str = datetime.datetime.now().strftime("%Y%m%d_%H%M")
    df.to_csv(f"{code}_price_{date_str}.csv", index=False)
    with open(f"{code}_summary_{date_str}.txt", "w", encoding="utf-8") as f:
        f.write(summary)

    print(f"\n✅ 終了しました。チャート画像: {code}_chart.png, ログ保存済み")

if __name__ == "__main__":
    main()

出力ファイル

  • {コード}_chart.png:株価推移グラフ
  • {コード}_summary_yyyymmdd_hhmm.txt:AI要約
  • {コード}_price_yyyymmdd_hhmm.csv:株価データCSV

運用上の注意点

  • fetch_historical_data() は Yahoo! Finance 形式の簡易ダウンロードリンクを使用していますが、取得失敗時の処理を加味しています。
  • OpenAI API料金が発生するため、利用頻度に注意してください。
  • RSI・MACDの閾値は自動的に補足されますが、希望があれば「買いサイン」なども追加可です。

拡張提案(ご希望あれば別途対応)

拡張項目内容
Streamlit化ブラウザUIでの操作・結果表示
LINE通知LINE Botに株価と評価を自動通知
定期実行スケジューラ(schedule)による毎日15時など
監視リスト対応複数コードをCSVで読み込み・一括分析
売買サイン付きRSIやMACDで自動的に「買い」/「様子見」等出力

 

グーグルGeminiでのプロンプト例

ここでは、Pythonと一般的なAIライブラリ(例:transformerspandasなど)を使用することを想定し、ユーザーが特定のデータと予測モデルの選択肢を与えられるようなプロンプトを提示します。

プロンプトの基本的な考え方

AIを用いた株価予測は、一般的に以下の要素を含みます。

  1. データ収集・準備: 過去の株価データ、財務データ、ニュース記事など。
  2. 特徴量エンジニアリング: 予測に役立つ特徴量(例: 移動平均線、RSI、MACD、ニュースの感情スコアなど)の作成。
  3. モデル選択: 回帰モデル、時系列モデル、深層学習モデルなど。
  4. モデル学習: 準備したデータを使ってモデルを学習させる。
  5. 予測: 学習済みモデルで未来の株価を予測する。
  6. 評価: モデルの予測性能を評価する。

プロンプト例と使い方

以下のプロンプトは、ユーザーが過去の株価データ(CSV形式を想定)を提供し、そのデータに基づいて株価予測モデルを構築・実行するものです。


Python

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_squared_error
import numpy as np

# --- ユーザーが提供するデータと設定 ---
# 1. 株価データのファイルパス (CSV形式を想定)
#    例: 'stock_data.csv'
#    CSVには最低限 'Date' (日付) と 'Close' (終値) 列が必要です。
#    それ以外の列は特徴量として利用されます。
stock_data_path = 'ここに株価データのCSVファイルパスを貼り付けてください'

# 2. 予測対象の列名 (通常は 'Close')
target_column = 'Close'

# 3. 予測期間 (例: 5日後の株価を予測する場合、5を設定)
prediction_days = 5

# 4. 使用するモデルの選択 (現在はRandomForestRegressor)
#    - 他のモデルを使いたい場合は、この部分を変更してください。
#      例: from sklearn.linear_model import LinearRegression
#          model = LinearRegression()
selected_model = 'RandomForestRegressor' # 'RandomForestRegressor' or 'LinearRegression' or 'LSTM' (要追加実装)

# --- ここからAIによる株価予測処理 ---

def predict_stock_price(data_path, target_col, pred_days, model_choice):
    try:
        df = pd.read_csv(data_path)
    except FileNotFoundError:
        print(f"エラー: ファイルが見つかりません - {data_path}")
        return

    # 日付をインデックスに設定 (任意)
    if 'Date' in df.columns:
        df['Date'] = pd.to_datetime(df['Date'])
        df = df.sort_values(by='Date')
        df = df.set_index('Date')

    # 欠損値の確認と処理 (簡単化のため、ここではNaNを含む行を削除)
    df = df.dropna()

    # 特徴量エンジニアリング (例: 移動平均線、ラグ特徴量など)
    # 簡単化のため、ここでは単純なラグ特徴量のみを使用
    for i in range(1, pred_days + 1):
        df[f'{target_col}_lag_{i}'] = df[target_col].shift(i)

    # 目的変数 (予測対象) の作成
    df['target'] = df[target_col].shift(-pred_days)

    # NaNを含む行の削除 (ラグ特徴量や目的変数作成で生じる)
    df = df.dropna()

    # 特徴量 (X) と目的変数 (y) の分離
    X = df.drop(columns=[target_col, 'target'])
    y = df['target']

    # 訓練データとテストデータに分割
    # 時系列データのため、ランダム分割ではなく、時系列順に分割
    train_size = int(len(df) * 0.8)
    X_train, X_test = X[:train_size], X[train_size:]
    y_train, y_test = y[:train_size], y[train_size:]

    # モデルの選択と学習
    model = None
    if model_choice == 'RandomForestRegressor':
        model = RandomForestRegressor(n_estimators=100, random_state=42)
        print("モデル: RandomForestRegressor を使用します。")
    elif model_choice == 'LinearRegression':
        from sklearn.linear_model import LinearRegression
        model = LinearRegression()
        print("モデル: LinearRegression を使用します。")
    # ここにLSTMなどの他のモデルを追加できます。
    # elif model_choice == 'LSTM':
    #     # LSTMの実装は別途必要 (TensorFlow/Kerasなど)
    #     print("LSTMモデルは現在実装されていません。")
    #     return
    else:
        print(f"エラー: 未知のモデル選択 - {model_choice}")
        return

    model.fit(X_train, y_train)

    # テストデータでの予測
    predictions = model.predict(X_test)

    # 予測結果の評価
    mse = mean_squared_error(y_test, predictions)
    rmse = np.sqrt(mse)
    print(f"\n--- 予測結果の評価 ---")
    print(f"平均二乗誤差 (MSE): {mse:.2f}")
    print(f"二乗平均平方根誤差 (RMSE): {rmse:.2f}")

    # 最新のデータでの予測 (将来の株価予測)
    # 訓練データとテストデータに分割した後の最新データを使用
    latest_data = X.iloc[-1:].copy()
    future_prediction = model.predict(latest_data)
    print(f"\n--- 将来の株価予測 ---")
    print(f"現在のデータに基づいた{pred_days}日後の予測株価: {future_prediction[0]:.2f}")

    # 予測結果の可視化 (Matplotlibが必要)
    try:
        import matplotlib.pyplot as plt
        plt.figure(figsize=(12, 6))
        plt.plot(y_test.index, y_test, label='実際の株価', color='blue')
        plt.plot(y_test.index, predictions, label='予測株価', color='red', linestyle='--')
        plt.title(f'{pred_days}日後の株価予測 (モデル: {model_choice})')
        plt.xlabel('日付')
        plt.ylabel('株価')
        plt.legend()
        plt.grid(True)
        plt.show()
    except ImportError:
        print("\nMatplotlibがインストールされていません。可視化スキップ。")
        print("可視化するには 'pip install matplotlib' を実行してください。")

# 関数呼び出し
predict_stock_price(stock_data_path, target_column, prediction_days, selected_model)

 


 

プロンプトの使い方

 

Python環境の準備:

  • Pythonがインストールされていることを確認してください。
  • 必要なライブラリをインストールします。コマンドプロンプトやターミナルで以下を実行してください。

Bash

pip install pandas scikit-learn numpy matplotlib

株価データの準備

  • 過去の株価データ(例: 日付、始値、高値、安値、終値、出来高などを含むCSVファイル)を用意します。ファイル名は任意ですが、上記のコードの stock_data_path に設定するパスと一致させる必要があります。
  • 最低限、「日付」を示す列(例: Date)と「終値」を示す列(例: Close)が必要です。これらの列名が異なる場合は、コード内の target_column の値を変更してください。
  • CSVファイルの例:

コード スニペット

Date,Open,High,Low,Close,Volume
2023-01-01,100,105,98,103,100000
2023-01-02,103,108,102,107,120000
...

コードの実行

  • 上記のPythonコードをコピーし、任意のテキストエディタ(例: VS Code, Sublime Text, メモ帳など)に貼り付けます。
  • 重要: stock_data_path = 'ここに株価データのCSVファイルパスを貼り付けてください' の部分を、準備したCSVファイルの正確なパスに書き換えてください。
  • 例: 'C:/Users/YourUser/Documents/my_stock_data.csv' (Windows)
  • 例: '/Users/YourUser/Documents/my_stock_data.csv' (macOS/Linux)
  • 同じフォルダにCSVファイルを置く場合は、ファイル名だけでも大丈夫です(例: 'my_stock_data.csv')。
  • 必要であれば、prediction_days(何日後の株価を予測するか)や selected_model(使用するモデル)を変更してください。
  • ファイルを .py 拡張子で保存します(例: stock_predictor.py)。
  • コマンドプロンプトやターミナルを開き、保存したファイルのディレクトリに移動して、以下のコマンドを実行します。

Bash

python stock_predictor.py

 

結果の見方

 

  • 予測結果の評価: 平均二乗誤差 (MSE)二乗平均平方根誤差 (RMSE) は、モデルの予測誤差を示します。これらの値が小さいほど、モデルの予測精度が高いことを意味します。
  • 将来の株価予測: 現在のデータに基づいたX日後の予測株価 に、モデルが算出した将来の株価が表示されます。
  • グラフ: 実際の株価と予測株価の推移がグラフで表示され、視覚的に予測の精度を確認できます。

 

拡張のヒント

  • より多くの特徴量: 出来高、テクニカル指標(RSI, MACD, ボリンジャーバンドなど)、ニュースのセンチメント分析結果などを特徴量として追加することで、予測精度が向上する可能性があります。
  • 異なるモデルの試行: LSTM (Long Short-Term Memory) などの深層学習モデルは、時系列データの予測に強力な性能を発揮することがあります。TensorFlowやKerasと組み合わせることで実装可能です。
  • ハイパーパラメータチューニング: モデルの性能を最適化するために、ハイパーパラメータ(例: RandomForestRegressorn_estimators)を調整します。GridSearchCVRandomizedSearchCV などのツールが役立ちます。
  • リアルタイムデータとの連携: 証券会社のAPIなどと連携し、リアルタイムで最新の株価データを取得・更新する仕組みを構築することも可能です。

このプロンプトは、生成AI(ChatGPT)に対して、株価予測のための具体的なコードとその実行手順を求めるものです。ユーザーはデータパスの変更だけで利用できるため、手軽に株価予測を試すことができます。

AIによる株価予測は、今日の投資判断に新たな視点を提供する可能性を秘めています。しかし、市場の不確実性やAIの学習限界を理解せず、その予測を盲信することは極めて危険です。この記事では、株の予想AIがどのように市場データを分析し、未来を予測しようとするのか、その仕組みと活用における具体的なリスク、そして賢明な利用のための注意点を徹底解説します。投資は常に自己責任であり、本情報は、投資判断の補助となる参考情報としてご活用ください。