原創(chuàng)|使用教程|編輯:龔雪|2017-04-21 14:30:30.000|閱讀 290 次
概述:在本文中,我將介紹一些關(guān)于金融數(shù)據(jù)分析的基礎(chǔ)知識,例如,使用pandas獲取雅虎財經(jīng)上的數(shù)據(jù),股票數(shù)據(jù)可視化,移動均線,開發(fā)一種均線交叉策略,回溯檢驗以及基準測試。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
文|Curtis Miller
本篇文章是"Python股市數(shù)據(jù)分析"兩部曲中的第二部分,內(nèi)容基于我在猶他州立大學(xué)課程上的一次講座,在本文中,我將介紹一些關(guān)于金融數(shù)據(jù)分析的基礎(chǔ)知識,例如,使用pandas獲取雅虎財經(jīng)上的數(shù)據(jù),股票數(shù)據(jù)可視化,移動均線,開發(fā)一種均線交叉策略,回溯檢驗以及基準測試。而本篇文章中,我討論的話題包括均線交叉策略的設(shè)計、回溯檢驗、基準測試以及實踐中可能出現(xiàn)的若干問題,以供讀者思考。
注意:本篇文章所涉及的看法、意見等一般性信息僅為作者個人觀點。本文的任何內(nèi)容都不應(yīng)被視為金融投資方面的建議。此外,在此給出的所有代碼均無法提供任何保證。選擇使用這些代碼的個人需自行承擔風險。
我們把在未來條件滿足時將被終止的交易稱為未平倉交易。多頭倉位是指在交易過程中通過金融商品增值來獲取利潤,而空頭倉位是指在交易過程中通過金融資產(chǎn)價值下跌來獲取利潤。在直接交易股票時,所有的多頭倉位看漲,所有的空頭倉位看跌。這也就是說,持看漲態(tài)度并不需要伴隨著一個多頭倉位,而持看跌態(tài)度同樣也不需要伴隨著一個空頭倉位(在交易股票期權(quán)時,更是如此)。
這里有一個例子。打算你買入了一只股票,計劃在股價上漲時以更高的價格將股票拋出。這就是多頭倉位:你持有一種金融資產(chǎn),如果資產(chǎn)價值增長,你將從中獲利。你的潛在利潤是無限的,而你的潛在損失受到股價的限制,因為股價永遠不會低于0。另一方面,如果你預(yù)計一只股票的價格會下跌,你可以向經(jīng)紀公司籌借股票并出售,以期在后續(xù)以較低的價格回購股票,從而獲取利潤。這種做法稱為做空股票,屬于空頭倉位,即通過股價下跌賺取收益。做空股票的潛在利潤受到股價的限制(最好的做法是,使股票變得一文不值,這樣你可以免費回購這些股票),而損失卻是無限的,因為你可能需要花費任意多的錢來買回籌借的股票。因此,在允許投資者做空股票前,經(jīng)紀人需要確保投資者保持良好的財務(wù)狀況。
任何交易員都必須有一套規(guī)則,決定她愿意在任何一筆交易上投入多少錢。例如,一名交易員可能認為在任何情況下,她在一筆交易中承受的風險都不能超過所有投資的10%。另外,在任何交易中,交易員必須制定一個由一組條件構(gòu)成的退出策略,決定她何時退出倉位,從而獲利或止損。交易員可以設(shè)置一個目標,即促使她清空倉位的最少利潤。同樣地,交易員也要明確自身能夠承受的最大損失;如果潛在損失超過了這個金額,交易員將退出倉位,以避免任何進一步的損失(通常通過設(shè)置止損指令來實現(xiàn),觸發(fā)該指令以避免進一步損失)。
如果一個方案包括促成交易的交易信號、一套能在任何特定策略情況下明確承受多少投資風險的規(guī)則、以及一個適用于任何交易的退出策略,那么我們稱這個方案為一個完整的交易策略。目前,我們關(guān)注的是如何設(shè)計和評價交易策略。
我們假設(shè)任何一筆交易的金額都是投資總資產(chǎn)的一個固定比例;10%看起來是一個不錯的數(shù)字。我們決定,對于任何一筆交易,如果損失超過交易金額的20%,我們將結(jié)束交易。現(xiàn)在,我們需要一種方法來判斷何時進入倉位以及何時退出倉位,進而獲取利潤。
在這里,我將介紹一種。我們將使用兩條移動均線:一條表示長期均線,另一條表示短期均線。采用的策略如下:
當短期均線高于長期均線時,我們應(yīng)進行多頭交易,當短期均線再次越過(低于)長期均線時,結(jié)束此類交易。當短期均線低于長期均線時,我們應(yīng)進行空頭交易,當短期均線再次越過(高于)長期均線時,結(jié)束此類交易。
現(xiàn)在,我們有了一個完整的策略。但在我們決定使用它之前,我們首先應(yīng)該盡可能地評估這個策略的效果。回溯檢驗是一種常用的方法,該方法基于歷史數(shù)據(jù)對交易策略所能帶來的利潤多少進行評估。例如,看看上方圖表中Apple股票的表現(xiàn),如果20天均線表示短期均線,50天均線表示長期均線,這個交易策略似乎并不能產(chǎn)生多少利潤,至少不如你一直持有多頭倉位更有利可圖。 讓我們看看我們是否可以自動進行回溯檢驗任務(wù)。我們首先確定20天均線什么時候低于50天均線,以及相反的情況。
我們把這種差異的標志稱為行情。也就是說,如果短期均線高于長期均線,那么這是一個牛市行情(牛市規(guī)則),如果短期均線低于長期均線,則目前為熊市行情(熊市規(guī)則)。我使用以下代碼判斷當前的股市行情。
上面的最后一行表明,Apple股票在股市中的行情,有1005天為熊市,有600天為牛市,而有54天股市行情較為平穩(wěn)。
行情變化時會出現(xiàn)交易信號。當牛市開始時,買入信號會被觸發(fā),而當牛市結(jié)束時,拋出信號會被觸發(fā)。同樣地,當熊市開始時,拋出信號會被觸發(fā),而當熊市結(jié)束時,買入信號會被觸發(fā)(只有當你要做空股票,或使用一些股票期權(quán)等衍生品做空市場時,才會對這些感興趣)。
我們很容易就可以獲取交易信號。令rt表示t時刻的股市行情,st表示t時刻的交易信號,則有:
st = sing(rt - rt-1)
st ∈ {-1, 0, 1},其中-1表示"拋出",1表示"買入",0表示不采取任何措施,我們可以這樣獲取信號:
我們會買入Apple股票23次,并拋出Apple股票23次。如果我們僅持有多頭倉位,在6年期間只會進行23筆交易,然而,如果我們在每次多頭倉位終止后,由多頭倉位轉(zhuǎn)為空頭倉位,我們一共會進行23筆交易。(請記住,更加頻繁的交易并不一定就是好的,交易從來不是免費的。)
你可能會注意到,目前的系統(tǒng)并不是很健全,即使是一個短期均線超過長期均線的短暫瞬間,交易也會被觸發(fā),并導(dǎo)致交易立即結(jié)束(這樣并不好,不僅僅是因為每一筆實際交易都伴隨著一筆費用,已獲得的收益會因此被迅速稀釋)。此外,每個牛市行情都會立即轉(zhuǎn)換到熊市行情,如果你在構(gòu)建一個允許看漲押注和看跌押注的交易系統(tǒng),這會導(dǎo)致在一筆交易結(jié)束時,立即觸發(fā)另一筆在股市中反向押注的交易,這看起來又有些挑剔了。一個更好的系統(tǒng)應(yīng)該根據(jù)更多的證據(jù)來判斷股市正朝著發(fā)展的特定方向,但我們現(xiàn)在不會關(guān)心這些細節(jié)。
現(xiàn)在,讓我們嘗試著確定每次買入和拋出股票時的價格。
從上面我們可以看到,在2013年5月17日,Apple股票的價格大幅下跌,我們的交易系統(tǒng)似乎不能很好地處理這種狀況。但是,這次股價下跌并不是因為Apple公司受到了巨大的沖擊,而是由于股票拆分。盡管派付股息不如股票拆分那樣明顯,但是這些因素仍可能影響到我們交易系統(tǒng)的效果。
我們不希望我們的交易系統(tǒng)因為股票拆分和派付股息而表現(xiàn)得很糟糕。我們應(yīng)該如何處理這種情況?一種方法是獲取股票拆分和派付股息的歷史數(shù)據(jù),并設(shè)計一個處理這類數(shù)據(jù)的交易系統(tǒng)。這或許是最好的解決方案,能夠最為真實地反映股票的行為,但是它過于復(fù)雜。另一種解決方案是根據(jù)股票拆分和派付股息的情況調(diào)整股票價格。
雅虎財經(jīng)只提供調(diào)整后的股票收盤價,但是對于我們來說,要得到調(diào)整后的開盤價、最高價、最低價,這樣就足夠了。已調(diào)整收盤價計算方式如下:
pricetadj = mt x pricet
其中,mt是用來調(diào)整股價的系數(shù)。只需進行一次除法就可以求出mt的值,因此,我們可以使用收盤價和已調(diào)整收盤價來調(diào)整股票的其他所有價格。
讓我們回到前面,調(diào)整Apple的股價,并用這些調(diào)整后的數(shù)據(jù)重新評估我們的交易系統(tǒng)。
你可以看到,根據(jù)股票拆分和派付股息情況調(diào)整后的股票價格有明顯的不同。從現(xiàn)在開始,我們將使用這些數(shù)據(jù)。 現(xiàn)在,讓我們創(chuàng)建一個價值100萬美元的虛擬投資項目,根據(jù)我們建立的規(guī)則,看看它會如何表現(xiàn)。規(guī)則包括:
在模擬的過程中,牢記以下幾點:
回溯檢驗按如下方式進行:
我們的投資項目總值在六年間增長了10%。考慮到任何一筆交易僅涉及所有投資總額的10%,這樣的表現(xiàn)并不差。
請注意,這個交易策略并不會觸發(fā)我們的止損指令。難道這意味著我們不需要止損指令嗎?要回答這個問題并不簡單。畢竟,如果我們選擇了另一個不同的股價來判斷是否拋出股票,止損指令可能真的會被觸發(fā)。
止損指令會被自動觸發(fā),且不會詢問指令被觸發(fā)的原因。這意味著股價的真實變化與短暫波動都有可能觸發(fā)止損指令,而后者我們更為關(guān)心,因為你不僅要為訂單支付費用,而且還無法保證以指定的價格拋出股票,這可能會使你的損失更大。與此同時,你交易股票的走勢仍在繼續(xù),如果止損指令不被觸發(fā),你甚至可以從中獲利。也就是說,止損指令能夠幫助你保持自己的情緒,繼續(xù)持有股票,即使它已經(jīng)失去了自己的價值。如果你無法監(jiān)控或快速訪問自己的投資項目,例如在度假,它們也能發(fā)揮作用。
我曾介紹過一些關(guān)于和止損指令的觀點,但從現(xiàn)在起,我不會要求我們的回溯檢驗系統(tǒng)考慮止損指令。雖然不太現(xiàn)實(我確實相信在工業(yè)中實際應(yīng)用的系統(tǒng)能夠考慮止損規(guī)則),但這簡化了回溯檢驗任務(wù)。
更為真實的投資項目不會將投資總額的10%押注在一只股票上。更現(xiàn)實的做法是考慮在多只股票上分散投資。涉及多家公司的多筆交易可能會在任何時刻進行,并且大多數(shù)投資項目會選擇股票交易,而不是現(xiàn)金。既然我們將在多只股票上投資,只有當移動均線交叉(不是因為止損)時才退出倉位,那么我們需要改變進行回溯檢驗的方式。例如,我們將使用pandas中的DataFrame來記錄所有考察股票的買入、拋出訂單,前面的循環(huán)代碼也需要記錄更多的信息。
我實現(xiàn)了為多只股票創(chuàng)建訂單數(shù)據(jù)的代碼,以及一個執(zhí)行回溯檢驗的函數(shù)。
這個虛擬的投資項目投資了十二只(科技)股票,最終的資產(chǎn)增長達到了100%左右。這很好嗎?雖然表面上看起來不錯,但我們會看到我們可以做得更好。
回溯檢驗只是評估交易策略有效性過程的一部分。我們會對策略進行基準測試,或者與其他的可行(通常是眾所周知的)策略進行比較,以確定我們所能達到的效果。
當你評估一個交易系統(tǒng)時,有一個策略你一定要與它比較,除了少數(shù)互惠基金與投資管理人,這個策略的效果是最好的:買入并持有。有效市場假說聲稱,任何人都無法擊敗市場。因此,投資者應(yīng)該一直購買反映市場結(jié)構(gòu)的指數(shù)基金。SPY指數(shù)基金是一種交易所買賣基金(一種在市場上交易的類似股票的互惠基金),其價值實際上地代表著標準普爾500指數(shù)中股票的價值。通過買入并持有SPY指數(shù)基金,我們實際上可以嘗試將回報與市場匹配,而不是試著去擊敗市場。
我通過以下方式獲取關(guān)于SPY的數(shù)據(jù),并根據(jù)收益簡單地買入和持有SPY指數(shù)基金。
買入和持有SPY指數(shù)基金的效果優(yōu)于我們的交易系統(tǒng),至少優(yōu)于我們現(xiàn)在初期的系統(tǒng),而且,我們甚至沒有說明,考慮到費用我們這個更加復(fù)雜的策略有多么的昂貴。考慮到機會成本和與主動投資策略相關(guān)的費用,我們不應(yīng)該采用這樣的策略。
我們怎樣才能提高我們系統(tǒng)的效果呢?對于初學(xué)者而言,我們可以嘗試投資多樣化。我們之前考慮的所有股票都屬于科技公司,這意味著如果科技行業(yè)表現(xiàn)不佳,我們的投資項目也會反映出這種低迷的狀況。我們可以開發(fā)一個能夠做空股票或看跌押注的系統(tǒng),這樣,我們就可以利用市場上各個行業(yè)領(lǐng)域的走向。我們還可以尋找一種能夠預(yù)測股價變化的方法。但是,無論我們做什么,都必須擊敗這個基準;否則,我們的交易系統(tǒng)中始終會存在著機會成本。
也存在著其他的基準測試策略,如果我們的交易系統(tǒng)擊敗了"買入和持有SPY基金"這個策略,那么我們可以與這些策略進行比較。這類的交易策略包括:
當每月收盤價高于十月均線時,買入SPY基金。
當十月均線的動量為正時,買入SPY基金。(動量是移動平均過程中的第一個差值,即MOtq = MAtq - MAt-1q。) (我最早在知道了這些策略。)普遍的經(jīng)驗仍然成立:對于一個包含大量活躍交易的復(fù)雜交易系統(tǒng),如果一個涉及指數(shù)基金且不進行頻繁交易的簡單策略擊敗了它,那么不要使用這個復(fù)雜系統(tǒng)。
最后一點,假設(shè)你的交易系統(tǒng)確實在回溯檢驗中擊敗了所有的基準策略。回溯檢驗就能夠預(yù)測系統(tǒng)在未來的表現(xiàn)了嗎?不太可能。,所以,僅僅是回溯檢驗預(yù)測的上漲并不意味著在未來會保持上漲的勢頭。
雖然這篇教程以一個令人沮喪的觀點收尾,但是請記住,有效市場假說有很多的反對者。我自己的看法是,隨著交易變得越來越算法化,擊敗市場也將變得更加困難。也就是說,擊敗市場仍然是有可能的,盡管互惠基金似乎還做不到(但是請記住,互惠基金表現(xiàn)得如此糟糕的部分原因,是因為交易所伴隨的費用)。
另一個資源(也是我準備這篇教程時參考的文獻)是O'Reilly出版的圖書《Python金融分析》,也可在猶他州立大學(xué)圖書館中找到。
文章原標題《An Introduction to Stock Market Data Analysis with Python (Part 2)》, 文章為簡譯,更為詳細的內(nèi)容,請查看(代碼可以復(fù)制)
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@fc6vip.cn