Otama's Playground

AIで遊んだ結果などをつらつら載せていきます。

【ChatGPT4o】最新AIにテクニカル分析を丸投げしたら出力結果はどうなる!?

この記事では「ChatGPT-4o」にテクニカル分析を丸投げした場合の具体的なプロセスと出力内容を共有します。「ChatGPT-4o」がどのような分析を行い、投資家にどのような情報を提供してくれるかを体感していただける内容ですので、ぜひ最後までご覧ください。

生成手順

  1. Yahoo Financeなどからデータをダウンロードする。
  2. ChatGPTに丸投げ。
    • プロンプト「CSVのデータをもとにVTIのテクニカル分析を行ってください」
  3. ChatGPTがコード生成から実行から分析まですべて行ってくれます。
    • 不足や誤ってる部分があれば適宜ChatGPTに投げる

ChatGPT-4oによるテクニカル分析の結果

ChatGPT-4oが生成したコード

MA25, MA50, RSI, ボリンジャーバンドを計算するコードが生成されました。

import pandas as pd

# Load the uploaded CSV file
file_path = '/mnt/data/VTI.csv'
vti_data = pd.read_csv(file_path)

# Convert the Date column to datetime
vti_data['Date'] = pd.to_datetime(vti_data['Date'])

# Calculate moving averages
vti_data['MA20'] = vti_data['Close'].rolling(window=20).mean()
vti_data['MA50'] = vti_data['Close'].rolling(window=50).mean()

# Calculate RSI
delta = vti_data['Close'].diff()
gain = (delta.where(delta > 0, 0)).rolling(window=14).mean()
loss = (-delta.where(delta < 0, 0)).rolling(window=14).mean()
rs = gain / loss
vti_data['RSI'] = 100 - (100 / (1 + rs))

# Calculate Bollinger Bands
vti_data['Upper Band'] = vti_data['MA20'] + (vti_data['Close'].rolling(window=20).std() * 2)
vti_data['Lower Band'] = vti_data['MA20'] - (vti_data['Close'].rolling(window=20).std() * 2)

vti_data.tail()

ChatGPTが提示しているスクリプトの実行結果

上記のコードをChatGPT-4oが実行した結果が以下です。

結果
          Date        Open        High         Low       Close   Adj Close  \
248 2024-05-09  256.299988  257.880005  256.000000  257.809998  257.809998   
249 2024-05-10  258.670013  259.029999  257.450012  258.049988  258.049988   
250 2024-05-13  259.079987  259.079987  257.559998  258.190002  258.190002   
251 2024-05-14  258.230011  259.670013  258.079987  259.450012  259.450012   
252 2024-05-15  260.850006  261.720001  260.442993  261.700012  261.700012   

      Volume        MA20        MA50        RSI  Upper Band  Lower Band  
248  2418700  251.126499  254.275201  75.281334  258.212062  244.040936  
249  1922500  251.378999  254.384601  72.919387  259.078955  243.679043  
250  1948400  251.793999  254.450401  69.095469  260.031940  243.556058  
251  2463500  252.309499  254.546401  70.853088  261.118686  243.500312  
252   934943  253.010500  254.741401  77.617279  262.475447  243.545554

ChatGPT-4oによるテクニカル分析結果

上記の結果をもとにChatGPT-4oが最終的な分析結果を提示してくれます。

1. 移動平均線 (Moving Averages)

  • 20日移動平均線 (MA20): 253.01
  • 50日移動平均線 (MA50): 254.74

2. 相対力指数 (RSI)

  • RSI: 77.62(70以上は買われ過ぎを示唆)

3. ボリンジャーバンド (Bollinger Bands)

  • 上部バンド: 262.48
  • 下部バンド: 243.55
  • バンド中央: 20日移動平均線と一致

分析

  • 現在の株価: 261.70
  • 買われ過ぎ: RSIが70を超えているため、現在の株価は買われ過ぎと見なされます。
  • ボリンジャーバンド: 株価が上部バンドに近づいているため、価格が上昇し過ぎている可能性があります。

まとめ

VTIは現在、強い上昇トレンドにありますが、買われ過ぎの兆候が見られます。短期的には調整が入る可能性が高いです。長期的な投資家は、20日移動平均線と50日移動平均線が上向きであるため、引き続きホールドを検討できます。

グラフの作成も依頼してみた

ChatGPT-4oにグラフ作成も依頼してみました。

ChatGPTが生成したコード

import pandas as pd
import matplotlib.pyplot as plt

# CSVファイルを読み込む
file_path = 'path_to_your_VTI.csv'
vti_data = pd.read_csv(file_path)

# Date列をdatetime型に変換
vti_data['Date'] = pd.to_datetime(vti_data['Date'])

# 移動平均線を計算
vti_data['MA20'] = vti_data['Close'].rolling(window=20).mean()
vti_data['MA50'] = vti_data['Close'].rolling(window=50).mean()

# RSIを計算
delta = vti_data['Close'].diff()
gain = (delta.where(delta > 0, 0)).rolling(window=14).mean()
loss = (-delta.where(delta < 0, 0)).rolling(window=14).mean()
rs = gain / loss
vti_data['RSI'] = 100 - (100 / (1 + rs))

# ボリンジャーバンドを計算
vti_data['Upper Band'] = vti_data['MA20'] + (vti_data['Close'].rolling(window=20).std() * 2)
vti_data['Lower Band'] = vti_data['MA20'] - (vti_data['Close'].rolling(window=20).std() * 2)

# 株価と移動平均線をプロット
plt.figure(figsize=(14, 7))
plt.plot(vti_data['Date'], vti_data['Close'], label='Close Price', color='blue')
plt.plot(vti_data['Date'], vti_data['MA20'], label='20-Day MA', color='orange')
plt.plot(vti_data['Date'], vti_data['MA50'], label='50-Day MA', color='green')

# ボリンジャーバンドをプロット
plt.plot(vti_data['Date'], vti_data['Upper Band'], label='Upper Bollinger Band', color='red', linestyle='--')
plt.plot(vti_data['Date'], vti_data['Lower Band'], label='Lower Bollinger Band', color='red', linestyle='--')

# タイトルとラベルを追加
plt.title('VTI Technical Analysis')
plt.xlabel('Date')
plt.ylabel('Price')
plt.legend(loc='best')
plt.grid(True)
plt.show()

# RSIをプロット
plt.figure(figsize=(14, 4))
plt.plot(vti_data['Date'], vti_data['RSI'], label='RSI', color='purple')
plt.axhline(70, linestyle='--', alpha=0.5, color='red')
plt.axhline(30, linestyle='--', alpha=0.5, color='green')
plt.title('Relative Strength Index (RSI)')
plt.xlabel('Date')
plt.ylabel('RSI')
plt.legend(loc='best')
plt.grid(True)
plt.show()

# データフレームの最後の数行を表示
print(vti_data.tail(10))

生成されたグラフ

VTI Technical Analysis

VTI Technical Analysis
VTI Technical Analysis
RSI
RSI
RSI