欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

用Python快速分析和預(yù)測(cè)股票價(jià)格

系統(tǒng) 1690 0

1 前言

某天,我的一個(gè)朋友告訴我說,實(shí)現(xiàn)經(jīng)濟(jì)自由的關(guān)鍵是股票投資。雖然這是市場(chǎng)繁榮時(shí)期的真理,但如今業(yè)余交易股票仍然是一個(gè)有吸引力的選擇。由于在線交易平臺(tái)的便利性,涌現(xiàn)了許多自主價(jià)值投資者或家庭主婦交易員。甚至還有一些成功的故事和廣告吹噓有“快速致富計(jì)劃”學(xué)習(xí)如何投資回報(bào)率高達(dá) 40% 甚至更高的股票。投資已成為當(dāng)今職場(chǎng)人士的福音。

現(xiàn)在的問題是:哪些股票?如何分析股票?與其他股票相比,所選股票的回報(bào)和風(fēng)險(xiǎn)是什么?

本文的目標(biāo)是讓你了解使用快速簡(jiǎn)單的 Python 代碼分析股票的一種方法。只需花 12 分鐘閱讀這篇文章——最好自己完成一下。然后你就可以快速瀏覽到你的第一份金融分析報(bào)告。

為了開始學(xué)習(xí)和分析股票,我們將從快速查看歷史股票價(jià)格開始。這將通過從 Pandas 網(wǎng)絡(luò)數(shù)據(jù)閱讀器和雅虎財(cái)經(jīng)中提取最新的股票數(shù)據(jù)來實(shí)現(xiàn)。然后,我們將嘗試通過探索性分析,如相關(guān)性熱圖、Matplotlib 可視化以及使用線性分析和k最近鄰(K Nearest Neighbor,KNN)的預(yù)測(cè)分析來查看數(shù)據(jù)。

在此推薦小編創(chuàng)建的Python學(xué)習(xí)交流群:835017344,這里是python學(xué)習(xí)者聚集地,有大牛答疑,有資源共享!有想學(xué)習(xí)python編程的,或是轉(zhuǎn)行,或是大學(xué)生,還有工作中想提升自己能力的,正在學(xué)習(xí)的小伙伴歡迎加入學(xué)習(xí)。


2 加載雅虎財(cái)經(jīng)數(shù)據(jù)集

Pandas 網(wǎng)絡(luò)數(shù)據(jù)閱讀器 (Pandas web data reader)是 Pandas 庫(kù)的一個(gè)擴(kuò)展,用于與大多數(shù)最新的金融數(shù)據(jù)進(jìn)行通信,包括雅虎財(cái)經(jīng)、谷歌財(cái)經(jīng)、Enigma 等資源。

我們將使用以下代碼提取 Apple 的股票價(jià)格:

          import pandas as pd
          
import datetime
import pandas_datareader.data as web
from pandas import Series, DataFrame

start = datetime.datetime(2010, 1, 1)

end = datetime.datetime(2017, 1, 11)

df = web.DataReader("AAPL", 'yahoo', start, end)

df.tail()

image

來源于雅虎財(cái)經(jīng)的股票價(jià)格

這段代碼將提取從 2010 年 1 月到 2017 年 1 月的 7 年的數(shù)據(jù)。你可以根據(jù)需要調(diào)整開始和結(jié)束日期。接下來的分析過程,我們將使用收盤價(jià)格,即股票在一天交易結(jié)束時(shí)的最終價(jià)格。

3 探索股票的移動(dòng)平均值和收益率

在這個(gè)分析中,我們使用兩個(gè)關(guān)鍵的測(cè)量指標(biāo)來分析股票:移動(dòng)平均值和回報(bào)率。

3.1 移動(dòng)平均值:確定趨勢(shì)

滾動(dòng)平均 / 移動(dòng)平均(MA)通過不斷更新平均價(jià)格來平滑價(jià)格數(shù)據(jù),有助于降低價(jià)格表中的“噪音”。此外,該移動(dòng)平均線可能充當(dāng)“阻力”,代表著股票的下跌和上升趨勢(shì),你可以從中預(yù)期它的未來趨勢(shì),不太可能偏離阻力點(diǎn)。

讓我們開始寫代碼來得到滾動(dòng)平均值:

          close_px = df['Adj Close']
          

mavg = close_px.rolling(window=100).mean()

image

最后 10 個(gè)移動(dòng)平均值

這將計(jì)算股票收盤價(jià)最后 100 個(gè)滑窗(100天)的移動(dòng)平均值,并取每個(gè)滑窗的移動(dòng)平均值。正如你所看到的,移動(dòng)平均線在滑窗上穩(wěn)步上升,并不遵循股票價(jià)格曲線的鋸齒線。為了更好地理解,讓我們用 Matplotlib 來繪制它。我們將用移動(dòng)平均線來繪制股票價(jià)格表。

          %matplotlib inline
          
import matplotlib.pyplot as plt
from matplotlib import style

Adjusting the size of matplotlib

import matplotlib as mpl
mpl.rc('figure', figsize=(8, 7))

mpl. version

Adjusting the style of matplotlib

style.use('ggplot')

close_px.plot(label='AAPL')

mavg.plot(label='mavg')

plt.legend()

image

蘋果股票移動(dòng)平均價(jià)格(mavg)

移動(dòng)平均使曲線平滑,顯示股票價(jià)格的漲跌趨勢(shì)。

在這張圖表中,移動(dòng)平均線顯示了股票價(jià)格上升或下降的趨勢(shì)。從邏輯上講,你應(yīng)該在股市低迷時(shí)買進(jìn),在股市上漲時(shí)賣出。

3.2 回報(bào)偏差:用于確定風(fēng)險(xiǎn)和收益

預(yù)期收益衡量投資收益概率分布的平均值或預(yù)期值。投資組合的預(yù)期回報(bào)是通過將每項(xiàng)資產(chǎn)的權(quán)重乘以其預(yù)期回報(bào),再加上每項(xiàng)投資的價(jià)值來計(jì)算的。(摘自投資百科,investopedia)

你可以參考以下公式:

image

收益公式

根據(jù)這個(gè)公式,我們可以畫出收益,如下。

          rets = close_px / close_px.shift(1) - 1
          

rets.plot(label='return')

image

收益率

從邏輯上講,我們理想的股票收益應(yīng)該盡可能高且穩(wěn)定。如果你是風(fēng)險(xiǎn)規(guī)避者(像我一樣),你可能希望避開這種股票,因?yàn)槟憧吹?2013 年下跌了 10%。這個(gè)決定很大程度上取決于你對(duì)股票的總體看法和對(duì)其他競(jìng)爭(zhēng)對(duì)手股票的分析。

4 分析競(jìng)爭(zhēng)對(duì)手股票

在這部分中,我們將分析一家公司相對(duì)于其競(jìng)爭(zhēng)對(duì)手的表現(xiàn)。假設(shè)我們對(duì)科技公司感興趣,并想比較一下這些巨頭:蘋果(Apple)、通用電氣(GE)、谷歌(Google)、IBM 和微軟(Microsoft)。

          dfcomp = web.DataReader(['AAPL', 'GE', 'GOOG', 'IBM', 'MSFT'],'yahoo',start=start,end=end)['Adj Close']
          

image

蘋果、通用電氣、谷歌、IBM 和微軟的股價(jià)

你將會(huì)從雅虎財(cái)經(jīng)的股票價(jià)格中得到一張相當(dāng)整潔平滑的收盤價(jià)表。

4.1 相關(guān)性分析:競(jìng)爭(zhēng)對(duì)手會(huì)互相影響嗎?

我們可以通過運(yùn)行 pandas 的百分比變化和相關(guān)函數(shù)來分析競(jìng)爭(zhēng)關(guān)系。百分比變化將定義收益 ,找出與前一天相比價(jià)格變化的程度。了解相關(guān)性將有助于我們理解收益是否受其他股票收益的影響。

          retscomp = dfcomp.pct_change()
          

corr = retscomp.corr()

image

讓我們繪制散點(diǎn)圖來觀察 Apple 和 GE 的收益分布。

          plt.scatter(retscomp.AAPL, retscomp.GE)
          

plt.xlabel('Returns AAPL')

plt.ylabel('Returns GE')

image

Apple 和 GE 的散點(diǎn)圖

我們可以看到,GE 的收益和 Apple 的收益之間存在著微弱的正相關(guān)關(guān)系。似乎在大多數(shù)情況下, Apple 的回報(bào)率越高,GE 的回報(bào)率也就越高。

讓我們通過繪制散點(diǎn)矩陣進(jìn)一步改進(jìn)我們的分析,以可視化競(jìng)爭(zhēng)股票之間可能的相關(guān)性。在對(duì)角點(diǎn),我們將運(yùn)行核密度估計(jì)(Kernel Density Estimate,KDE)。KDE 是一個(gè)基本的數(shù)據(jù)平滑問題,它基于有限的數(shù)據(jù)樣本對(duì)總體進(jìn)行推斷。它有助于生成對(duì)總體分布的估計(jì)。

          pd.scatter_matrix(retscomp, diagonal='kde', figsize=(10, 10))
          

image

KDE 圖和散點(diǎn)矩陣

從這里我們可以得到大多數(shù)股票之間的分布近似正相關(guān)。

為了證明正相關(guān)關(guān)系,我們將使用熱圖來可視化競(jìng)爭(zhēng)股票之間的相關(guān)程度。注意顏色越淺代表這兩只股票的相關(guān)性越強(qiáng)。

          plt.imshow(corr, cmap='hot', interpolation='none')
          
plt.colorbar()

plt.xticks(range(len(corr)), corr.columns)
plt.yticks(range(len(corr)), corr.columns)

image

競(jìng)爭(zhēng)股票之間相關(guān)性的熱圖

從散點(diǎn)矩陣和熱圖中我們可以發(fā)現(xiàn),競(jìng)爭(zhēng)股票之間有很大的相關(guān)性。然而,這可能并不能說明因果關(guān)系,只能說明科技行業(yè)的趨勢(shì)而不能說明相互競(jìng)爭(zhēng)的股票是如何相互影響的。

4.2 股票回報(bào)率和風(fēng)險(xiǎn)

除了相關(guān)性,我們還分析了每支股票的風(fēng)險(xiǎn)和回報(bào)。本例中我們提取的是回報(bào)的平均值(回報(bào)率)和回報(bào)的標(biāo)準(zhǔn)差(風(fēng)險(xiǎn))。

          plt.scatter(retscomp.mean(), retscomp.std())
          
plt.xlabel('Expected returns')

plt.ylabel('Risk')

for label, x, y in zip(retscomp.columns, retscomp.mean(), retscomp.std()):

plt.annotate(label,xy = (x, y), xytext = (20, -20), textcoords = 'offset points', ha = 'right', va = 'bottom',
bbox = dict(boxstyle = 'round,pad=0.5', fc = 'yellow', alpha = 0.5),
arrowprops = dict(arrowstyle = '->', connectionstyle = 'arc3,rad=0'))

image

股票風(fēng)險(xiǎn)與收益的快速散點(diǎn)圖

現(xiàn)在你可以看到這張關(guān)于競(jìng)爭(zhēng)股票的風(fēng)險(xiǎn)和收益比較的清晰的圖表。從邏輯上講,你想要將風(fēng)險(xiǎn)最小化,并使收益最大化。因此,您需要為您的風(fēng)險(xiǎn)回報(bào)容忍度畫一條線(紅線)。然后,你將創(chuàng)建規(guī)則——購(gòu)買紅線以下的股票(微軟、通用電氣和 IBM),賣出紅線以上的股票(蘋果和谷歌)。這條紅線顯示了您的期望值閾值和買進(jìn)/賣出決策的基線。

5 預(yù)測(cè)股票價(jià)格

5.1 特征工程

我們將使用這三個(gè)機(jī)器學(xué)習(xí)模型來預(yù)測(cè)股票:簡(jiǎn)單線性分析、二次判別分析(Quadratic Discriminant Analysis,QDA)和 K近鄰(K Nearest Neighbor,KNN)。但首先我們需要設(shè)計(jì)一些特征:高-低百分比和百分比變化。

          dfreg = df.loc[:,['Adj Close','Volume']]
          

dfreg['HL_PCT'] = (df['High'] — df['Low']) / df['Close'] * 100.0

dfreg['PCT_change'] = (df['Close'] — df['Open']) / df['Open'] * 100.0

image

生成的最終數(shù)據(jù)幀

5.2 預(yù)處理和交叉驗(yàn)證

在將數(shù)據(jù)放入預(yù)測(cè)模型之前,我們將按照以下步驟對(duì)數(shù)據(jù)進(jìn)行清洗和處理:

1.刪除缺失值

2.分離標(biāo)簽,我們要預(yù)測(cè) Adjclose

3.縮放 X ,使每個(gè)樣本都可以具有相同的線性回歸分布。

4.最后,我們要找到近期 X 和早期 X (用于訓(xùn)練)的數(shù)據(jù)序列,用于模型生成和評(píng)估。

5.分離標(biāo)簽并標(biāo)識(shí)為 Y。

6.分別通過交叉驗(yàn)證訓(xùn)練模型和測(cè)試

請(qǐng)參考以下的代碼。

          # Drop missing value
          
dfreg.fillna(value=-99999, inplace=True)

We want to separate 1 percent of the data to forecast

forecast_out = int(math.ceil(0.01 * len(dfreg)))

Separating the label here, we want to predict the AdjClose

forecast_col = 'Adj Close'
dfreg['label'] = dfreg[forecast_col].shift(-forecast_out)

X = np.array(dfreg.drop(['label'], 1))

Scale the X so that everyone can have the same distribution for linear regression

X = preprocessing.scale(X)

Finally We want to find Data Series of late X and early X (train) for model generation and evaluation

X_lately = X[-forecast_out:]
X = X[:-forecast_out]

Separate label and identify it as y

y = np.array(dfreg['label'])
y = y[:-forecast_out]

5.3 模型生成-預(yù)測(cè)過程有意思的地方開始了

首先,讓我們?yōu)槲覀兊?SciKit-Learn 庫(kù) 的導(dǎo)入添加以下代碼:

          from sklearn.linear_model import LinearRegression
          
from sklearn.neighbors import KNeighborsRegressor
from sklearn.linear_model import Ridge
from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import make_pipeline

5.4 簡(jiǎn)單線性分析和二次判別分析

簡(jiǎn)單線性分析給出兩個(gè)或多個(gè)變量之間的線性關(guān)系。當(dāng)我們?cè)趦蓚€(gè)變量中畫關(guān)系圖時(shí),我們會(huì)得到一條直線。二次判別分析類似于簡(jiǎn)單線性分析,只是模型允許多項(xiàng)式(例如: x 平方)的生成并會(huì)產(chǎn)生曲線。

線性回歸預(yù)測(cè)因變量(Y)為輸出而自變量(X)為輸入。在繪制過程中,我們會(huì)得到一條直線,如下圖所示:

image

簡(jiǎn)單線性回歸

以下是一篇相當(dāng)干貨的文章,它對(duì)線性回歸進(jìn)行了全面的回顧。

A beginner’s guide to Linear Regression in Python with Scikit-Learn https://towardsdatascience.com/a-beginners-guide-to-linear-regression-in-python-with-scikit-learn-83a8f7ae2b4f

我們將導(dǎo)入并使用現(xiàn)有的 SciKit 庫(kù),并通過選擇 X 和 Y 訓(xùn)練集來訓(xùn)練模型。代碼如下。

          # Linear regression
          
clfreg = LinearRegression(n_jobs=-1)
clfreg.fit(X_train, y_train)

Quadratic Regression 2

clfpoly2 = make_pipeline(PolynomialFeatures(2), Ridge())
clfpoly2.fit(X_train, y_train)

Quadratic Regression 3

clfpoly3 = make_pipeline(PolynomialFeatures(3), Ridge())
clfpoly3.fit(X_train, y_train)

5.5 K最近鄰(KNN)

KNN利用特征相似性來預(yù)測(cè)數(shù)據(jù)點(diǎn)的值。這保證了分配的新點(diǎn)與數(shù)據(jù)集中的點(diǎn)相似。為了找出相似點(diǎn),我們提取這些點(diǎn)間的最小距離(例如:歐氏距離)。

image

在 KNN 模型可視化中,你將會(huì)以 k 個(gè)數(shù)量的元素對(duì)問題元素進(jìn)行分組

有關(guān)模型的詳細(xì)資料,請(qǐng)參閱以下鏈接。這對(duì)加深你的理解非常有用。

Introduction to k-Nearest Neighbors: Simplified (with implementation in Python) https://www.analyticsvidhya.com/blog/2018/03/introduction-k-neighbours-algorithm-clustering/

          # KNN Regression
          
clfknn = KNeighborsRegressor(n_neighbors=2)
clfknn.fit(X_train, y_train)

5.6 評(píng)估

一種簡(jiǎn)單、快速、粗略的評(píng)估方法是在每個(gè)訓(xùn)練過的模型中使用 score 方法。score 可以得到測(cè)試數(shù)據(jù)集的 self.predict(X) 與 y 的平均精度。

          confidencereg = clfreg.score(X_test, y_test)
          
confidencepoly2 = clfpoly2.score(X_test,y_test)
confidencepoly3 = clfpoly3.score(X_test,y_test)
confidenceknn = clfknn.score(X_test, y_test)

results

('The linear regression confidence is ', 0.96399641826551985)

('The quadratic regression 2 confidence is ', 0.96492624557970319)

('The quadratic regression 3 confidence is ', 0.9652082834532858)

('The knn regression confidence is ', 0.92844658034790639)

結(jié)果顯示大多數(shù)模型的精確性評(píng)分(>0.95)。然而,這并不意味著我們可以盲目地持有這些股票。仍然有許多問題需要考慮,特別是對(duì)于不同的公司來說,隨著時(shí)間的推移,它們的價(jià)格走勢(shì)也會(huì)不同。

為了進(jìn)行全面的測(cè)試,讓我們輸出一些股票的預(yù)測(cè)。

          forecast_set = clf.predict(X_lately)
          

dfreg['Forecast'] = np.nan

result

(array([ 115.44941187, 115.20206522, 116.78688393, 116.70244946,

116.58503739, 115.98769407, 116.54315699, 117.40012338,

117.21473053, 116.57244657, 116.048717 , 116.26444966,

115.78374093, 116.50647805, 117.92064806, 118.75581186,

118.82688731, 119.51873699]), 0.96234891774075604, 18)

6 繪制預(yù)測(cè)圖

根據(jù)預(yù)測(cè)值,我們將用現(xiàn)有的歷史數(shù)據(jù)來可視化繪圖。這將有助于我們可視化模型如何預(yù)測(cè)未來股票價(jià)格。

          last_date = dfreg.iloc[-1].name
          

last_unix = last_date

next_unix = last_unix + datetime.timedelta(days=1)

for i in forecast_set:

next_date = next_unix
next_unix += datetime.timedelta(days=1)
dfreg.loc[next_date] = [np.nan for _ in range(len(dfreg.columns)-1)]+[i]

dfreg['Adj Close'].tail(500).plot()
dfreg['Forecast'].tail(500).plot()
plt.legend(loc=4)
plt.xlabel('Date')
plt.ylabel('Price')
plt.show()

image

圖形表示預(yù)測(cè)值

如圖所示,藍(lán)線顯示了基于回歸的股票價(jià)格預(yù)測(cè)。預(yù)測(cè)表明,經(jīng)濟(jì)衰退不會(huì)持續(xù)太久,然后就會(huì)復(fù)蘇。因此,我們可以在經(jīng)濟(jì)低迷時(shí)買進(jìn)股票,在經(jīng)濟(jì)好轉(zhuǎn)時(shí)賣出。

7 未來的改進(jìn)/挑戰(zhàn)

為了進(jìn)一步分析股票,這里有一些你可以實(shí)現(xiàn)的想法。這些想法將有助于對(duì)股票進(jìn)行更全面的分析。如果需要更多的說明,請(qǐng)隨時(shí)通知我。

  • 分析經(jīng)濟(jì)定性因素,如新聞(新聞來源和情感分析)

  • 分析經(jīng)濟(jì)定量因素,如某個(gè)國(guó)家的HPI、公司起源之間的經(jīng)濟(jì)不平等


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 男女国产视频 | 欧美亚洲另类在线 | 国产精品第一区 | 免费观看成人碰视频公开 | 黄视频在线观看网站 | 网红主播vip福利视频 | 国产浮力第一浮力 | 97在线观视频免费观看 | 久久久久亚洲 | 日韩精品一区二区在线观看 | 国产欧美一区二区视频 | 国产一区二区三区免费 | 久久五月婷 | 日韩中文字幕在线 | 欧美一区二区在线视频 | 日本亚洲精品色婷婷在线影院 | 久草中文在线 | 三级 在线播放 | 久久久网 | 欧美乱妇在线观看 | 极品美女一区二区三区视频 | 丝袜美腿一区 | 国产精品婷婷久久久久 | 久久成人国产 | 亚洲黄色免费网站 | 蜜臀国产 | 香蕉成人国产精品免费看网站 | 91久久精品一区二区二区 | 欧美国产日韩在线 | 日韩一区不卡 | 在线成人av观看 | 日本韩国一区二区三区 | 九九九九精品视频在线播放 | 羞羞答答www网站进入 | 偷拍自拍网站 | 精品无人乱码一区二区三区 | 欧美激情久久久久久久久 | 欧美激情视频网站 | 99亚洲| 免费午夜影片在线观看影院 | 成人5252色|