摘 要:隨著2020年3月1日新《中華人民共和國證券法》的正式落地及其證券發(fā)行注冊(cè)制的全面實(shí)行,中國資本市場的開放度將會(huì)空前提高,股票市場無疑會(huì)注入一批新活力。面對(duì)這種大趨勢(shì),采用傳統(tǒng)的人工選股帶來的低效率、高成本、高風(fēng)險(xiǎn)的弊端可能會(huì)被逐漸放大,造成資源的浪費(fèi)。通過借鑒在西方國家發(fā)展起來的業(yè)績穩(wěn)定、投資理性的量化投資技術(shù)及擁有廣泛的第三方科學(xué)計(jì)算庫的Python編程工具,對(duì)著名的威廉·歐奈爾先生創(chuàng)作的《How to make money in stocks》一書中所記載的技術(shù)分析方面“杯底”價(jià)格走勢(shì)圖進(jìn)行量化,并結(jié)合RPS(股價(jià)相對(duì)強(qiáng)度)和交易量的綜合判斷進(jìn)行智能篩選,可以提升選股效率和可靠性。
關(guān)鍵詞:量化投資;Python;歐奈爾
隨著我國經(jīng)濟(jì)的快速發(fā)展、金融制度的不斷完善,我國的股票市場也處在蓬勃發(fā)展的歷史進(jìn)程中。2020年3月1日,《中華人民共和國證券法》的修訂預(yù)示了我國股票市場在接下來數(shù)年內(nèi)將帶來巨大的變革,首當(dāng)其沖的是企業(yè)入市門檻的大幅度降低,會(huì)帶來我國股票市場股票數(shù)量的大幅度增加。而在愈來愈錯(cuò)綜復(fù)雜的股票市場中,我國證券投資機(jī)構(gòu)及部門也將會(huì)面臨嚴(yán)峻的考驗(yàn)。量化投資是指利用計(jì)算機(jī)程序通過數(shù)學(xué)、統(tǒng)計(jì)學(xué)知識(shí)進(jìn)行自動(dòng)發(fā)送買賣指令的一種交易方式,源于美國,在海外已經(jīng)發(fā)展了有30余年,其優(yōu)點(diǎn)在于業(yè)績穩(wěn)定及風(fēng)險(xiǎn)較小,且反應(yīng)速度遠(yuǎn)比傳統(tǒng)盯盤速度要快很多。近幾年隨著我國大數(shù)據(jù)、機(jī)器學(xué)習(xí)的發(fā)展,量化投資的也漸漸在我國國內(nèi)展露苗頭。
隨著資本市場的快速發(fā)展,愈來愈多投資者嘗試通過股票歷史數(shù)據(jù)來預(yù)測股票的漲跌,可以看到我國對(duì)量化投資方向的研究也是比較豐富的。曾武序等人通過爬取股票數(shù)據(jù),然后對(duì)數(shù)據(jù)進(jìn)行解析,對(duì)數(shù)據(jù)歸一化處理,最后利用BP神經(jīng)網(wǎng)絡(luò)對(duì)股票進(jìn)行預(yù)測。此方法具有重要現(xiàn)實(shí)意義和經(jīng)濟(jì)價(jià)值,但必須進(jìn)行定性預(yù)測且預(yù)測精確度也尚待提升。
陳文穎利用大數(shù)據(jù)分布式計(jì)算平臺(tái)Hadoop中的聚類分析對(duì)股票進(jìn)行分類預(yù)測,被聚在一類中的股票走勢(shì)有很大的相似性。但此方法還需要在聚類的基礎(chǔ)上,對(duì)同一類的股票信息進(jìn)行進(jìn)一步的分析從而提高實(shí)用性。黃敏健等人在sklearn框架下分析清洗股票歷史數(shù)據(jù),后通過機(jī)器訓(xùn)練來預(yù)測股價(jià)。機(jī)器學(xué)習(xí)算法可以通過一定范圍的指標(biāo)評(píng)估從而輔助交易策略。然而在實(shí)際環(huán)境中,模型預(yù)測的準(zhǔn)確率具有數(shù)據(jù)依賴性,無法適用于所有場景。
郝知遠(yuǎn)在MATLAB上用數(shù)據(jù)挖掘方法進(jìn)行股票預(yù)測,投資者可以利用這個(gè)過預(yù)測系統(tǒng)獲得股票上漲概率和選股方面的建議。但是由于計(jì)算機(jī)性能的制約和獲取股票數(shù)據(jù)渠道的限制,此原理還是具有一定的局限。
本文基于Python編程工具,以威廉·歐奈爾先生的投資理念為實(shí)踐對(duì)象,對(duì)歐奈爾先生的著作《How to make money in stocks》中提到的著名價(jià)格走勢(shì)圖進(jìn)行量化并應(yīng)用于Python編程工具,從而對(duì)具有漲幅潛力的股票進(jìn)行篩選。
一、歐奈爾選股模型概述
二級(jí)市場的研究方法一般來說有基本面分析和技術(shù)面分析,基本面分析是對(duì)公司的基本信息及財(cái)務(wù)數(shù)據(jù)等的分析,技術(shù)面分析是分析股市數(shù)據(jù)信息,判斷買賣時(shí)機(jī)。威廉·歐奈爾先生在著作《How to make money in stocks》中對(duì)基本面分析與技術(shù)面分析進(jìn)行了巧妙結(jié)合,其中技術(shù)面分析中歐奈爾通過對(duì)美國歷史上的股票進(jìn)行歸納統(tǒng)計(jì)得出幾種價(jià)格走勢(shì)圖。本文對(duì)此著作中的最著名的價(jià)格走勢(shì)圖——“杯柄”價(jià)格走勢(shì)圖進(jìn)行研究。
(一)歐奈爾“杯柄”價(jià)格走勢(shì)圖
歐奈爾先生選股一般先是進(jìn)行基本面的分析,基本面包括公司基本業(yè)務(wù)、基本發(fā)展方向、基本財(cái)務(wù)狀況數(shù)據(jù)等等,對(duì)這些多方面的統(tǒng)計(jì)數(shù)據(jù)展開綜合性的統(tǒng)計(jì)分析。基本面分析囊括了很多的文字性、抽象性、前瞻性分析,在這一方面的分析上現(xiàn)在的計(jì)算機(jī)分析水平還沒有達(dá)到聘美專業(yè)人士通過大量經(jīng)驗(yàn)進(jìn)行的分析水平,因此本文不打算對(duì)基本面分析展開深入探討。但是歐奈爾另一方面也很重視技術(shù)面分析即股票買入時(shí)機(jī)的選擇,這一方面的分析其實(shí)在西方國家?guī)资甑牧炕顿Y經(jīng)驗(yàn)來看已經(jīng)遠(yuǎn)超人們的手動(dòng)擇時(shí),在我國日益壯大的資本市場引導(dǎo)下,有必要借鑒西方市場的經(jīng)驗(yàn),合理選擇程序量化方案并自動(dòng)擇時(shí)。
歐奈爾先生對(duì)美國股票市場中絕大部分的上漲股票進(jìn)行了統(tǒng)計(jì)歸納,總結(jié)出幾種價(jià)格走勢(shì)圖。股票一直有一種歷史相似性,其供求關(guān)系往往也會(huì)呈現(xiàn)出驚人的一致性,因此借助于價(jià)格走勢(shì)圖的技術(shù)面分析也不枉為一種可靠的分析方法。歐奈爾選股走勢(shì)圖中屬“杯柄”走勢(shì)圖最為著名,如下圖所示。
(二)“杯柄”價(jià)格走勢(shì)圖的運(yùn)作機(jī)制及其量化
首先將U型杯底的時(shí)間跨度即橫向跨度設(shè)定為20天或60天,茶杯形態(tài)的深度設(shè)定為33%以內(nèi),歐奈爾先生在著作中設(shè)定形態(tài)深度是為了防止反彈幅度過大導(dǎo)致突破杯柄的概率提升,提升模型的穩(wěn)定性。根據(jù)以上描述,可以設(shè)定四個(gè)數(shù)值,以時(shí)間跨度為20天為例,分別為倒數(shù)第20天價(jià)格d0、倒數(shù)第2天到倒數(shù)第19天之間的最高價(jià)d1、倒數(shù)第1天價(jià)格d2、倒數(shù)第2天到倒數(shù)第19天之間的最低價(jià)d3。設(shè)定完畢后,篩選d1 (三)價(jià)格走勢(shì)圖選股策略的可行性條件 我國A股市場新股上市之時(shí)往往會(huì)出現(xiàn)一字漲停然后下跌調(diào)整進(jìn)而再輕微反彈的初期趨勢(shì),這一走勢(shì)和“杯柄”價(jià)格走勢(shì)圖的走勢(shì)有一定的相似性,但并沒有后期繼續(xù)走漲的保證。因此為了保證選股策略的可行性及資金的安全性,應(yīng)當(dāng)剔除新股和次新股,采用業(yè)績穩(wěn)定、上市時(shí)間較長的股票來進(jìn)行分析選股。 二、基于Python的實(shí)現(xiàn)流程及選取的第三方庫 (一)股票數(shù)據(jù)來源和第三方庫及交互平臺(tái)的選擇 1.數(shù)據(jù)來源——Tushare財(cái)經(jīng)數(shù)據(jù)接口包 做任何分析之前的第一步一直是數(shù)據(jù)的收集與清洗,本文所使用到的股票數(shù)據(jù)來源于國內(nèi)免費(fèi)開放的Tushare財(cái)經(jīng)數(shù)據(jù)接口。Tushare數(shù)據(jù)覆蓋面甚廣,涵蓋了公司股票、期貨期權(quán)、指數(shù)、數(shù)字貨幣等一系列金融相關(guān)數(shù)據(jù),能夠?qū)崿F(xiàn)對(duì)金融數(shù)據(jù)進(jìn)行采集、清洗、加工及儲(chǔ)存的功能。Tushare pro的數(shù)據(jù)可供校園用戶免費(fèi)使用,因此本文將應(yīng)用Tushare pro數(shù)據(jù)接口來進(jìn)行數(shù)據(jù)的采集儲(chǔ)存工作。 2.數(shù)據(jù)科學(xué)及可視化——Numpy、Pandas及Matplotlib庫 Numpy是Python語言的一個(gè)拓展程序庫,常見于大量的數(shù)組與矩陣運(yùn)算。Pandas是Python語言的一個(gè)數(shù)據(jù)分析包,是基于Numpy研發(fā)的一個(gè)強(qiáng)大的研究結(jié)構(gòu)化數(shù)據(jù)的工具集,常見于數(shù)據(jù)挖掘與數(shù)據(jù)分析。Matplotlib是Python語言的一個(gè)繪圖庫,內(nèi)含包括散點(diǎn)圖、K線、回歸線等的繪圖函數(shù),在數(shù)據(jù)分析上常常搭配前面提到的Numpy、Pandas使用。 3.數(shù)據(jù)框架——SQLAlchemy庫 SQLAlchemy是一種ORM框架,采用關(guān)系對(duì)象映射的方式運(yùn)行數(shù)據(jù)庫系統(tǒng)操作。 4.交互平臺(tái)——Jupyter Notebook Jupyter Notebook是一種交互式web筆記本,常用于創(chuàng)建、調(diào)試、共享程序文檔,支持實(shí)時(shí)代碼、數(shù)學(xué)方程、可視化,可以實(shí)現(xiàn)數(shù)據(jù)整理、統(tǒng)計(jì)建模、機(jī)器學(xué)習(xí)等功能。 5.量化實(shí)現(xiàn)思路及流程 基本思路為首先利用tushare pro財(cái)經(jīng)接口,輸入個(gè)人token碼,獲取股票歷史每日行情數(shù)據(jù)。利用SQLAlchemy建立數(shù)據(jù)框架,遍歷所有上市股票數(shù)據(jù)并添加到數(shù)據(jù)框架,設(shè)定好時(shí)間跨度,利用pandas庫對(duì)database完成擇優(yōu),最終使用matplotlib繪圖庫對(duì)篩選出來的個(gè)股進(jìn)行K線繪制,從而最為直觀地進(jìn)行最后的人工篩選。 三、將量化思路進(jìn)行代碼編制并實(shí)際運(yùn)行及優(yōu)化 (一)股票數(shù)據(jù)的采集及數(shù)據(jù)框架的建立 首先對(duì)tushare庫、sqlalchemy庫進(jìn)行導(dǎo)入及設(shè)置,核心代碼如下。 借助stock_basic接口得到基本數(shù)據(jù)信息,包括股票代碼、名稱等,之后利用daily接口獲取歷史日線行情,核心代碼如下。 #只選擇還在上市中的企業(yè)股票,并做出股票代碼列表 codes = pro.stock_basic(list_status = ‘L).ts_coded.values #從codes列表中對(duì)沒一個(gè)股票代碼進(jìn)行遍歷 for code in codes: df = pro.daily(ts_code = code,start_date = ‘20100101,? ? end_date = ‘20191113 df.to_sql(name = ‘daily_data, engine, index = False, if_exists = ‘a(chǎn)ppend) 到此就完成了對(duì)數(shù)據(jù)庫的初步建立及股票歷史數(shù)據(jù)的采集,在此之后開始對(duì)數(shù)據(jù)展開處理及分析。 (二)將基本量化思路應(yīng)用到Python當(dāng)中 在前文中已經(jīng)提到,可以設(shè)置四個(gè)參數(shù)值從而實(shí)現(xiàn)對(duì)“茶杯”形狀走勢(shì)圖進(jìn)行一個(gè)簡單的篩選,因此我們可以利用pandas中自帶的函數(shù)來對(duì)DataFrame進(jìn)行數(shù)據(jù)操作。以時(shí)間跨度20天為例,核心代碼如下。 #設(shè)定一個(gè)空列表用于裝填符合條件的代碼 stock_list = [] for c in data.columns: d0 = data[c][-20] d1 = data[c][-(n-1):-2].max() d2 = data[c][-1] d3 = data[c][-(n-1):-2].min() #篩選出符合條件d1 if d1 stock_list.append(c) (三)為提升程序篩選的穩(wěn)定性及可靠性加入RPS指標(biāo) RPS指標(biāo)全名為Relative Price Strength Rating,即股價(jià)相對(duì)強(qiáng)度,是由威廉·歐奈爾設(shè)想并運(yùn)用于美國股票市場研究的一種指標(biāo)。RPS指標(biāo)是指在一段時(shí)間內(nèi),個(gè)股在所有股票漲幅中的位列。RPS指標(biāo)背后的邏輯在于,歐奈爾對(duì)股票歷史數(shù)據(jù)進(jìn)行統(tǒng)計(jì)分析時(shí)發(fā)現(xiàn),漲幅靠前的股票往往隨后的表現(xiàn)也不會(huì)令人失望,這種強(qiáng)者恒強(qiáng)的現(xiàn)象,也許不難用馬太效應(yīng)與二八法則來解釋。下面使用Python來計(jì)算RPS。首先為了排除掉新股次新股的上市后的連續(xù)上漲情況,要先對(duì)數(shù)據(jù)進(jìn)行精準(zhǔn)剔除。核心代碼如下。 #設(shè)定參數(shù)為上市公司,獲取股票列表 datalist = pro.stock_basic(list_status = ‘L) #排除掉2018年1月1日之后上市的股票及帶有ST和*ST的股票 datalist = datalist[datalist[‘list_date].apply(int).values<20180101] datalist = datalist[-datalist[‘name].apply(lambda x:x.startswitch(‘*ST))] datalist = datalist[-datalist[‘name].apply(lambda x:x.startswitch(‘ST))] code_list = df.ts_code.values 接下來對(duì)進(jìn)行過濾后的數(shù)據(jù)進(jìn)行RPS指標(biāo)計(jì)算并進(jìn)一步篩選,核心代碼如下。 data = pd.read_sql(engine) time_list = [5,20,60,120,250] df = pd.DataFrame() for time in time_list: return = (data/data.shift(time)-1).iloc[time:].fillna(0) df = pd.DataFrame(ser.sort_values(ascending=False)) df[‘n] = range(1,len(df)+1) df[‘rps] = (1-df[‘n]/len(df))*100 (四)對(duì)篩選出來的股票進(jìn)行K線可視化 使用Pyecharts庫可以生成Echarts圖表——百度開源的一種數(shù)據(jù)可視化圖表,其可視化效果不輸其他可視化工具,可以實(shí)現(xiàn)在Python中直接使用數(shù)據(jù)生成圖。本文將利用其內(nèi)部擁有的Kline函數(shù)對(duì)篩選出來的股票進(jìn)行K線的繪制。 (五)程序?qū)嶋H運(yùn)行并輸出結(jié)果 首先根據(jù)RPS指標(biāo)進(jìn)行初步篩選,剔除新股及劣質(zhì)股票,在優(yōu)質(zhì)股票當(dāng)中進(jìn)行后續(xù)價(jià)格走勢(shì)的篩選??梢钥吹匠醪胶Y選的結(jié)果一共有3306只股票,接下來對(duì)這些股票進(jìn)行威廉·歐奈爾的“杯柄”價(jià)格走勢(shì)的判斷。運(yùn)行上文中所述代碼可得到如下結(jié)果:[‘寶塔實(shí)業(yè)‘天和防務(wù)‘熊貓金控‘粵泰股份‘中恒電氣‘道道全]最后一共得到五個(gè)“杯柄”類價(jià)格走勢(shì)的股票,對(duì)其進(jìn)行可視K線繪制,以天和防務(wù)股票為例。 天和防務(wù)的近20日價(jià)格走勢(shì)已經(jīng)很接近于“杯柄”走勢(shì)圖了,在杯底左側(cè)有一點(diǎn)小波動(dòng),但是不妨礙整個(gè)價(jià)格走勢(shì)的連貫性,且其價(jià)格走勢(shì)的上漲伴隨有成交量的明顯放大,屬于優(yōu)質(zhì)股。 四、實(shí)驗(yàn)結(jié)果評(píng)估及未來發(fā)展方向 本文基于美國著名投資大師——威廉·歐奈爾的著作《How to make money in stocks》中的技術(shù)面分析即價(jià)格走勢(shì)圖的分析,挑選其中最著名的“杯柄”走勢(shì)圖進(jìn)行量化,并基于Python實(shí)現(xiàn)了自動(dòng)選股策略的實(shí)現(xiàn)。基于股票歷史數(shù)據(jù),在2019年11月13日,進(jìn)行自動(dòng)選股的結(jié)果,一共有五只股票,分別是寶塔實(shí)業(yè)、天和防務(wù)、熊貓金控、粵泰股份、中恒電氣以及道道全,通過人工二次觀察,得出天和防務(wù)在未來一段時(shí)間內(nèi)具有相當(dāng)大的上漲潛,其隨后的一段時(shí)間內(nèi)也確實(shí)可以看出此股票有一定的上漲情況??梢钥闯觯瑲W奈爾的技術(shù)面分析方法應(yīng)用于Python自動(dòng)程序算法具有一定的有效性。當(dāng)然,歐奈爾的選股方法并不局限于技術(shù)面分析,其基本面分析工作將會(huì)比技術(shù)面分析更加重要,量化投資的發(fā)展也一定不會(huì)局限于技術(shù)面的分析,基于大數(shù)據(jù)的財(cái)報(bào)、信息源的分析也一定會(huì)為量化投資的發(fā)展增添一份力量。隨著量化投資技術(shù)的發(fā)展,基于量化所進(jìn)行的投資收益會(huì)呈現(xiàn)收益率逐漸增高、抗風(fēng)險(xiǎn)能力逐漸增強(qiáng)的情況,這與我國持續(xù)防范重大金融風(fēng)險(xiǎn)的總基調(diào)一致。 結(jié)束語: 隨著我國股票市場等金融市場的逐步開放,市場中的資本量必定會(huì)只增不減,未來我國的防范重大金融風(fēng)險(xiǎn)的總基調(diào)也不會(huì)改變,因此本文旨在通過歐奈爾的技術(shù)面分析結(jié)合Python自動(dòng)量化模型選股策略,通過遍歷A股中所有上市公司的股票,進(jìn)行RPS指標(biāo)、價(jià)格走勢(shì)圖判斷、成交量判斷的三重篩選手段,最終選出合適的具有上漲潛力的股票,從而降低投資風(fēng)險(xiǎn)。 在未來,將會(huì)基于此模型,嘗試添加基本面分析的量化選股思路,并嘗試將基本面分析與技術(shù)面分析進(jìn)行結(jié)合,并對(duì)眾多變量進(jìn)行權(quán)重的分配,從而達(dá)到更加優(yōu)秀的選股模型策略,這將會(huì)大大提高選股的可靠性、穩(wěn)定性、收益性以及抗風(fēng)險(xiǎn)性。另外,政策導(dǎo)向與產(chǎn)業(yè)分析也會(huì)對(duì)選股產(chǎn)生比較大的影響,而文本分析往往進(jìn)行機(jī)器分析非常困難,還是需要加以人工引導(dǎo),并在程序運(yùn)行過程中,需要進(jìn)行在旁監(jiān)督,以防止大型交易事故的發(fā)生。但是,股票投資到頭來還是具有一定風(fēng)險(xiǎn)的,任何股票投資策略都不能將這種風(fēng)險(xiǎn)化為0,量化投資選股能做的只有適當(dāng)降低這種風(fēng)險(xiǎn)以及量化這種風(fēng)險(xiǎn),從而給投資者和投資機(jī)構(gòu)以更加明顯的風(fēng)險(xiǎn)提示,從而使資本金得以進(jìn)行更加有效率的分配,提高金融市場資源分配的效率,也為廣大投資者提供了一套非??茖W(xué)而系統(tǒng)的投資思路,可以適當(dāng)減少我國A股市場的亂投資、投機(jī)性的風(fēng)氣。 參考文獻(xiàn): [1]張鑫.量化投資發(fā)展趨勢(shì)及其對(duì)中國的啟示[J].中國商論,2018(01):31-32. [2]曾武序,錢文彬,王映龍,楊文姬,柳軍.一種基于Python和BP神經(jīng)網(wǎng)絡(luò)的股票預(yù)測方法[J].計(jì)算機(jī)時(shí)代,2018(06):72-75+80. [3]陳文穎.基于Hadoop的股票數(shù)據(jù)聚類分析[D].浙江大學(xué),2018. [4]黃敏健,劉鈺萱.基于機(jī)器學(xué)習(xí)的股票趨勢(shì)預(yù)測方法研究[J].現(xiàn)代鹽化工,2019,46(05):74-76. [5]郝知遠(yuǎn).基于數(shù)據(jù)挖掘方法的股票預(yù)測系統(tǒng)[D].南京理工大學(xué),2017. [6]陳航.歐奈爾選股模型實(shí)證研究[D].上海交通大學(xué),2015. [7]劉利.基于技術(shù)指標(biāo)的量化選股實(shí)證研究[D].對(duì)外經(jīng)濟(jì)貿(mào)易大學(xué),2019. [8]黎爽.基于Python科學(xué)計(jì)算包的金融應(yīng)用實(shí)現(xiàn)[D].江西財(cái)經(jīng)大學(xué),2017. [9]李雪蓮.基本面與技術(shù)面相結(jié)合的A股量化選股模型設(shè)計(jì)[D].河北經(jīng)貿(mào)大學(xué),2015. 作者簡介:金城滿(1997-),男,朝鮮族,吉林省延吉市人,本科,山東大學(xué)商學(xué)院。研究方向:金融學(xué)。