利用Python进行机器学习来预测黄金价格。通过获取黄金ETF的数据,本文采用机器学习方法来预测黄金这一重要贵金属的价格。

2024-07-01 09:54:06 作者:6kYzQ!yIEmp_M6UkZ
我们计划建立一个线性回归模型,该模型将利用过去黄金 ETF (GLD) 的价格数据,对第二天的黄金 ETF 价格进行预测。GLD是投资实物黄金的最大ETF产品。请扫描底部二维码以获取源代码和Jupyter Notebook 文件的完整打包下载。首先需要进行的步骤是导入所有必要的库。 

# LinearRegression 是一个用于线性回归的机器学习库。  可从 sklearn.linear_model 中导入 LinearRegression 。  在数据操作方面, pandas 和 numpy 也很常用,可使用以下语句导入:  import pandas as pd  import numpy as np  在绘制图表方面, matplotlib 和 seaborn 也是很受欢迎的库,可使用以下语句导入:  import matplotlib.pyplot as plt  %matplotlib inline  plt.style.use('seaborn-darkgrid')  对于数据获取,常用的是 yahoo  Finance,可使用以下语句导入:  import yfinance as yf 

我们已经将过去12年每日的黄金ETF价格数据存储在数据框(DataFrame)中了。我们会移除不相关的列,并使用 dropna() 函数来清除 NaN 值。我们将删除无关列,并通过使用 dropna() 函数删除 NaN 值。接下来,我们将绘制黄金 ETF 的收盘价。 

df = yf.download('GLD', '2008-01-01', '2020-6-22', auto_adjust=True)  df = df[['Close']]  df = df.dropna()  df.Close.plot(figsize=(10, 7),代码如下:\n```Python\nimport matplotlib.pyplot as plt\nplt.plot(price_series, color='r')\nplt.ylabel("黄金 ETF 价格")\nplt.title("黄金 ETF 价格曲线")\nplt.show()\n```\n解释变量是指可以被操纵以确定次日黄金 ETF 价格的变量。简单来说,这些是我们希望用来预测黄金 ETF 价格的特点。简单来说,这些是我们用来预测黄金 ETF 价格的特征。在这个策略中,我们会使用过去 3 天和 9 天的移动平均线作为解释变量。我们利用 dropna() 函数来清除 NaN 值,并将特征变量存储在 X 中。

不过,您可以增加更多您认为对预测黄金 ETF 价格有帮助的变量。这些变量可以是技术指标,也可以是其他 ETF 的价格,例如黄金矿工 ETF (GDX) 或石油 ETF (USO),或者是美国经济数据。
的定义是,当解释变量为 时,因变量

也随之确定。总的来说,我们的目标是预测黄金ETF的价格。我们将黄金 ETF 的价格储存在变量 y 中。`X`已经赋值为Df[['S_3', 'S_9', 'next_day_price']].然后进行下一步处理.将数据分解为训练和测试数据集。在此步骤中,我们将自变量和目标数据分成训练数据和测试数据。使用训练数据将输入和预期输出进行配对,从而创建线性回归模型。利用将输入数据与期望输出数据进行配对,可以用训练数据来建立线性回归模型。通过使用测试数据来评估模型的训练效果。

 •80% 的数据用于训练,剩下的数据将被用于测试

  •X_train & y_train 是用于训练的数据集

   •X_test & y_test 是用于测试的数据集 

t = .8  t = int(t*len(Df))  XX_train = X[:t]  yy_train = y[:t]  XX_test = X[t:]  yy_test = y[t:] 

建立线性回归模型

我们将要建立一个线性回归模型。那么,线性回归是指什么?线性回归分析是一种统计学方法,用于分析两个变量之间的线性关系。通过拟合散点图上的一条直线,以最佳方式解释自变量(x)对因变量(y)的观察值的影响。为了更详细地拆分,我们可以重新回到使用自变量来解释因变量的变化。变量'y'是您需要预测的因变量。自变量"指的是您用来预测因变量的解释变量。下面的回归方程描述了这种关系: 

Y = m1 * X1 + m2 * X2 + C  黄金 ETF 价格 = m1 * 3 日 移动 平均 + m2 * 15 日 移动 平均 + c  

然后我们通过拟合方法对自变量和因变量(x 和 y)进行拟合,以生成回归系数和常数。使用LinearRegression()方法对X_train进行线性拟合。要求用简体中文重新写和重新组织以下文本:\n y_train)  print("线性回归模型")  print("黄金ETF价格(y)= %.2f * 3天移动平均(x1) \  + %.2f * 9天移动平均(x2) \  + %.2f (常数)" % (linear.coef_[0], linear.coef_[1],\n重新发布:\n假设我们有一组数据,其中包括黄金ETF价格和3天和9天的移动平均价格。我们可以用线性回归模型来预测黄金ETF价格。模型可以表示为:黄金ETF价格= 3天移动平均*系数1 + 9天移动平均*系数2 + 常数。 \n我们可以通过训练数据来估计系数和常数。经过计算,模型的系数值为%.2f和%.2f,常数值为%.2f。这意味着黄金ETF价格受到3天移动平均和9天移动平均的影响。线性回归模型的表达如下:\n黄金 ETF 价格 \( y \) = 1.20 * 3 天移动平均线 \( x1 \) + (-0.21) * 9 天移动平均线 \( x2 \) + 0.43\n现在,是时候验证模型在测试数据集中的表现了。我们利用训练数据集建立的线性模型来预测黄金 ETF 的价格。我们采用使用训练数据集创建的线性模型,用于预测黄金 ETF 价格。预测方法是通过确定给定解释变量 X 对应的黄金 ETF 价格(y)。实现以下文本的简化汉语翻译和改写:\n预测价格为predicted_price = linear.predict(X_test)。然后,创建一个名为predicted_price的Pandas DataFrame,将predicted_price作为数据和y_test的索引传递,并将列命名为'price'。最后,绘制一个10*7大小的图表,显示预测价格和y_test的比较结果,其中预测价格用蓝色表示。下图展示了黄金 ETF 的预测价格和实际价格。代码如下:\n```python\nif('actual_price' in p):\n plt.plot(p['date'], p['actual_price'], label='实际价格')\nplt.plot(p['date'], p['predicted_price'], label='预测价格')\nplt.legend()\nplt.xlabel("日期")\nplt.ylabel("黄金 ETF 价格")\nplt.show()\n```现在,我们来用score()函数来计算适配度。现在,我们来使用 score() 函数来计算拟合优度。r2_score=linear.score(X[t:], y[t:])*100\n输出:\n99.21\n可以看出,模型的 R 平方为 99.21%。R的平方始终介于0和100%之间。几乎达到100%的得分表明该模型对黄金ETF价格的解释非常成功。我们可以通过绘制累积收益来计算此策略的总收益,并进而分析其表现。
累计收益的计算步骤如下:

•  每日计算黄金价格的百分比变化;

•  如果第二天的预测价格高于当天的预测价格,则生成一个值为“1”的买入交易信号;

•  通过将每日百分比变化乘以交易信号来计算策略回报。最终,

• 我们将绘制累积收益图。 金融数据框架设为pd.DataFrame()。gold['price']设为Df[t:]['Close']。gold['predicted_price_next_day']设为predicted_price。gold['actual_price_next_day']设为y_test。gold['gold_returns']设为gold['price']的百分比变化后一位。gold['signal']设为np.where(gold.predicted_price_next_day的上一位小于gold.predicted_price_next_day时。gold['策略回报'] = gold.signal * gold['黄金回报']\n(gold['策略回报']+1).cumprod().plot(figsize=(10,7)tio %.2f' % (sharpe)\nplt.plot(gold['strategy_cum_returns'], color='g')\nplt.ylabel('Cumulative Returns')\nplt.show()\n以上是代码和输出结果。\n我们也会计算夏普比率:\nsharpe = gold['strategy_returns'].mean() / gold['strategy_returns'].std() * (252 ** 0.5)\n其输出结果如下:\n'Sharpe Ratio %.2f' % (sharpe)“Tio 1.06”是一个预测黄金价格的算法。使用以下代码,您可以预测黄金价格并得出购买 GLD 或不持有的交易信号:\n 

import datetime as dt\n 

current_date = dt.datetime.now()\n 

data = yf.download('GLD', '2008-06-01', current_date, )\n该算法每天都会预测黄金价格,并告知我们是否该购买 GLD 或停止持有。
重新翻译:\n auto_adjust=True)  data['S_3'] = data['Close'].rolling(window=3).mean()  data['S_9'] = data['Close'].rolling(window=9).mean()  datadata = data.dropna()  data['predicted_gold_price'] = linear.predict(data[['S_3',\n自动调整真实值=True。\n数据的'S_3'是数据的收盘价的滚动平均数,滑动窗口为3。\n数据的'S_9'是数据的收盘价的滚动平均数,滑动窗口为9。\ndatadata是除去缺失值之后的数据。\n数据的'predicted_gold_price'是线性预测数据[['S_3',['S_9']])  数据['信号'] = np.where(数据.预测的黄金价格.shift(1) < 数据.预测的黄金价格,"买入","无 持仓")  数据.tail(1)[['信号','预测的黄金价格']].T 

结果显示:

 

 

在线咨询 拨打电话

电话

02088888888

微信二维码

微信二维码