成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

用 Python 機器學習預測黃金價格

開發 后端
本文使用機器學習方法來預測最重要的貴金屬之一黃金的價格。

 

讀取黃金 ETF 數據

本文使用機器學習方法來預測最重要的貴金屬之一黃金的價格。我們將創建一個線性回歸模型,該模型從過去的黃金 ETF (GLD) 價格中獲取信息,并返回對第二天黃金 ETF 價格的預測。GLD是直接投資實物黃金的最大ETF。(掃描本文最下方二維碼獲取全部完整源碼和Jupyter Notebook 文件打包下載。)

首先要做的是:導入所有必要庫。 

  1. # LinearRegression 是一個用于線性回歸的機器學習庫  
  2. from sklearn.linear_model import LinearRegression  
  3. # pandas 和 numpy 用于數據操作  
  4. import pandas as pd  
  5. import numpy as np  
  6. # matplotlib 和 seaborn 用于繪制圖形  
  7. import matplotlib.pyplot as plt  
  8. %matplotlib inline  
  9. plt.style.use('seaborn-darkgrid')  
  10. # yahoo Finance用于獲取數據  
  11. import yfinance as yf 

然后,我們讀取過去 12 年的每日黃金 ETF 價格數據并將其存儲在 Df 中。我們刪除不相關的列并使用 dropna() 函數刪除 NaN 值。然后,我們繪制黃金 ETF 收盤價。 

  1. Df = yf.download('GLD', '2008-01-01', '2020-6-22', auto_adjust=True 
  2. DfDf = Df[['Close']]  
  3. DfDf = Df.dropna()  
  4. Df.Close.plot(figsize=(10, 7),color='r' 
  5. plt.ylabel("Gold ETF Prices")  
  6. plt.title("Gold ETF Price Series")  
  7. plt.show() 

定義解釋變量

解釋變量是一個被操縱以確定第二天黃金 ETF 價格的變量。簡單地說,它們是我們想要用來預測黃金 ETF 價格的特征。

該策略中的解釋變量是過去 3 天和 9 天的移動平均線。我們使用 dropna() 函數刪除 NaN 值并將特征變量存儲在 X 中。

但是,您可以向 X 添加更多您認為對預測黃金 ETF 價格有用的變量。這些變量可以是技術指標、其他 ETF 的價格,例如黃金礦工 ETF (GDX) 或石油 ETF (USO),或美國經濟數據。

定義因變量

同樣,因變量取決于解釋變量的值。簡而言之,這是我們試圖預測的黃金 ETF 價格。我們將黃金 ETF 價格存儲在 y 中。 

  1. Df['S_3'] = Df['Close'].rolling(window=3).mean()  
  2. Df['S_9'] = Df['Close'].rolling(window=9).mean() 
  3. Df['next_day_price'] = Df['Close'].shift(-1)  
  4. DfDf = Df.dropna()  
  5. X = Df[['S_3', 'S_9']]  
  6. y = Df['next_day_price'] 

將數據拆分為訓練和測試數據集

在這一步中,我們將預測變量和輸出數據拆分為訓練數據和測試數據。通過將輸入與預期輸出配對,訓練數據用于創建線性回歸模型。

測試數據用于估計模型的訓練效果。

 •前 80% 的數據用于訓練,剩余的數據用于測試

  •X_train & y_train 是訓練數據集

   •X_test & y_test 是測試數據集 

  1. t = .8  
  2. t = int(t*len(Df))  
  3. XX_train = X[:t]  
  4. yy_train = y[:t]  
  5. XX_test = X[t:]  
  6. yy_test = y[t:] 

創建線性回歸模型

我們現在將創建一個線性回歸模型。但是,什么是線性回歸?

如果我們試圖捕捉“x”和“y”變量之間的數學關系,通過對散點圖擬合一條線,“最好”根據“x”的觀察值解釋“y”的觀察值,那么這樣的方程 x 和 y 之間的關系稱為線性回歸分析。

為了進一步分解,回歸用自變量解釋了因變量的變化。因變量“y”是您要預測的變量。自變量“x”是您用來預測因變量的解釋變量。以下回歸方程描述了這種關系: 

  1. Y = m1 * X1 + m2 * X2 + C  
  2. Gold ETF price = m1 * 3 days moving average + m2 * 15 days moving average + c  

然后我們使用擬合方法擬合自變量和因變量(x 和 y)以生成回歸系數和常數。 

  1. linear = LinearRegression().fit(X_train, y_train)  
  2. print("Linear Regression model")  
  3. print("Gold ETF Price (y) = %.2f * 3 Days Moving Average (x1) \  
  4. + %.2f * 9 Days Moving Average (x2) \  
  5. + %.2f (constant)" % (linear.coef_[0], linear.coef_[1], linear.intercept_)) 

輸出線性回歸模型:

黃金 ETF 價格 (y) = 1.20 * 3 天移動平均線 (x1) + -0.21 * 9 天移動平均線 (x2) + 0.43(常數)

預測黃金ETF價格

現在,是時候檢查模型是否在測試數據集中工作了。我們使用使用訓練數據集創建的線性模型來預測黃金 ETF 價格。預測方法找到給定解釋變量 X 的黃金 ETF 價格 (y)。 

  1. predicted_price = linear.predict(X_test)  
  2. predicted_price = pd.DataFrame(  
  3.     predicted_price, index=y_test.index, columns=['price'])  
  4. predicted_price.plot(figsize=(10, 7))  
  5. y_test.plot()  
  6. plt.legend(['predicted_price', 'actual_price'])  
  7. plt.ylabel("Gold ETF Price")  
  8. plt.show() 

該圖顯示了黃金 ETF 的預測價格和實際價格。

現在,讓我們使用 score() 函數計算擬合優度。 

  1. r2_score = linear.score(X[t:], y[t:])*100  
  2. float("{0:.2f}".format(r2_score)) 

輸出:

99.21

可以看出,模型的 R 平方為 99.21%。R 平方始終介于 0 和 100% 之間。接近 100% 的分數表明該模型很好地解釋了黃金 ETF 的價格。

繪制累積收益

讓我們計算一下這個策略的累積收益來分析它的表現。

累計收益計算步驟如下:

•  生成黃金價格的每日百分比變化

•  當第二天的預測價格高于當天的預測價格時,創建一個以“1”表示的買入交易信號

•  通過將每日百分比變化乘以交易信號來計算策略回報。

•  最后,我們將繪制累積收益圖 

  1. gold = pd.DataFrame()  
  2. gold['price'] = Df[t:]['Close']  
  3. gold['predicted_price_next_day'] = predicted_price  
  4. gold['actual_price_next_day'] = y_test  
  5. gold['gold_returns'] = gold['price'].pct_change().shift(-1)  
  6. gold['signal'] = np.where(gold.predicted_price_next_day.shift(1) < gold.predicted_price_next_day,1,0)  
  7. gold['strategy_returns'] = gold.signal * gold['gold_returns']  
  8. ((gold['strategy_returns']+1).cumprod()).plot(figsize=(10,7),color='g' 
  9. plt.ylabel('Cumulative Returns')  
  10. plt.show() 

輸出如下:

我們還將計算夏普比: 

  1. sharpe = gold['strategy_returns'].mean()/gold['strategy_returns'].std()*(252**0.5)  
  2. 'Sharpe Ratio %.2f' % (sharpe)  

輸出如下:

'Sharpe Ratio 1.06'

預測每日價格

您可以使用以下代碼來預測黃金價格,并給出我們應該購買 GLD 還是不持倉的交易信號: 

  1. import datetime as dt  
  2. current_date = dt.datetime.now()  
  3. data = yf.download('GLD', '2008-06-01', current_date, auto_adjust=True 
  4. data['S_3'] = data['Close'].rolling(window=3).mean()  
  5. data['S_9'] = data['Close'].rolling(window=9).mean()  
  6. datadata = data.dropna()  
  7. data['predicted_gold_price'] = linear.predict(data[['S_3', 'S_9']])  
  8. data['signal'] = np.where(data.predicted_gold_price.shift(1) < data.predicted_gold_price,"Buy","No Position")  
  9. data.tail(1)[['signal','predicted_gold_price']].T 

輸出如下:

 

 

責任編輯:龐桂玉 來源: Python中文社區
相關推薦

2018-02-25 19:02:45

Python機器學習算法

2022-02-21 16:05:26

機器學習優勢Python

2017-09-06 16:40:51

機器學習Airbnb預測房價

2021-08-21 14:30:58

機器學習bilibili股價

2021-08-23 11:15:20

Python機器學習bilibili

2022-06-09 09:14:31

機器學習PythonJava

2020-08-06 16:37:25

機器學習技術股票

2020-07-27 08:00:01

機器學習技術人工智能

2021-05-16 17:44:08

Python比特幣價格

2021-03-30 23:10:47

數據科學機器學習二分類

2012-07-27 16:12:26

景良東

2021-07-29 13:06:29

Python機器學習編程語言

2016-04-08 15:04:37

人工智能阿里小Ai

2017-05-03 19:08:10

機器學習

2018-03-20 15:33:05

深度學習加密貨幣

2018-08-30 14:58:12

機器學習磁盤故障

2020-01-31 16:08:00

?機器學習數據技術

2017-07-25 12:09:10

機器學習預測性維護模型

2020-08-28 07:00:00

機器學習預測股市人工智能

2021-02-02 10:43:13

比特幣區塊鏈加密貨幣
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 粉嫩一区二区三区性色av | 九九久久国产精品 | 久草网址 | 中文字幕一区二区在线观看 | 亚洲 中文 欧美 日韩 在线观看 | 欧美a区 | www.国产视频| 成人3d动漫一区二区三区91 | 手机在线一区二区三区 | 成人免费在线播放视频 | 亚洲精品国产综合区久久久久久久 | 日韩在线小视频 | 欧美一二三 | 日韩毛片中文字幕 | 一区二区三区四区电影视频在线观看 | 亚洲一区电影 | 亚洲国产一区二区三区 | 91精品久久久久久久久久入口 | 国产精品久久久精品 | tube国产 | 日日碰狠狠躁久久躁婷婷 | 日韩视频在线一区 | 国产成人一区二区三区电影 | 亚洲精品久久久蜜桃网站 | 欧美成视频 | 国产成人av在线 | 一级做a爰片久久毛片免费看 | 久久免费观看一级毛片 | 久日精品 | 亚洲一区二区高清 | 久久久精品一区二区三区 | 在线观看免费黄色片 | 亚洲欧美日韩精品 | 男人久久天堂 | 精品欧美一区二区久久久伦 | 夜夜精品浪潮av一区二区三区 | 亚洲第一黄色网 | 老司机免费视频 | 久久精品视频网站 | 日韩中文字幕在线观看视频 | 国产成人精品999在线观看 |