天天看點

用Python預測黃金期貨價格走勢,原來機器學習這麼簡單!(内含代碼)

大家好,今天我們來探讨一個有趣的話題:如何運用機器學習技術來預測黃金期貨的價格走勢?

黃金作為重要的避險資産,其價格走勢備受投資者關注,尤其是近期世界局勢動蕩,黃金價格一路沖高,更加吸引了大家的眼球,那麼如何對黃金的價格進行相對準确的預測呢?

傳統的黃金價格預測主要依賴基本面分析和技術分析,但面對複雜多變的市場環境,這些方法的預測效果往往不盡如人意。近年來,随着人工智能技術的快速發展,越來越多的量化投資者開始嘗試用機器學習模型來預測黃金價格,取得了不錯的效果。

機器學習預測黃金期貨價格的基本思路是:将影響價格的各種因素(如曆史價格、持倉量、通脹率等)作為模型的輸入特征,将未來的價格作為模型的輸出目标,通過大量的曆史資料訓練模型,讓它自動學習價格波動規律,進而對未來走勢進行預測。

下面我們就用Python來一步步實作這個過程,看看機器學習的魅力吧!

第一步:導入必要的庫并擷取資料

import numpy as np
import pandas as pd
import akshare as ak
from datetime import datetime
from sklearn.preprocessing import MinMaxScaler
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, LSTM


# 擷取黃金期貨曆史資料
symbol = "AU0"  # 滬金主力合約代碼


df = ak.futures_zh_daily_sina(symbol=symbol)
# 設定日期列為索引
df['date'] = pd.to_datetime(df['date'])
df.set_index('date', inplace=True)


# 選取收盤價資料
df = df[['close']]           

第二步:資料預處理

為了友善模型學習,需要對資料進行歸一化處理,将價格縮放到0到1之間。此外,為了預測未來N天的價格,需要将資料重構為監督學習問題。

# 資料歸一化
scaler = MinMaxScaler()
data = scaler.fit_transform(df)


# 資料重構
X = []
y = []
window = 60  # 視窗期
future = 5  # 預測未來幾天


for i in range(window, len(data)-future+1):
    X.append(data[i-window:i])
    y.append(data[i:i+future])
    
X = np.array(X)
y = np.array(y)


# 劃分訓練集和測試集
split = int(len(X) * 0.8) 
X_train, X_test = X[:split], X[split:]
y_train, y_test = y[:split], y[split:]           

第三步:建構并訓練LSTM模型

這裡我們使用LSTM(長短期記憶網絡)作為黃金價格預測模型。LSTM是一種特殊的RNN(循環神經網絡),善于處理時間序列資料。

model = Sequential()
model.add(LSTM(units=64, input_shape=(window, 1)))
model.add(Dense(units=future))  


model.compile(optimizer='adam', loss='mean_squared_error')
model.fit(X_train, y_train, epochs=50, batch_size=32)           

訓練結果如下:

用Python預測黃金期貨價格走勢,原來機器學習這麼簡單!(内含代碼)

模型使用了Adam自适應學習率的優化算法,它結合了RMSprop和Momentum兩種優化算法的優點,是目前經常會被使用的一種優化算法,它在處理高維空間中的局部最小值和鞍點方面表現良好;損失函數使用的是均方誤差函數,它可以直覺的衡量預測價格與真實價格的差異情況,是回歸問題中最常用的損失函數之一;

模型最後訓練的損失結果是2.6029e-04,說明預測值與實際值的差距已經非常小;

第四步:模型評估與預測

用測試集資料評估模型的預測效果:

y_pred = model.predict(X_test)


y_test = scaler.inverse_transform(y_test.reshape(-1, 1)).flatten()
y_pred = scaler.inverse_transform(y_pred.reshape(-1, 1)).flatten()


from sklearn.metrics import mean_squared_error
rmse = np.sqrt(mean_squared_error(y_test, y_pred))
print(f"測試集RMSE: {rmse}")           

最後,用訓練好的模型對未來5天的黃金價格進行預測:

last_data = data[-window:]
last_data = np.expand_dims(last_data, axis=0)


next_5d_price = model.predict(last_data)
next_5d_price = scaler.inverse_transform(next_5d_price)


print(f"未來5天的黃金價格預測值為: {next_5d_price[0]}")           

結果輸出:

用Python預測黃金期貨價格走勢,原來機器學習這麼簡單!(内含代碼)

可以看到,我們的LSTM模型在測試集上的預測誤差(RMSE)約為6元/克,對于動辄幾百元的黃金價格來說,這個預測效果還是比較不錯的。此外,模型預測未來5天黃金價格會先跌後漲,整體呈現震蕩走勢。

用Python預測黃金期貨價格走勢,原來機器學習這麼簡單!(内含代碼)

當然,這隻是一個簡單的示例,實際應用中,我們還可以納入更多影響價格的特征,如美元指數、通脹預期、地緣政治風險等,也可以嘗試更複雜的深度學習模型,以進一步提高預測的準确性。

不過,再先進的模型也不是萬能的,黃金價格會受到諸多不可預測因素的影響,是以在實際投資中,一定要理性看待模型預測結果,綜合考慮各方面因素,控制好風險。

以上就是用Python機器學習預測黃金期貨價格走勢的全部内容啦,是不是覺得挺有意思?感興趣的小夥伴不妨動手實踐一下,說不定就能挖掘出黃金市場的新規律呢!

繼續閱讀