馳騁股市!手把手教你如何用Python和資料科學賺錢?

大資料文摘發表於2018-10-08

金融領域或許是資料科學應用場景中最充滿想象力的部分,畢竟它跟財富結合地無比緊密。

不管是否是經濟達人,資料科學都是一種幫你瞭解一支股票的高效方式。本文作者把資料科學和機器學習技術應用到金融領域中,向你展示如何通過資料分析的方式馳騁股市,搭建自己的金融模型!

讓我們先了解一些基本定義。

定義和假設

什麼是交易演算法?

Quantopian定義:

交易演算法是一種計算機程式,它定義了一套買賣資產的規則。大多數交易演算法基於研究歷史資料得出的數學或統計模型來做出決策。

我們使用什麼平臺?

我使用Anaconda, Jupyter Notebooks, 和 PyCharm實現Python建模,使用這些工具非常容易。但是,你也可以使用Quantopian平臺內建核心工具,或者甚至可以根據需要將程式碼修改為R或者其他語言。

我使用Mac系統,並將全程分享所用的UNIX命令。Windows使用者請自行搜尋答案!

我們關注哪些資產?

Apple蘋果(AAPL)是一支很好的股票,因為目前為止(2018年9月)它已經是世界上價值最高的公司,不僅擁有相對穩定的股票價格,而且擁有足夠多與品牌相關的體量、新聞和人氣。

需要提醒:此處涵蓋的原則對於較小的公司股本,或不同的行業等的適用性有所不同。

環境搭建

要在本地電腦上獲取Quantopian平臺,請在終端執行以下命令:

# create conda py35 since that's the newest version that works conda create -n py35 python=3.5 conda install -c quantopian/label/ci -c quantopian zipline

為了確保Quandl正常執行,請根據賬號建立說明和API文件載入金融資料。另外,請儲存好你的API key,因為需要用到它來載入所有重要資料。

載入資料

讓我們開始使用程式碼庫:

import pandas as pd import numpy as np import patsy pd.core.common.is_list_like = pd.api.types.is_list_like from pandas_datareader import data import quandl quandl.ApiConfig.api_key = "##############"

現在讓我們來拉取些Apple股票資料:

df = quandl.get("WIKI/" + 'AAPL', start_date="2014-01-01")

注意觀察這些列,注意其中一個名為“分割比例”的列。這是一個非常重要的指標;它標誌著股票拆分發生。在2014年,Apple決定採用7:1進行股票分割,我們可以使用Python 和pandas 來查詢發生的日期:

len(df) df['Split Ratio'].value_counts() df[df['Split Ratio'] == 7.0]

我們從而找到了2014-06-09。讓我們拉取這個日期後的股票價格資訊:

aapl_split = quandl.get("WIKI/" + 'AAPL', start_date="2014-06-10") aapl_split.head()

順便說一句,我在GitHub上找到了所有財富500強的股票程式碼清單。如果你想將自己的分析擴充套件到股票集,可以像這樣將它們載入到列表中:

f500 = pd.read_csv('https://raw.githubusercontent.com/datasets/s-and-p-500-companies/master/data/constituents.csv') tickers = f500.Symbol.tolist()

關鍵統計資料

增廣迪基-福勒檢驗(Augmented Dickey-Fuller test),簡稱ADF檢驗

我們需要檢驗單位根是否存在,可以使用ADF測試完成檢驗。簡而言之,單位根存在則預示存在驅動AAPL的潛在趨勢,從而我們可以提取模式並用於預測。

# run ADF to determine unit root import statsmodels.tsa.stattools as ts cadf = ts.adfuller(aapl_split.Close) print('Augmented Dickey Fuller:') print('Test Statistic =',cadf[0]) print('p-value =',cadf[1]) print('Critical Values =',cadf[4]) Augmented Dickey Fuller: Test Statistic = -0.731194982176 p-value = 0.838503045276 Critical Values = {‘1%’: -3.4372231474483499, ‘5%’: -2.8645743628401763, ‘10%’: -2.5683856650361054}

我們將上面的測試統計值與臨界值進行比較;如果它低於我們選擇的閾值,則拒絕存在單位根的零假設。正如你所見,p-value比較大,所以我們必須接受原假設(Ho):即AAPL存在單位根。這個結果很好,因為我們可以利用潛在的趨勢和模式進行預測。

與其他股票的相關性

Apple被認為是一個巨頭技術品牌。假如我們能夠計算與其他股票的強相關性會怎麼樣?

請注意相關性並不意味著因果關係,並且可能存在著哪個股票是先行者的問題,但是模式和關係對於提高模型效能總是一件好事。

我建議你檢視三支股票,以及AAPL如何與它們關聯:

  • 微軟Microsoft (MSFT)

  • 因特爾Intel (INTC)

  • 蒂芙尼Tiffany & Co. (TIF)

import matplotlib.pyplot as plt import seaborn as sns %matplotlib inline MSFT = quandl.get("WIKI/" + 'MSFT', start_date="2014-06-10") INTC = quandl.get("WIKI/" + 'INTC', start_date="2014-06-10") TIF = quandl.get("WIKI/" + 'TIF', start_date="2014-06-10")

時間緣故,我們在這裡只關注Intel資料;讓我們繪製AAPL與INTC的收盤價:

sns.jointplot(INTC.Close, aapl_split.Close, kind="reg");

馳騁股市!手把手教你如何用Python和資料科學賺錢?

Intel vs. Apple

我們還可以看看相關值資料( correlation value ):

np.corrcoef(INTC.Close, aapl_split.Close)

我們注意到r-value為0.7434;就預測來說不錯,但我們需要記住一個重要的事實:如果我們知道INTC的收盤價,我們也可以看查AAPL的收盤價。所以讓我們檢視下INTC七天前的收盤價的相關性,來獲得更可行的指標:

# seven day lead np.corrcoef(INTC.Close[:-7], aapl_split.Close[7:])

這次我們得到r-value為0.7332;還是很不錯的!

谷歌趨勢(Google Trends)

我們可以比較Twitter和其他社交網路人氣資料如何影響股價。現在讓我們看看Google Trends是否與AAPL相關。請確保為指定時間範圍,或使用此連結(https://trends.google.com/trends/explore?date=2014-06-10%202018-04-02&q=%2Fm%2F0k8z)來進行準確搜尋(注意我在四月多新增了幾天來處理半周問題),然後將CSV載入到Python中:

# Google Trends aapl_trends = pd.read_csv('/Users/jb/Desktop/multiTimeline.csv', header=1) aapl_trends.tail()

注意每週的資料格式,因此我們需要使用 pandas.resample() 轉換我們的股票價格資料集:

API連結:

http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.resample.html

aapl_split_week = aapl_split.resample('W', convention='end').last()

現在讓我們檢查相關性並繪製給定周的Google搜尋請求資料總和圖表,以及該周最後一個工作日的收盤價格:

# trend and price corr np.corrcoef(aapl_trends['Apple: (Worldwide)'], aapl_split_week.Close)

哎呀!我們得到了一個微不足道的0.0454,這個資料有些道理,我們可以想一下:AAPL相關的新聞/活動/閒談並不是影響股票價格的積極因素。像人氣這種對其有重要影響應該能提供更強的訊號,但我們在下次再做討論。

結語

我們只是淺顯的討論了下部分EDA( Exploratory Data Analysis)可以做的金融分析,但是在下一篇文章中,我們將過渡到建立預測模型並通過高階軟體包來為我們實現繁重的工作。

我們希望這篇文章對你有幫助,並且很樂意在評論中聽到你的意見:

執行程式碼是否遇到任何問題?有時候環境和版本會搞砸一切……

  • 你使用什麼包和技術?

  • 那些視覺化工具有助於瞭解股票價格的變動?

  • 你認為哪些因素會最大化模型預測效果?

最後,如果你恰好知道一種持續賺大錢的建模技術,請直接告訴我們 ! 如果你們喜歡這個系列,請持續關注大資料文摘的後續文章。

最後的最後,本文提供的資訊和隨附材料僅供參考。本文不應被當做法律或財務建議。你應諮詢律師或其他專業人士來確定什麼最適合你的個人需求。

祝大家賺錢開心!

相關報導:

https://towardsdatascience.com/on-making-money-with-python-and-data-science-1-setup-and-statistics-1d69f1a68661?from=singlemessage&isappinstalled=0

相關文章