嘗試不寫任何代碼完全交由chatgpt做一個股票預測模型之第二部曲

更新於 發佈於 閱讀時間約 22 分鐘
  • 文內如有投資理財相關經驗、知識、資訊等內容,皆為創作者個人分享行為。
  • 有價證券、指數與衍生性商品之數據資料,僅供輔助說明之用,不代表創作者投資決策之推介及建議。
  • 閱讀同時,請審慎思考自身條件及自我決策,並應有為決策負責之事前認知。
  • 方格子希望您能從這些分享內容汲取投資養份,養成獨立思考的能力、判斷、行動,成就最適合您的投資理財模式。
好的看他說得一口像資料科學家一樣我就照著她說的做
好的取得完數據之後我們照他說得考慮政治因素市場情緒
import yfinance as yf
import pandas as pd
import numpy as np
import datetime as dt
import requests

# 設定要取得的股票代碼和時間範圍
ticker = "AAPL"
start_date = dt.datetime(2016, 1, 1)
end_date = dt.datetime(2021, 12, 31)

# 使用 yfinance 取得股票價格資料
df = yf.download(ticker, start=start_date, end=end_date)

# 新增其他相關數據欄位
# 市場情緒:VIX波動率指數
vix_url = "https://fred.stlouisfed.org/graph/fredgraph.csv?id=VIXCLS"
vix_df = pd.read_csv(vix_url, index_col=0, parse_dates=True)
df = pd.merge(df, vix_df, how='left', left_index=True, right_index=True)

# 政治因素:美國總統就職日期
inauguration_dates = {
'Trump': '2017-01-20',
'Biden': '2021-01-20'
}
df['Inauguration'] = np.nan
for president, date in inauguration_dates.items():
inauguration = pd.to_datetime(date)
df['Inauguration'][df.index >= inauguration] = president

# 移除缺失值
df = df.dropna()

# 儲存處理後的資料
df.to_csv('stock_data.csv')
ok他給了我VIX波動率指數和美國總統就職日期
再來看看他能不能幫忙做特徵轉換和特徵工程
import pandas as pd
from sklearn.preprocessing import StandardScaler

# 讀取資料
df = pd.read_csv('stock_data.csv', index_col=0)

# 將 Inauguration 欄位做 label encoding
df['Inauguration'] = df['Inauguration'].map({'Trump': 0, 'Biden': 1})

# 計算收盤價的一階差分
df['Close_diff'] = df['Adj Close'].diff()

# 計算 VIX 的 5 日移動平均值
df['VIX_5MA'] = df['VIXCLS'].rolling(window=5).mean()

# 將數據標準化
scaler = StandardScaler()
df_scaled = pd.DataFrame(scaler.fit_transform(df), index=df.index, columns=df.columns)

# 計算收盤價的未來一天差分
df_scaled['Close_diff_shifted'] = df_scaled['Close_diff'].shift(-1)

# 刪除最後一列缺失值
df_scaled = df_scaled[:-1]

# 儲存處理後的資料
df_scaled.to_csv('processed_data.csv')
看起來不錯他對數據轉換,標準化,encoding都會
還算了一下收盤價的一階差分當作特徵工程項
不過過程中其實有些許錯誤我自己跳下去修改了一下之後
把整段代碼貼上補一句問他
import pandas as pd
import numpy as np
from sklearn.preprocessing import MinMaxScaler
from keras.models import Sequential
from keras.layers import Dense, LSTM, Dropout

# 讀取資料
df = pd.read_csv('processed_data.csv', index_col=0)

# 分割訓練集和測試集
train_size = int(len(df) * 0.7)
train_data = df.iloc[:train_size, :]
test_data = df.iloc[train_size:, :]

# 標準化數據
scaler = MinMaxScaler()
train_data_scaled = scaler.fit_transform(train_data)
test_data_scaled = scaler.transform(test_data)

# 設定時間窗口大小
window_size = 30

# 創建 X_train 和 y_train
X_train, y_train = [], []
for i in range(window_size, len(train_data_scaled)):
X_train.append(train_data_scaled[i-window_size:i, :])
y_train.append(train_data_scaled[i, -2])
X_train, y_train = np.array(X_train), np.array(y_train)

# 創建 LSTM 模型
model = Sequential()
model.add(LSTM(units=50, return_sequences=True, input_shape=(X_train.shape[1], X_train.shape[2])))
model.add(Dropout(0.2))
model.add(LSTM(units=50, return_sequences=True))
model.add(Dropout(0.2))
model.add(LSTM(units=50))
model.add(Dropout(0.2))
model.add(Dense(units=1))

# 編譯模型
model.compile(optimizer='adam', loss='mean_squared_error')

# 訓練模型
model.fit(X_train, y_train, epochs=50, batch_size=32)

# 預測未來的股價
inputs = df.iloc[len(df)-len(test_data)-window_size:, :].values
inputs = scaler.transform(inputs)
X_test = []
for i in range(window_size, len(inputs)):
X_test.append(inputs[i-window_size:i, :])
X_test = np.array(X_test)
predicted_price = model.predict(X_test)
predicted_price = scaler.inverse_transform(predicted_price)

# 視覺化結果
import matplotlib.pyplot as plt
plt.plot(test_data['Adj Close'].values, color='red', label='Actual Price')
plt.plot(predicted_price, color='blue', label='Predicted Price')
plt.title('Stock Price Prediction')
plt.xlabel('Time')
plt.ylabel('Stock Price')
plt.legend()
plt.show()
到這邊就出現問題了
y_train.append(train_data_scaled[i, -2])#不是我要預測的 y 收盤價欄位
for i in range(window_size, len(train_data_scaled)):
X_train.append(train_data_scaled[i-window_size:i, :])
#這一段也很怪應該改成
for i in range(0, len(inputs)-window_size):
X_train.append(train_data_scaled[i:i+window_size, :])
看來他搞混了我的預測目標是明天收盤價,而不是收盤價的差分
大概做到這邊就極限了他開始胡言亂語
後面出現神經網路內部架構的錯誤
好吧我只能親手動手來了,不過他倒是提供了一個很好的藍圖
最終結果算是我跟chatgpt協作的成果
import yfinance as yf
import pandas as pd
import numpy as np
import datetime as dt
import requests
from textblob import TextBlob
from sklearn.preprocessing import LabelEncoder

# 設定要取得的股票代碼和時間範圍
ticker = "AAPL"
start_date = dt.datetime(2013, 1, 18)
end_date = dt.datetime(2023, 2, 18)

# 使用 yfinance 取得股票價格資料
df = yf.download(ticker, start=start_date, end=end_date)

# 新增其他相關數據欄位
# 市場情緒:VIX波動率指數
vix_url = "https://fred.stlouisfed.org/graph/fredgraph.csv?id=VIXCLS"
vix_df = pd.read_csv(vix_url, index_col=0, parse_dates=True)
df = pd.merge(df, vix_df, how='left', left_index=True, right_index=True)

# 政治因素:美國總統就職日期
inauguration_dates = {
'Trump': '2017-01-20',
'Biden': '2021-01-20'
}
df['Inauguration'] = np.nan
for president, date in inauguration_dates.items():
inauguration = pd.to_datetime(date)
df['Inauguration'][df.index >= inauguration] = president
le = LabelEncoder()
df['Inauguration'] = le.fit_transform(df['Inauguration'].astype(str))


# 儲存處理後的資料
df.to_csv('stock_data.csv')
import pandas as pd
from sklearn.preprocessing import StandardScaler

# 讀取資料
df = pd.read_csv('stock_data.csv', index_col=0)

# 計算收盤價的一階差分
df['Close_diff'] = df['Adj Close'].diff()

# 計算 VIX 的 5 日移動平均值
df['VIX_5MA'] = df['VIXCLS'].rolling(window=5).mean()

# 計算收盤價的未來一天差分
df['Close_diff_shifted'] = df['Close_diff'].shift(-1)

# 計算未來一天收盤價
df['Close_Tomorrow'] = df['Close'].shift(-1)

df = df.dropna()
df_processed = df

# 儲存處理後的資料
df_processed.to_csv('processed_data.csv')
import pandas as pd
import numpy as np
from sklearn.preprocessing import MinMaxScaler
from keras.models import Sequential
from keras.layers import Dense, LSTM, Dropout

# 讀取資料
df = pd.read_csv('processed_data.csv', index_col=0)

# 分割訓練集和測試集
train_size = int(len(df) * 0.7)
train_data = df.iloc[:train_size, :]
test_data = df.iloc[train_size:, :]

# 標準化數據
scaler = MinMaxScaler()
train_data_scaled = scaler.fit_transform(train_data)
test_data_scaled = scaler.transform(test_data)

# y各自做特徵縮放
y_max = df['Close_Tomorrow'].max()
y_min = df['Close_Tomorrow'].min()
train_data_scaled[:,-1] = (train_data['Close_Tomorrow'].values-y_min)/(y_max-y_min)
test_data_scaled[:,-1] = (test_data['Close_Tomorrow'].values-y_min)/(y_max-y_min)

def inverse_transform_y(y):
y *= (y_max-y_min)
y += y_min
return y

# 設定時間窗口大小
window_size = 30

# 創建 X_train 和 y_train
X_train, y_train = [], []
for i in range(0,len(train_data_scaled)-window_size):
X_train.append(train_data_scaled[i:i+window_size, :])
y_train.append(train_data_scaled[i+window_size, -1])
X_train, y_train = np.array(X_train), np.array(y_train)

# 創建 LSTM 模型
model = Sequential()
model.add(LSTM(units=50, return_sequences=True, input_shape=(X_train.shape[1], X_train.shape[2])))
model.add(Dropout(0.2))
model.add(LSTM(units=50, return_sequences=True))
model.add(Dropout(0.2))
model.add(LSTM(units=50))
model.add(Dense(units=1))

# 編譯模型
model.compile(optimizer='adam', loss='mean_squared_error')

# 訓練模型
model.fit(X_train, y_train, epochs=10, batch_size=32)

# 預測未來的股價
inputs = df.iloc[len(df)-len(test_data)-window_size:, :].values
inputs = scaler.transform(inputs)
X_test = []
for i in range(window_size, len(inputs)):
X_test.append(inputs[i-window_size:i, :])
X_test = np.array(X_test)

train_predicted_price = inverse_transform_y(model.predict(X_train))
test_predicted_price = inverse_transform_y(model.predict(X_test))

# 視覺化結果
import matplotlib.pyplot as plt
plt.plot(train_data['Close_Tomorrow'].values, color='red', label='Actual Price(train)')
plt.plot(train_predicted_price, color='blue', label='Predicted Price(train)')
plt.title('Stock Price Prediction')
plt.xlabel('Time')
plt.ylabel('Stock Price')
plt.legend()
plt.show()

plt.plot(test_data['Close_Tomorrow'].values, color='red', label='Actual Price(test)')
plt.plot(test_predicted_price, color='blue', label='Predicted Price(test)')
plt.title('Stock Price Prediction')
plt.xlabel('Time')
plt.ylabel('Stock Price')
plt.legend()
plt.show()
這就是照著chatgpt的思路(考量政治因素市場情緒)搞出的一個股價預測模型
大概在前幾年就看過許多人這樣搞這種LSTM然後抓股價開高收低量
這種文章在網路上滿天飛
CHATGPT可能在訓練資料集有看過相關的文章
唯一有幫助的是我要他製作一些市場情緒政治因素的特徵
說真的我還真的不會做,他還知道要去哪個URL撈市場情緒:VIX波動率指數
# 市場情緒:VIX波動率指數
vix_url = "https://fred.stlouisfed.org/graph/fredgraph.csv?id=VIXCLS"
vix_df = pd.read_csv(vix_url, index_col=0, parse_dates=True)
df = pd.merge(df, vix_df, how='left', left_index=True, right_index=True)
如果是chatgpt出來以前的時代大概要花一些時間google才找到的
什麼是市場情緒特徵,然後理解什麼是VIX指標,之後再研究怎麼用python下載
和現有程式做整合而CHATGPT出來後只要問他他馬上可以把
VIX指標的URL給出來並自動merge到df裡當作一項特徵,算是很大的幫助
最後來看一下表現:
test r2_score 0.59 左右看來有點準但又不是太準,但是方向抓得出來
總結
我可以看到chatgpt是一個超級強大的助手,特別是對於像我這樣的內容創作者。過去身為一個工程師我常常為一篇文章編寫大量代碼,但在這篇文章中,我的工作量其實減少許多。大部份代碼都由chatgpt完成,確實是一個不錯的工具
感謝您的閱讀,希望您喜歡這篇文章!
如果您想要來支持我的內容創作那麼您可以用
請我喝杯咖啡讓我更有創作的熱情跟動力🙂
為什麼會看到廣告
人工智能工作經驗跟研究
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
機器人會幫助我們獲得財務自由嗎? 毫無疑問,OpenAI 的 ChatGPT 非常出色! 我喜歡寫有關金融市場的文章,尤其是從數據科學的角度。 不用說,這個人工智能工具對我來說形成了一個很好的交集; 這能滿足我內心的書呆子,同時證明這工具對追求財務自由有價值嗎? 我問了一個非常直率的問題,直接對其進
你有沒有錯過 Binance 上的一個大型加密硬幣泵? 也許您正忙於工作,或者只是不夠快而無法抓住機會。 這是一種令人沮喪的感覺,尤其是當你看到價格在你眼前飛漲時。 但是,如果有一種方法可以實時識別這些爆漲? 在本文中,我們將向您展示如何使用 Python 快速輕鬆地識別加密貨幣暴漲。
首先可以這樣寫告訴chatgpt你希望他表現得像個linux terminal 不用寫解釋,只要回覆linux terminal應該回復的東西即可
google的以圖搜圖相信大家都不陌生,非常好用 本人這篇文章是紀錄一下自己如何利用本身在人工智能方面的知識 土法煉鋼一個以圖搜圖算法,至於跟google一不一樣就待討論了 首先以圖搜圖本身是一個相似度比對問題,人類怎麼做相似度比對呢? 好比給你一堆圖片,之後要求你選一張喜歡的,之後把剩下的圖片都拿
Google JAX是一種用於轉換數值函數的機器學習框架。 它被描述為匯集了autograd(通過函數微分自動獲得梯度函數)和TensorFlow的XLA(加速線性代數)的修改版本。 它旨在盡可能地遵循NumPy的結構和工作流程,並與各種現有框架(如TensorFlow和PyTorch)一起工作。
機器人會幫助我們獲得財務自由嗎? 毫無疑問,OpenAI 的 ChatGPT 非常出色! 我喜歡寫有關金融市場的文章,尤其是從數據科學的角度。 不用說,這個人工智能工具對我來說形成了一個很好的交集; 這能滿足我內心的書呆子,同時證明這工具對追求財務自由有價值嗎? 我問了一個非常直率的問題,直接對其進
你有沒有錯過 Binance 上的一個大型加密硬幣泵? 也許您正忙於工作,或者只是不夠快而無法抓住機會。 這是一種令人沮喪的感覺,尤其是當你看到價格在你眼前飛漲時。 但是,如果有一種方法可以實時識別這些爆漲? 在本文中,我們將向您展示如何使用 Python 快速輕鬆地識別加密貨幣暴漲。
首先可以這樣寫告訴chatgpt你希望他表現得像個linux terminal 不用寫解釋,只要回覆linux terminal應該回復的東西即可
google的以圖搜圖相信大家都不陌生,非常好用 本人這篇文章是紀錄一下自己如何利用本身在人工智能方面的知識 土法煉鋼一個以圖搜圖算法,至於跟google一不一樣就待討論了 首先以圖搜圖本身是一個相似度比對問題,人類怎麼做相似度比對呢? 好比給你一堆圖片,之後要求你選一張喜歡的,之後把剩下的圖片都拿
Google JAX是一種用於轉換數值函數的機器學習框架。 它被描述為匯集了autograd(通過函數微分自動獲得梯度函數)和TensorFlow的XLA(加速線性代數)的修改版本。 它旨在盡可能地遵循NumPy的結構和工作流程,並與各種現有框架(如TensorFlow和PyTorch)一起工作。
你可能也想看
Google News 追蹤
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
昨天我們有提到,在美股週一開盤之後,已經大致確定了川普當選的可能性。市場也繼續開始擁抱多頭,而昨晚的美股,更進一步連續三個交易日四大指數均漲的行情,道瓊更是大漲了驚人的712 點 (1.85%),將最高點位推到 40,988.81 往 41,000邁進。道瓊和 S&P500 同樣創新歷史新高。
Thumbnail
本篇文章,我分享了如何利用ChatGPT進行股票分析的驚險經歷。從意外買到股票,到利用AI輔助進行技術分析,最終股票漲停板的過程。本文強調,雖然ChatGPT能提供有價值的投資建議,但投資者仍需自行負責最終決策。AI可以是我們的諮詢對象,但盈虧自負,投資需謹慎。讓我們一起看看AI在股市中的應用吧!
Thumbnail
本研究使用了盤中逐筆成交資料(Tick-by-tick Data)來進行股票價格的預測,並討論了馬可夫鏈模型和擴散核模型在這方面的應用。研究結果表明,大多數股票的未來三秒價格可以在少於22個狀態中找到,顯示了交易價格的低不確定性。此外,研究還發現波動性更大和價格更高的股票更難以準確預測。
Thumbnail
個股當沖完整記錄目前也會放上來做紀錄,其實量化自動交易就是完成實際上的回測數據,接下來就是嚴格執行,過程中不能干預,並維持確保系統正常執行,並持續開發新策略即可。
Thumbnail
二月是市場投資人又愛又恨的一個月,受AI類股財報影響,美股再次創下新高。能參與到AI類股效益的投資人,和那些望之卻步未上車的人,將出現巨大的差異。第一季的財報效益相當正面,利多及利空消息都得到了合理的反應,但隨著財報季節接近尾聲,資金除了保守以待之外,總經數據將成為市場的重點,因為這將影響未來的利率
Thumbnail
經濟狀況持續好過投資者的預期,被不斷上修,加上 AI 潛力的深不可測,主導了經濟、產業及許多公司未來的發展,美股正享受牛市的歌舞昇平!
在想是不是投資者都會在開盤前有一個大致上的策略思考,決定自己當天的投資策略? 至少我是的。當然,投資策略這種事我想不只是牽涉一天兩天的事,對我來說,思考模式還是以長期的趨勢為準,再來決定眼前的選股。 舉例來說放了一個這麼長的年假,其中經歷Arm營收超乎預期被視為泛AI一員再次大漲了20幾%,隨後昨
Thumbnail
美股四大指數全數上漲,道瓊及標普 500 指數均創歷史新高,安謀、Palantir大漲,AI 持續引領科技股成為市場耀眼明星!
Thumbnail
AI樂觀情緒蔓延,推動股市繼續走揚。標普 500 指數創下歷史新高,象徵著 AI 正帶領股市翻開新的篇章,由於 AI 發展仍屬於初期階段,長多趨勢值得期待。
記得我在前某篇文章講到如果聽到股市正在炒作甚麼題材,大部分時候你聽聽就好。因為一個技術或新興市場要起來,不是你想的那麼容易,比如現在炒得兇的AI,其實至少10幾年前各科技大廠就在做了,ChatGPT都不知道在微軟內部做多久了才一舉成名,然後搭著他的熱潮,AI伺服器等為因應大量運算需求硬體的設備才會需
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
昨天我們有提到,在美股週一開盤之後,已經大致確定了川普當選的可能性。市場也繼續開始擁抱多頭,而昨晚的美股,更進一步連續三個交易日四大指數均漲的行情,道瓊更是大漲了驚人的712 點 (1.85%),將最高點位推到 40,988.81 往 41,000邁進。道瓊和 S&P500 同樣創新歷史新高。
Thumbnail
本篇文章,我分享了如何利用ChatGPT進行股票分析的驚險經歷。從意外買到股票,到利用AI輔助進行技術分析,最終股票漲停板的過程。本文強調,雖然ChatGPT能提供有價值的投資建議,但投資者仍需自行負責最終決策。AI可以是我們的諮詢對象,但盈虧自負,投資需謹慎。讓我們一起看看AI在股市中的應用吧!
Thumbnail
本研究使用了盤中逐筆成交資料(Tick-by-tick Data)來進行股票價格的預測,並討論了馬可夫鏈模型和擴散核模型在這方面的應用。研究結果表明,大多數股票的未來三秒價格可以在少於22個狀態中找到,顯示了交易價格的低不確定性。此外,研究還發現波動性更大和價格更高的股票更難以準確預測。
Thumbnail
個股當沖完整記錄目前也會放上來做紀錄,其實量化自動交易就是完成實際上的回測數據,接下來就是嚴格執行,過程中不能干預,並維持確保系統正常執行,並持續開發新策略即可。
Thumbnail
二月是市場投資人又愛又恨的一個月,受AI類股財報影響,美股再次創下新高。能參與到AI類股效益的投資人,和那些望之卻步未上車的人,將出現巨大的差異。第一季的財報效益相當正面,利多及利空消息都得到了合理的反應,但隨著財報季節接近尾聲,資金除了保守以待之外,總經數據將成為市場的重點,因為這將影響未來的利率
Thumbnail
經濟狀況持續好過投資者的預期,被不斷上修,加上 AI 潛力的深不可測,主導了經濟、產業及許多公司未來的發展,美股正享受牛市的歌舞昇平!
在想是不是投資者都會在開盤前有一個大致上的策略思考,決定自己當天的投資策略? 至少我是的。當然,投資策略這種事我想不只是牽涉一天兩天的事,對我來說,思考模式還是以長期的趨勢為準,再來決定眼前的選股。 舉例來說放了一個這麼長的年假,其中經歷Arm營收超乎預期被視為泛AI一員再次大漲了20幾%,隨後昨
Thumbnail
美股四大指數全數上漲,道瓊及標普 500 指數均創歷史新高,安謀、Palantir大漲,AI 持續引領科技股成為市場耀眼明星!
Thumbnail
AI樂觀情緒蔓延,推動股市繼續走揚。標普 500 指數創下歷史新高,象徵著 AI 正帶領股市翻開新的篇章,由於 AI 發展仍屬於初期階段,長多趨勢值得期待。
記得我在前某篇文章講到如果聽到股市正在炒作甚麼題材,大部分時候你聽聽就好。因為一個技術或新興市場要起來,不是你想的那麼容易,比如現在炒得兇的AI,其實至少10幾年前各科技大廠就在做了,ChatGPT都不知道在微軟內部做多久了才一舉成名,然後搭著他的熱潮,AI伺服器等為因應大量運算需求硬體的設備才會需