嘗試不寫任何代碼完全交由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完成,確實是一個不錯的工具
感謝您的閱讀,希望您喜歡這篇文章!
如果您想要來支持我的內容創作那麼您可以用
請我喝杯咖啡讓我更有創作的熱情跟動力🙂
為什麼會看到廣告
人工智能工作經驗跟研究
留言1
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
現代社會跟以前不同了,人人都有一支手機,只要打開就可以獲得各種資訊。過去想要辦卡或是開戶就要跑一趟銀行,然而如今科技快速發展之下,金融App無聲無息地進到你生活中。但同樣的,每一家銀行都有自己的App時,我們又該如何選擇呢?(本文係由國泰世華銀行邀約) 今天我會用不同角度帶大家看這款國泰世華CUB
Thumbnail
《愛情市場學》一書從商業顧問的角度深入探討戀愛的經濟法則,幫助女性理解如何在戀愛市場上定位自己。作者張國洋以管理學知識,分析戀愛的供需關係、策略應對,以及如何提升自身吸引力。透過這本書,幫助讀者提升戀愛思維,學會如何在複雜的愛情市場中找到理想伴侶。
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
【不夠善良的我們】究竟不夠善良的部份是什麼!? 這並不是一部講述愛情、親情甚至友情的故事,整個故事到最後揭露了過程中的各種"惡意",又是從哪裡感受到的呢!? 2024最夯的台劇【不夠善良的我們】,一次看到林依晨、許瑋甯、賀軍翔、柯震東同台飆戲,一步步帶我們走進人性的真實樣貌!!
Thumbnail
文章前警語: 小火車的投資筆記主要為透過基本面、財報做策略篩選並回測勝率後,(策略為部位-20%即停損,同時持有約240-300日)再加上個人研究公司的知識心得分享,並不帶有任何推薦意味、內容也並非投資意見。不會有任何目標價。希望您看完文章後,養成自我獨立思考的習慣。謹慎考慮,審慎投資。 你
Thumbnail
二月是市場投資人又愛又恨的一個月,受AI類股財報影響,美股再次創下新高。能參與到AI類股效益的投資人,和那些望之卻步未上車的人,將出現巨大的差異。第一季的財報效益相當正面,利多及利空消息都得到了合理的反應,但隨著財報季節接近尾聲,資金除了保守以待之外,總經數據將成為市場的重點,因為這將影響未來的利率
Thumbnail
現代社會跟以前不同了,人人都有一支手機,只要打開就可以獲得各種資訊。過去想要辦卡或是開戶就要跑一趟銀行,然而如今科技快速發展之下,金融App無聲無息地進到你生活中。但同樣的,每一家銀行都有自己的App時,我們又該如何選擇呢?(本文係由國泰世華銀行邀約) 今天我會用不同角度帶大家看這款國泰世華CUB
Thumbnail
《愛情市場學》一書從商業顧問的角度深入探討戀愛的經濟法則,幫助女性理解如何在戀愛市場上定位自己。作者張國洋以管理學知識,分析戀愛的供需關係、策略應對,以及如何提升自身吸引力。透過這本書,幫助讀者提升戀愛思維,學會如何在複雜的愛情市場中找到理想伴侶。
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
【不夠善良的我們】究竟不夠善良的部份是什麼!? 這並不是一部講述愛情、親情甚至友情的故事,整個故事到最後揭露了過程中的各種"惡意",又是從哪裡感受到的呢!? 2024最夯的台劇【不夠善良的我們】,一次看到林依晨、許瑋甯、賀軍翔、柯震東同台飆戲,一步步帶我們走進人性的真實樣貌!!
Thumbnail
文章前警語: 小火車的投資筆記主要為透過基本面、財報做策略篩選並回測勝率後,(策略為部位-20%即停損,同時持有約240-300日)再加上個人研究公司的知識心得分享,並不帶有任何推薦意味、內容也並非投資意見。不會有任何目標價。希望您看完文章後,養成自我獨立思考的習慣。謹慎考慮,審慎投資。 你
Thumbnail
二月是市場投資人又愛又恨的一個月,受AI類股財報影響,美股再次創下新高。能參與到AI類股效益的投資人,和那些望之卻步未上車的人,將出現巨大的差異。第一季的財報效益相當正面,利多及利空消息都得到了合理的反應,但隨著財報季節接近尾聲,資金除了保守以待之外,總經數據將成為市場的重點,因為這將影響未來的利率