娶80岁老太婆的那个人它们是咱们想要用来权衡黄金 ETF 价钱的特征
发布日期:2022-09-23 05:01    点击次数:112
色视频线观看在线网站娶80岁老太婆的那个人

 

读取黄金 ETF 数据

本文使用机器学习措施来权衡最报复的贵金属之一黄金的价钱。咱们将创建一个线性顾虑模子,该模子从畴昔的黄金 ETF (GLD) 价钱中赢得信息,并复返对第二天黄金 ETF 价钱的权衡。GLD是径直投资什物黄金的最大ETF。(扫描本文最下方二维码赢得一起无缺源码和Jupyter Notebook 文献打包下载。)

领先要做的是:导入扫数必要库。 

# LinearRegression 是一个用于线性顾虑的机器学习库  from sklearn.linear_model import 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 价钱数据并将其存储在 Df 中。咱们删除不相干的列并使用 dropna() 函数删除 NaN 值。然后,咱们绘图黄金 ETF 收盘价。 

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

界说诠释注解变量

诠释注解变量是一个被操纵以细目第二天黄金 ETF 价钱的变量。纰漏地说,它们是咱们想要用来权衡黄金 ETF 价钱的特征。

该战略中的诠释注解变量是畴昔 3 天和 9 天的迁徙平均线。咱们使用 dropna() 函数删除 NaN 值并将特征变量存储在 X 中。

然而,您不错向 X 添加更多您合计对权衡黄金 ETF 价钱灵验的变量。这些变量不错是时间野心、其他 ETF 的价钱,举例黄金矿工 ETF (GDX) 或石油 ETF (USO),或美国经济数据。

界说因变量

雷同,因变量取决于诠释注解变量的值。简而言之,这是咱们试图权衡的黄金 ETF 价钱。咱们将黄金 ETF 价钱存储在 y 中。 

Df['S_3'] = Df['Close'].rolling(window=3).mean()  Df['S_9'] = Df['Close'].rolling(window=9).mean() Df['next_day_price'] = Df['Close'].shift(-1)  DfDf = Df.dropna()  X = Df[['S_3', 'S_9']]  y = Df['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”变量之间的数学关系,通过对散点图拟合一条线,“最佳”左证“x”的洞悉值诠释注解“y”的洞悉值,那么这么的方程 x 和 y 之间的关系称为线性顾虑分析。

为了进一步判辨,顾虑用自变量诠释注解了因变量的变化。因变量“y”是您要权衡的变量。自变量“x”是您用来权衡因变量的诠释注解变量。以下顾虑方程花式了这种关系: 

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

然后咱们使用拟合措施拟合自变量和因变量(x 和 y)以生成顾虑统共和常数。 

linear = LinearRegression().fit(X_train, y_train)  print("Linear Regression model")  print("Gold ETF Price (y) = %.2f * 3 Days Moving Average (x1) \  + %.2f * 9 Days Moving Average (x2) \  + %.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)。 

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

该图透露了黄金 ETF 的权衡价钱和骨子价钱。

当今,让咱们使用 score() 函数算计拟合优度。 

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

输出:

99.21

不错看出,模子的 R 平时为 99.21%。R 平时遥远介于 0 和 100% 之间。接近 100% 的分数标明该模子很好地诠释注解了黄金 ETF 的价钱。

绘图积贮收益

让咱们算计一下这个战略的积贮收益来分析它的发达。

累计收益算计体式如下:

•  生成黄金价钱的逐日百分比变化

•  当第二天的权衡价钱高于今日的权衡价钱时,创建一个以“1”暗示的买入来回音号

•  通过将逐日百分比变化乘以来回音号来算计战略请问。

•  临了,咱们将绘图积贮收益图 

gold = 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'].pct_change().shift(-1)  gold['signal'] = np.where(gold.predicted_price_next_day.shift(1) < gold.predicted_price_next_day,1,0)  gold['strategy_returns'] = gold.signal * gold['gold_returns']  ((gold['strategy_returns']+1).cumprod()).plot(figsize=(10,7),color='g')  plt.ylabel('Cumulative Returns')  plt.show() 

输出如下:

咱们还将算计夏普比: 

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

输出如下:

'Sharpe Ratio 1.06'

权衡逐日价钱

您不错使用以下代码来权衡黄金价钱,并给出咱们应该购买 GLD 仍是不持仓的来回音号: 

import datetime as dt  current_date = dt.datetime.now()  data = yf.download('GLD', '2008-06-01', current_date, 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', 'S_9']])  data['signal'] = np.where(data.predicted_gold_price.shift(1) < data.predicted_gold_price,"Buy","No Position")  data.tail(1)[['signal','predicted_gold_price']].T 

输出如下: