原創(chuàng)|使用教程|編輯:龔雪|2017-04-20 14:02:01.000|閱讀 479 次
概述: 本篇文章是"Python股市數(shù)據(jù)分析"兩部曲中的第一部分,主要介紹金融數(shù)據(jù)分析的背景以及移動均線等方面的內(nèi)容。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
文|Curtis Miller
本文內(nèi)容基于我在猶他州立大學(xué)MATH 3900 (Data Mining)課程上的一次講座。在這些文章中,我將介紹一些關(guān)于金融數(shù)據(jù)分析的基礎(chǔ)知識,例如,使用pandas獲取雅虎財經(jīng)上的數(shù)據(jù),股票數(shù)據(jù)可視化,移動均線,開發(fā)一種均線交叉策略,回溯檢驗以及基準(zhǔn)測試。第二篇文章會介紹一些實(shí)踐中可能出現(xiàn)的問題,而本篇文章著重討論移動平均線。
注意:本篇文章所涉及的看法、意見等一般性信息僅為作者個人觀點(diǎn)。本文的任何內(nèi)容都不應(yīng)被視為金融投資方面的建議。此外,在此提供的所有代碼均無法提供任何保證。選擇使用這些代碼的個人需自行承擔(dān)風(fēng)險。
高等數(shù)學(xué)與統(tǒng)計學(xué)已在金融領(lǐng)域應(yīng)用了一段時間。 在20世紀(jì)80年代以前,銀行業(yè)和金融界以"枯燥乏味"而聞名;投資銀行與商業(yè)銀行不同,銀行的主要職責(zé)在于處理"簡單的"(至少與今天相比)金融商品,如貸款。里根政府的放松管制,再加上一大批數(shù)學(xué)天才,將整個行業(yè)從"枯燥的"銀行業(yè)務(wù)轉(zhuǎn)變成了今天這個樣子,而且,從那時起,金融便融入了其他自然學(xué)科,激勵著數(shù)學(xué)領(lǐng)域的研究與發(fā)展。比如,近期數(shù)學(xué)領(lǐng)域最大的成就之一,便是公式的推導(dǎo),這一成果可用于股票期權(quán)(一種賦予持有人以特定價格向期權(quán)發(fā)行商購買或出售股票權(quán)利的合約)的定價。可以說,
近幾年來,為了在買賣金融資產(chǎn)的過程中賺取利潤,計算機(jī)科學(xué)也同高等數(shù)學(xué)一起,參與到了金融與貿(mào)易領(lǐng)域的變革當(dāng)中。最近幾年,計算機(jī)主導(dǎo)著貿(mào)易的進(jìn)行;算法相比人類能夠更快速地做出交易決策(如此之迅速,以至于)。此外,,而且以后也可能會繼續(xù)這樣下去。實(shí)際上,大部分的算法交易都屬于高頻交易(HFT)。盡管算法的表現(xiàn)可能超過人類,但是這項技術(shù)并不成熟,應(yīng)用的領(lǐng)域又充滿著高風(fēng)險與動蕩。高頻交易導(dǎo)致了年與年市場的閃電崩盤,其中,2013年的崩盤是由一條所引發(fā)的。
然而,本篇文章并不會討論如何使用糟糕的數(shù)學(xué)模型和交易算法使股市崩盤。相反,我打算向大家介紹一些用于處理和分析股市數(shù)據(jù)的Python工具。我還將討論移動均線、如何使用移動均線來構(gòu)建交易策略、如何在進(jìn)入倉位時制定退出策略以及如何使用回溯檢驗評估交易策略等方面的內(nèi)容。
聲明:這不是關(guān)于金融投資的建議?。?!而且,我從未從事過交易員等工作(許多這方面的知識我都是在鹽湖城社區(qū)學(xué)院中一門為期一學(xué)期的股市交易課程中接觸到的)!這些只是單純的入門級知識,并不足以讀者在股市中進(jìn)行實(shí)際的交易操作。股市有風(fēng)險,入市需謹(jǐn)慎!
在我們處理股票數(shù)據(jù)之前,我們首先需要通過一些可行的途徑獲取它們。股票數(shù)據(jù)可以從、或者其他數(shù)據(jù)源中獲得,而pandas可以輕松訪問雅虎財經(jīng)、谷歌財經(jīng)以及其他來源中的數(shù)據(jù)。在本篇文章中,我們從雅虎財經(jīng)獲取股票數(shù)據(jù)。
以下代碼演示了直接創(chuàng)建一個包含股票信息的DataFrame對象的過程。(你可以在了解更多關(guān)于遠(yuǎn)程數(shù)據(jù)訪問的信息。)
讓我們簡單介紹一下。開盤價是指股票在交易日開市時的股價(并不一定是前一交易日的收盤價格),最高價是指在交易日當(dāng)天股價的最高價格,最低價是指在交易日當(dāng)天股價的最低價格,收盤價是指股票在交易日收盤時的股價。交易量表示被交易股票的數(shù)量。調(diào)整收盤價是根據(jù)公司行為調(diào)整后的股票收盤價格。盡管我們認(rèn)為大多數(shù)股票的價格是由交易員設(shè)定的,但是股票分割(公司將當(dāng)前的一張股票拆分成價值一半的兩張股票)和派付股息(為每份股份支付公司紅利)仍然會影響到股票的價格,這些情況我們都應(yīng)該考慮進(jìn)來。
既然我們現(xiàn)在有了股票數(shù)據(jù),我們可以通過可視化的形式展示它。我首先演示如何使用matplotlib來可視化股票數(shù)據(jù)。注意,名為apple的DataFrame對象有一個很方便的方法plot(),這個函數(shù)使創(chuàng)建圖表更加容易。
折線圖是很不錯,但是每個日期都至少包含四個變量(開盤價、最高價、最低價、收盤價),我們希望有一些可視化的方法能夠同時展示這四個變量,而不是簡單地畫四條折線。金融數(shù)據(jù)通常以日本蠟燭圖(即K線圖)的形式繪制,這種圖表最早在18世紀(jì)由日本米市商人命名。matplotlib可以繪制這樣的圖表,但操作起來比較復(fù)雜。
我實(shí)現(xiàn)了一個函數(shù),你可以更容易地在pandas數(shù)據(jù)框架中創(chuàng)建蠟燭圖,并使用它繪制我們的股票數(shù)據(jù)。(代碼基于,你可以在找到相關(guān)函數(shù)的文檔)
在蠟燭圖中,黑色蠟燭表示交易日當(dāng)天收盤價高于開盤價(盈利),而紅色蠟燭表示交易日當(dāng)天開盤價高于收盤價(虧損)。燭芯表示最高價與最低價,蠟燭體則表示開盤價與收盤價(顏色用來區(qū)分哪一側(cè)為開盤價,哪一側(cè)為收盤價)。蠟燭圖在金融領(lǐng)域很受歡迎,根據(jù)圖表中蠟燭的形狀、顏色以及位置,中的一些策略可以使用它來制定交易策略。但在這里我不會介紹有關(guān)這類策略的內(nèi)容。
我們可能希望在同一張圖表中繪制多個金融商品的數(shù)據(jù);我們可能想要對比股票,將它們與市場進(jìn)行比較,或者看看其他證券,。之后,我們可能還想看看如何根據(jù)一些指標(biāo),如移動均線,來繪制金融商品。對于這種情況,你最好使用折線圖而不是蠟燭圖。(如何將多個蠟燭圖相互疊加在一起而不使圖表混亂?)
在下面的代碼中,我獲取了一些其他科技公司的股票數(shù)據(jù),并把它們的調(diào)整收盤價格繪制在了一起。
這張圖有什么問題?盡管絕對價格很重要(昂貴的股票很難購買,這不僅影響著這類股票的價格波動,也影響著你交易這類股票的能力),但是在交易過程中,相比絕對價格,我們更加關(guān)心資產(chǎn)的相對變化。谷歌的股票比蘋果和微軟的股票貴得多,這種差異使得蘋果和微軟股票的波動看起來比實(shí)際情況小得多。
一種解決方案是在繪制圖表時使用兩種不同的尺度;一種尺度用于蘋果和微軟的股票,另一種尺度用于谷歌股票。
然而,一個"更好的"解決方案是,僅在圖表中繪制我們真正想要的信息:股票的回報。這就需要我們根據(jù)需求將數(shù)據(jù)轉(zhuǎn)換成更有用的形式。這里有幾種我們可以應(yīng)用的轉(zhuǎn)換。 一種方式是考慮股票自利息周期開始以來的回報。換句話說,我們繪制:
正如我下面演示的這樣,這意味著轉(zhuǎn)換stocks對象中的數(shù)據(jù)。
這樣的圖表就更有用了?,F(xiàn)在,我們可以看到每只股票在周期開始以來的盈利。而且,我們還能發(fā)現(xiàn)這些股票密切相關(guān);它們通常朝同一個方向發(fā)展,在其他的圖表中很難發(fā)現(xiàn)這樣的事實(shí)。
除此之外,我們還可以繪制每只股票在每一個交易日的變化。比如,我們可以通過比較第t天與第t+1天的價格來繪制股票增長的百分比,公式如下:
但是這種變化也可以通過如下公式定義:
這些公式多少有些不同,可能會分析出不同的結(jié)論,但是還有另外一種對股票增長建模的方法:對數(shù)差值。
(這里的log為自然對數(shù),我們的定義并不關(guān)心使用的是第t天與第t-1天的對數(shù)差值還是第t+1天與第t天的對數(shù)差值。)使用對數(shù)差值的好處在于,這種差值可以理解為股價的百分比變化,且不依賴于計算過程中分?jǐn)?shù)的分母。 我們可以通過如下方式獲取并繪制stocks對象中數(shù)據(jù)的對數(shù)差值:
你傾向于哪一種轉(zhuǎn)換?關(guān)注股票以往的盈利情況會使得證券的整體趨勢更加明顯。但是,在對股票的行為模式建模時,更先進(jìn)的方法實(shí)際考慮的是交易日間股價的變化。因此,我們不應(yīng)該忽略這部分的信息。
圖表是很非常有用的。實(shí)際上,一些交易員做出的策略幾乎完全基于圖表(他們屬于"技術(shù)人員",因為基于在圖表中查找模式的交易策略是被稱為技術(shù)分析的貿(mào)易規(guī)則的一部分)?,F(xiàn)在,讓我們考慮如何才能找到股票的趨勢。 對于序列xt以及時刻t,q天均線表示過去q天股價的均值:也就是說,如果MAtq表示t時刻的q天均線,那么:
移動均線平滑了數(shù)據(jù)序列,并有助于識別股市的發(fā)展趨勢。q值越大,移動均線就越難反映序列xt中的短期波動。這里的想法是,移動均線過程能夠從"噪聲"中識別股市的發(fā)展趨勢。短期均線具有較小的q值,比較緊密地跟隨股票的趨勢發(fā)展,而長期均線的q值較大,進(jìn)而使得均線對股票波動的響應(yīng)較小,而且更加平穩(wěn)。
pandas提供了輕松計算移動均線的功能。下面的代碼展示了這部分功能,我首先為蘋果股票創(chuàng)建了一條20天(1個月)均線,隨后,將其與股票數(shù)據(jù)一同繪制在圖表中。
注意滾動均值是從什么時候開始的。只有在積累了20天的交易日數(shù)據(jù)之后,我們才能計算股票的20天均線。這個限制對于長期均線而言更加嚴(yán)重。如果我們想要計算股票的200天均線,我們需要多少蘋果公司的股票數(shù)據(jù)才行?在這里,我們將主要關(guān)注2016年的股票走勢。
你會注意到,移動均線要比實(shí)際的股票數(shù)據(jù)平滑得多。此外,這是一個難以處理的標(biāo)志;股票需要在移動均線的上方或下方,以便改變股票走勢的方向。因此,股票走勢越過移動均線的情況表明了股票一種可能的走向,應(yīng)該引起我們的注意。 交易員通常對多條移動均線感興趣,比如20天均線、50天均線以及200天均線。同時檢查多條移動均線也很容易。
其中,20天均線對局部變化最為敏感,而200天均線對局部變化最不敏感。在這里,200天均線表明股票整體呈熊市行情:股票隨著時間的推移趨勢向下。20天均線有時呈熊市行情,而在其他時候呈牛市行情,預(yù)期股票會出現(xiàn)積極的波動。你還可以看到,移動均線的交叉表示著股票趨勢的變化。我們將這些交叉看作交易信號或指示器,表示金融證券正在改變趨勢,我們可能從中獲取利潤。
文章的第二部分將介紹如何基于移動均線設(shè)計并測試一個交易策略。 文章為簡譯,更為詳細(xì)的內(nèi)容,請查看
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@fc6vip.cn