この記事では「ChatGPT-4o」にテクニカル分析を丸投げした場合の出力内容を共有します。「ChatGPT-4o」がどれくらいの精度で分析を行ってくれるのか気になってる方も多いと思うので、該当する方はぜひ結果を眺めていってください。
Contents
生成手順
- Yahoo Financeなどからデータをダウンロードする。
- 今回はYahoo FinanceからVTIのデータをCSV形式でダウンロードしました。
- https://finance.yahoo.com/quote/VTI/history/?filter=history&frequency=1d
- ChatGPTに丸投げ。
- プロンプト「CSVのデータをもとにVTIのテクニカル分析を行ってください」
- ChatGPTがコード生成から実行から分析まですべて行ってくれます。
- 不足や誤ってる部分があれば適宜ChatGPTに投げる
ChatGPT-4oによるテクニカル分析の結果
ChatGPT-4oが生成したコード
MA25, MA50, RSI, ボリンジャーバンドを計算するコードが生成されました。
Python
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が生成したコード
Python
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

RSI
