版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
零起點(diǎn)Python大數(shù)據(jù)與量化交易目錄\h第1章從故事開始學(xué)量化\h1.1億萬(wàn)富翁的“神奇公式”\h1.1.1案例1-1:億萬(wàn)富翁的“神奇公式”\h1.1.2案例分析:Python圖表\h1.1.3matplotlib繪圖模塊庫(kù)\h1.1.4案例分析:style繪圖風(fēng)格\h1.1.5案例分析:colormap顏色表\h1.1.6案例分析:顏色表關(guān)鍵詞\h1.1.7深入淺出\h1.2股市“一月效應(yīng)”\h1.2.1案例1-2:股市“一月效應(yīng)”\h1.2.2案例分析:“一月效應(yīng)”計(jì)算\h1.2.3案例分析:“一月效應(yīng)”圖表分析\h1.2.4案例分析:顏色表效果圖\h1.2.5“一月效應(yīng)”全文注解版Python源碼\h1.2.6大數(shù)據(jù)·宏分析\h1.3量化交易流程與概念\h1.3.1數(shù)據(jù)分析I2O流程\h1.3.2量化交易不是高頻交易、自動(dòng)交易\h1.3.3小資、小白、韭菜\h1.3.4專業(yè)與業(yè)余\h1.4用戶運(yùn)行環(huán)境配置\h1.4.1程序目錄結(jié)構(gòu)\h1.4.2金融股票數(shù)據(jù)包\h1.5Python實(shí)戰(zhàn)操作技巧\h1.5.1模塊檢測(cè)\h1.5.2Spyder編輯器界面設(shè)置\h1.5.3代碼配色技巧\h1.5.4圖像顯示配置\h1.5.5Python2、Python3雙版本雙開模式\h1.5.6單版本雙開、多開模式\h1.5.7實(shí)戰(zhàn)勝于一切\(zhòng)h1.6量化、中醫(yī)與西醫(yī)\h第2章常用量化技術(shù)指標(biāo)與框架\h2.1案例2-1:SMA均線策略\h2.1.1案例要點(diǎn)與事件編程\h2.1.2量化程序結(jié)構(gòu)\h2.1.3main程序主入口\h2.1.4KISS法則\h2.2Python量化系統(tǒng)框架\h2.2.1量化行業(yè)關(guān)鍵詞\h2.2.2國(guó)外主流Python量化網(wǎng)站\h2.2.3我國(guó)主流Python量化網(wǎng)站\h2.2.4主流Python量化框架\h2.3常用量化軟件包\h2.3.1常用量化軟件包簡(jiǎn)介\h2.3.2案例2-2:模塊庫(kù)列表\h2.4常用量化技術(shù)指標(biāo)\h2.4.1TA-Lib金融軟件包\h2.4.2案例2-3:MA均線函數(shù)調(diào)用\h2.4.3TA-Lib函數(shù)調(diào)用\h2.4.4量化分析常用指標(biāo)\h2.5經(jīng)典量化策略\h2.5.1阿爾法(Alpha)策略\h2.5.2Beta策略\h2.5.3海龜交易法則\h2.5.4ETF套利策略\h2.6常用量化策略\h2.6.1動(dòng)量交易策略\h2.6.2均值回歸策略\h2.6.3其他常用量化策略\h2.7起點(diǎn)與終點(diǎn)\h第3章金融數(shù)據(jù)采集整理\h3.1常用數(shù)據(jù)源API與模塊庫(kù)\h3.1.1大數(shù)據(jù)綜合API\h3.1.2專業(yè)財(cái)經(jīng)數(shù)據(jù)API\h3.1.3專業(yè)數(shù)據(jù)模塊庫(kù)\h3.2案例3-1:zwDatX數(shù)據(jù)類\h3.3美股數(shù)據(jù)源模塊庫(kù)\h3.4開源文檔庫(kù)ReadtheDocs\h3.5案例3-2:下載美股數(shù)據(jù)\h3.6財(cái)經(jīng)數(shù)據(jù)源模塊庫(kù)TuShare\h3.6.1滬深股票列表\h3.6.2案例3-3:下載股票代碼數(shù)據(jù)\h3.6.3CSV文件處理\h3.7歷史數(shù)據(jù)\h3.7.1歷史行情\h3.7.2案例3-4:下載近期股票數(shù)據(jù)\h3.7.3歷史復(fù)權(quán)數(shù)據(jù)\h3.7.4案例3-5:下載歷史復(fù)權(quán)數(shù)據(jù)\h3.8其他交易數(shù)據(jù)\h3.9zwDat超大股票數(shù)據(jù)源與數(shù)據(jù)更新\h3.9.1案例3-6:A股基本概況數(shù)據(jù)下載\h3.9.2案例3-7:A股交易數(shù)據(jù)下載\h3.9.3案例3-8:A股指數(shù)行情數(shù)據(jù)下載\h3.9.4案例3-9:美股交易數(shù)據(jù)下載\h3.10數(shù)據(jù)歸一化處理\h3.10.1中美股票數(shù)據(jù)格式差異\h3.10.2案例3-10:數(shù)據(jù)格式轉(zhuǎn)化\h3.10.3案例3-11:A股策略PAT實(shí)盤分析\h3.10.4案例3-12:數(shù)據(jù)歸一化\h3.11為有源頭活水來\h第4章PAT案例匯編\h4.1投資組合與回報(bào)率\h4.1.1案例4-1:下載多組美股數(shù)據(jù)\h4.1.2案例4-2:投資組合收益計(jì)算\h4.2SMA均線策略\h4.2.1SMA簡(jiǎn)單移動(dòng)平均線\h4.2.2案例4-3:原版SMA均線策略\h4.2.3案例4-4:增強(qiáng)版SMA均線策略\h4.2.4案例4-5:A股版SMA均線策略\h4.3均線交叉策略\h4.3.1案例4-6:均線交叉策略\h4.3.2案例4-7:A股版均線交叉策略\h4.4VWAP動(dòng)量策略\h4.4.1案例4-8:VWAP動(dòng)量策略\h4.4.2案例4-9:A股版VWAP動(dòng)量策略\h4.5布林帶策略\h4.5.1案例4-10:布林帶策略\h4.5.2案例4-11:A股版布林帶策略\h4.6RSI2策略\h4.6.1案例4-12:RSI2策略\h4.6.2案例4-13:A股版RSI2策略\h4.7案例與傳承\(zhòng)h第5章zwQuant整體架構(gòu)\h5.1發(fā)布前言\h5.2功能簡(jiǎn)介\h5.2.1目錄結(jié)構(gòu)\h5.2.2安裝與更新\h5.2.3模塊說明\h5.2.4zwSys模塊:系統(tǒng)變量與類定義\h5.2.5zwTools模塊:常用(非量化)工具函數(shù)\h5.2.6zwQTBox:常用“量化”工具函數(shù)集\h5.2.7zwQTDraw.py:量化繪圖工具函數(shù)\h5.2.8zwBacktest:回溯測(cè)試工具函數(shù)\h5.2.9zwStrategy:策略工具函數(shù)\h5.2.10zw_TA-Lib:金融函數(shù)模塊\h5.3示例程序\h5.4常用量化分析參數(shù)\h5.5回溯案例:對(duì)標(biāo)測(cè)試\h5.5.1對(duì)標(biāo)測(cè)試1:投資回報(bào)參數(shù)\h5.5.2對(duì)標(biāo)測(cè)試2:VWAP策略\h5.6回報(bào)參數(shù)計(jì)算\h5.7主體框架\h5.7.1stkLib內(nèi)存數(shù)據(jù)庫(kù)\h5.7.2Bars數(shù)據(jù)包\h5.7.3案例:內(nèi)存數(shù)據(jù)庫(kù)&數(shù)據(jù)包\h5.7.4qxLib、xtrdLib\h5.7.5案例5-1:qxLib數(shù)據(jù)\h5.7.6量化系統(tǒng)的價(jià)格體系\h5.7.7數(shù)據(jù)預(yù)處理\h5.7.8繪圖模板\h5.8新的起點(diǎn)\h第6章模塊詳解與實(shí)盤數(shù)據(jù)\h6.1回溯流程\h6.1.1案例6-1:投資回報(bào)率\h6.1.2代碼構(gòu)成\h6.1.3運(yùn)行總流程\h6.2運(yùn)行流程詳解\h6.2.1設(shè)置股票數(shù)據(jù)源\h6.2.2設(shè)置策略參數(shù)\h6.2.3dataPre數(shù)據(jù)預(yù)處理\h6.2.4綁定策略函數(shù)\h6.2.5回溯測(cè)試:zwBackTest\h6.2.6輸出回溯結(jié)果數(shù)據(jù)、圖表\h6.3零點(diǎn)策略\h6.3.1mul多個(gè)時(shí)間點(diǎn)的交易&數(shù)據(jù)\h6.3.2案例6-2:多個(gè)時(shí)間點(diǎn)交易\h6.4不同數(shù)據(jù)源與格式修改\h6.4.1案例6-3:數(shù)據(jù)源修改\h6.4.2數(shù)據(jù)源格式修改\h6.5金融數(shù)據(jù)包與實(shí)盤數(shù)據(jù)更新\h6.5.1大盤指數(shù)文件升級(jí)\h6.5.2實(shí)盤數(shù)據(jù)更新\h6.5.3案例6-4:A股實(shí)盤數(shù)據(jù)更新\h6.5.4案例6-5:大盤指數(shù)更新\h6.6穩(wěn)定第一\h第7章量化策略庫(kù)\h7.1量化策略庫(kù)簡(jiǎn)介\h7.1.1量化系統(tǒng)的三代目\h7.1.2通用數(shù)據(jù)預(yù)處理函數(shù)\h7.2SMA均線策略\h7.2.1案例7-1:SMA均線策略\h7.2.2實(shí)盤下單時(shí)機(jī)與推薦\h7.2.3案例7-2:實(shí)盤SMA均線策略\h7.3CMA均線交叉策略\h7.3.1案例7-3:均線交叉策略\h7.3.2對(duì)標(biāo)測(cè)試誤差分析\h7.3.3案例7-4:CMA均線交叉策略修改版\h7.3.4人工優(yōu)化參數(shù)\h7.4VWAP策略\h7.4.1案例7-5:VWAP策略\h7.4.2案例7-6:實(shí)盤VWAP策略\h7.5BBands布林帶策略\h7.5.1案例7-7:BBands布林帶策略\h7.5.2案例7-8:實(shí)盤BBands布林帶策略\h7.6大道至簡(jiǎn)1+1\h第8章海龜策略與自定義擴(kuò)展\h8.1策略庫(kù)\h8.1.1自定義策略\h8.1.2海龜投資策略\h8.2tur海龜策略v1:從零開始\h8.3案例8-1:海龜策略框架\h8.4tur海龜策略v2:策略初始化\h8.5案例8-2:策略初始化\h8.6tur海龜策略v3:數(shù)據(jù)預(yù)處理\h8.7案例8-3:數(shù)據(jù)預(yù)處理\h8.8tur海龜策略v4:策略分析\h8.9案例8-4:策略分析\h8.10tur海龜策略v5:數(shù)據(jù)圖表輸出\h8.10.1案例8-5:圖表輸出\h8.10.2參數(shù)優(yōu)化\h8.10.3案例8-6:參數(shù)優(yōu)化\h8.11tur海龜策略v9:加入策略庫(kù)\h8.12案例8-7:入庫(kù)\h8.13庖丁解牛\h第9章TA-Lib函數(shù)庫(kù)與策略開發(fā)\h9.1TA-Lib技術(shù)指標(biāo)\h9.1.1TA-Lib官網(wǎng)\h9.1.2矩陣版TA-Lib金融函數(shù)模塊\h9.2MACD策略\h9.2.1MACD策略1\h9.2.2案例9-1:MACD_v1\h9.2.3MACD策略2\h9.2.4案例9-2:MACD_v2\h9.3KDJ策略\h9.3.1KDJ策略1\h9.3.2案例9-3:KDJ01\h9.3.3KDJ策略2\h9.3.4案例9-4:KDJ02\h9.4RSI策略\h9.4.1RSI取值的大小\h9.4.2RSI策略\h9.4.3預(yù)留參數(shù)優(yōu)化接口\h9.4.4案例9-5:A股版RSI策略\h9.5基石、策略與靈感\(zhòng)h第10章擴(kuò)展與未來\h10.1回顧案例2-1:SMA均線策略\h案例10-1:SMA均線策略擴(kuò)展\h10.2大盤指數(shù)資源\h10.2.1大盤指數(shù)文件升級(jí)\h10.2.2大盤指數(shù)內(nèi)存數(shù)據(jù)庫(kù)\h10.2.3擴(kuò)展zwQuantX類變量\h10.2.4大盤指數(shù)讀取函數(shù)\h10.2.5案例10-2:讀取指數(shù)\h10.2.6大盤數(shù)據(jù)切割\h10.2.7案例10-3:inxCut數(shù)據(jù)切割\h10.3系統(tǒng)整合\h10.3.1案例10-4:整合設(shè)置\h10.3.2案例10-5:修改指數(shù)代碼\h10.3.3修改sta_dataPre0xtim函數(shù)\h10.3.4案例10-6:整合數(shù)據(jù)切割\h10.3.5修改繪圖函數(shù)\h10.4擴(kuò)展完成\h案例10-7:SMA均線擴(kuò)展策略\h10.5其他擴(kuò)展課題\h10.5.1復(fù)權(quán)數(shù)據(jù)沖突\h10.5.2波動(dòng)率指標(biāo)DVIX\h10.5.3修改回溯主函數(shù)zwBackTest\h10.5.4案例10-8:波動(dòng)率\h10.5.5空頭交易\h10.5.6虛擬空頭交易\h10.5.7修改檢查函數(shù)\h10.5.8案例10-9:空頭數(shù)據(jù)\h10.6終點(diǎn)與起點(diǎn)\h附錄AzwPython開發(fā)平臺(tái)用戶手冊(cè)注:原文檔電子版(非掃描),需要的請(qǐng)下載本文檔后留言謝謝。第1章從故事開始學(xué)量化本書全程采用MBA個(gè)案教學(xué)模式,每章都有介紹案例,這些案例都配有純Python源碼,由淺到深,盡量覆蓋量化交易、量化分析的各個(gè)環(huán)節(jié),同時(shí)書中還配合有關(guān)案例,對(duì)Python編程技巧、金融量化領(lǐng)域的背景知識(shí)做了部分介紹。即使非金融專業(yè)、沒有經(jīng)驗(yàn)的讀者,也能夠根據(jù)書中的案例舉一反三,借鑒到自己的實(shí)盤操作當(dāng)中。至于案例背后的理論、算法、模型,有些非常復(fù)雜,屬于專業(yè)課程,甚至學(xué)術(shù)范疇,初學(xué)者無(wú)須一一細(xì)究。本章是入門課程,通過幾個(gè)經(jīng)典的案例,讀者將學(xué)習(xí)以下知識(shí):量化算法、量化策略(投資策略);不同的量化算法、量化策略所帶來的收益差別;用Excel進(jìn)行簡(jiǎn)單的量化分析;用Python進(jìn)行簡(jiǎn)單的量化分析。很多人,特別是初學(xué)者,一提起量化投資就覺得很神秘、很復(fù)雜,特別是提到其中的交易算法、量化模型,更加覺得高不可攀。本書一開始就從趣味投資學(xué)入手,通過幾個(gè)簡(jiǎn)單的小故事揭開量化投資的神秘面紗。1.1億萬(wàn)富翁的“神奇公式”1.1.1案例1-1:億萬(wàn)富翁的“神奇公式”假設(shè)有一位年輕人,每年定期存款1.4萬(wàn)元,享受平均5%的利率,如此持續(xù)40年,他可以積累的財(cái)富為:1.4×(1+5%)^40=169(萬(wàn)元)注意,這個(gè)公式不是一般的數(shù)學(xué)計(jì)算公式,而是復(fù)利公式,其計(jì)算方法如下:(1)本利和=本金×(1+年利率)^期限。(2)Excel復(fù)利計(jì)算公式為“=FV(rate,nper,pv,pmt,type)”。Excel操作為:“=FV(5%,40-1,-14000,-14000)”。結(jié)果是:1691196.84(元)。如果這位年輕人將每年應(yīng)存的錢全部投資到股票或房地產(chǎn)市場(chǎng),并假定能獲得年均20%的投資回報(bào)率,則40年后,他能積累多少財(cái)富?一般人猜測(cè)是200萬(wàn)元至800萬(wàn)元。然而,“神奇公式”給出的答案是1.0281億元!這個(gè)數(shù)據(jù)是依照財(cái)務(wù)學(xué)計(jì)算年金的公式得到的:1.4×[(1+20%)^(40-1)]=1.0281(億元)Excel操作為:“=FV(20%,40-1,-14000,-14000)”。結(jié)果是:102814009.76(元)。試著將這個(gè)天文數(shù)字與平均投資回報(bào)率僅為5%的定期存款結(jié)果相比,你會(huì)發(fā)現(xiàn)兩者收益的差距達(dá)60多倍,多么令人驚訝!這個(gè)“神奇公式”就是所有量化分析的基礎(chǔ)公式:復(fù)利計(jì)算公式。做量化分析、量化投資,任何算法、模型、短期收益的高低都無(wú)所謂,關(guān)鍵是穩(wěn)定。只要穩(wěn)定了,使用復(fù)利公式,哪怕是1%的增長(zhǎng),其增長(zhǎng)速度都是幾何裂變模式的。量化投資所用的算法、模式、策略,其實(shí)只是數(shù)據(jù)分析的一種手段。在“神奇公式”這個(gè)案例中,就涉及到兩種不同的策略和算法公式。保守投資策略:銀行儲(chǔ)蓄,5%的年收益。激進(jìn)投資策略:股市投資,20%的年收益。保守的銀行儲(chǔ)蓄策略,5%的年收益基本可以實(shí)現(xiàn)。激進(jìn)的股市投資策略,20%的年收益需要考慮風(fēng)險(xiǎn)因素,此次假設(shè)20%的年收益率已經(jīng)扣除了各種風(fēng)險(xiǎn)因素。下面用Excel分析一下這個(gè)“神奇公式”。配套文件名是\zwpython\zw_k10\dat\k101.xls。打開文件,如圖1-1所示。圖1-1“神奇公式”收益表從“神奇公式”收益表我們可以看到:用戶累計(jì)投入56萬(wàn)元(1.4萬(wàn)元×40);保守模式,5%年收益率,40年總收益169萬(wàn)元,投資回報(bào)率3倍;激進(jìn)模式,20%年收益率,40年總收益1.02億元,投資回報(bào)率184倍;激進(jìn)模式與保守模式兩者的回報(bào)相差61倍。下面再看看“神奇公式”Python版本的腳本程序。腳本文件名為\zwpython\zw_k10\k101.py。#-*-coding:utf-8-*-importnumpyasnp#=======================defsta001(k,nyear,xd):d2=np.fv(k,nyear,-xd,-xd);d2=round(d2)returnd2#=======================d40=1.4*40print("d40,40x1.4=",d40)d=sta001(0.05,40-1,1.4);print("01保守投資模式,",d,round(d/d40))d2=sta001(0.20,40-1,1.4);print("02激進(jìn)投資模式,",d2,round(d2/d40))dk=round(d2/d)print("dk,兩者差別(xx倍):",dk)以上程序運(yùn)行結(jié)果如圖1-2所示,和Excel的計(jì)算結(jié)果完全一致。圖1-2“神奇公式”Python程序運(yùn)行結(jié)果算法(Algorithm)是指解題方案準(zhǔn)確而完整的描述,是一系列解決問題的清晰指令。算法代表著用系統(tǒng)的方法描述解決問題的策略機(jī)制。也就是說,能夠?qū)σ欢ㄒ?guī)范的輸入,在有限時(shí)間內(nèi)獲得所要求的輸出。如果一個(gè)算法有缺陷,或不適合于某個(gè)問題,那么執(zhí)行這個(gè)算法將不會(huì)解決這個(gè)問題。案例1-1中的Python程序k101.py就是采用最簡(jiǎn)單的順序算法,依照先后順序,根據(jù)不同收益率,依次調(diào)用策略計(jì)算函數(shù)sta001計(jì)算相關(guān)的總收益。讀者仔細(xì)對(duì)比一下Excel與Python程序兩個(gè)不同的分析過程,可以發(fā)現(xiàn),其中的關(guān)鍵都是fv函數(shù):d2=np.fv(k,nyear,-xd,-xd);fv為復(fù)利函數(shù),看起來簡(jiǎn)單,其實(shí)具體編程非常復(fù)雜,這些現(xiàn)成函數(shù)讀者知道如何調(diào)用就可以了。同樣,量化分析的相關(guān)軟件和算法原理都很專業(yè),一般用戶只需要知道如何使用相關(guān)的軟件和工具就可以了。有趣的是,Excel與Python程序的復(fù)利函數(shù)不僅名稱一樣,而且連調(diào)用的參數(shù)、順序都是一致的。所以筆者經(jīng)常說,Pandas(潘達(dá)思)數(shù)據(jù)分析軟件不過是Python版本的Excel報(bào)表而已,量化分析其實(shí)很簡(jiǎn)單,懂Excel就可以入門學(xué)習(xí)了。事實(shí)上,微軟公司的Excel電子表格軟件是世界上最流行的數(shù)據(jù)分析、量化分析工具之一。Excel可以完成各種專業(yè)的數(shù)據(jù)分析,提供BI(商業(yè)智能)功能,甚至還能夠提供服務(wù)器的功能。不過,綜合而言,專業(yè)的量化分析、數(shù)據(jù)分析使用Python語(yǔ)言和Pandas數(shù)據(jù)分析軟件更加專業(yè)、簡(jiǎn)單和方便。目前,大數(shù)據(jù)領(lǐng)域已經(jīng)公認(rèn):十億以下的大數(shù)據(jù)項(xiàng)目,Pandas數(shù)據(jù)分析軟件是首選的工程一線的處理方案。注意本節(jié)的案例“神奇公式”Python版本的腳本程序文件名為\zwpython\zw_k10\k101.py。在文件名“k101.py”中,字母k后的第一個(gè)字符1代表第1章的案例,即k101.py表示第1章的第一個(gè)Python案例程序。本書均采用這種命令方式,k2~k9表示第2~第9章的案例,kx表示第10章的案例。1.1.2案例分析:Python圖表下面在程序k101.py中加入圖表繪制語(yǔ)句,再通過參數(shù)設(shè)置不同的年利率,看看不同的年利率最終對(duì)應(yīng)的年收益是如何變化的。我們采用四種不同的利率設(shè)置:5%、10%、15%、20%。對(duì)應(yīng)參數(shù):0.05、0.10、0.15、0.20。腳本文件名為\zwpython\zw_k10\k101dr.py。腳本代碼如下:#-*-coding:utf-8-*-importnumpyasnpimportscipyasspimportpandasaspdimportmatplotlibasmplimportmatplotlib.pyplotaspltimportseabornassns#=======================mpl.style.use('seaborn-whitegrid');defsta001(k,nyear,xd):d2=np.fv(k,nyear,-xd,-xd);d2=round(d2)returnd2#=======================d40=1.4*40print("d40,40x1.4=",d40)d=sta001(0.05,40-1,1.4);print("01保守投資模式,",d,round(d/d40))d2=sta001(0.20,40-1,1.4);print("02激進(jìn)投資模式,",d2,round(d2/d40))dk=round(d2/d)print("dk,兩者差別(xx倍):",dk)dx05=[sta001(0.05,x,1.4)forxinrange(0,40)]dx10=[sta001(0.10,x,1.4)forxinrange(0,40)]dx15=[sta001(0.15,x,1.4)forxinrange(0,40)]dx20=[sta001(0.20,x,1.4)forxinrange(0,40)]#print(dx05)print(dx20)df=pd.DataFrame(columns=['dx05','dx10','dx15','dx20']);df['dx05']=dx05;df['dx10']=dx10;df['dx15']=dx15;df['dx20']=dx20;print("")print(df.tail())df.plot();運(yùn)行結(jié)果如圖1-3所示。圖1-3“神奇公式”收益圖從圖1-3可以看出,5%、10%、15%和20%的年利率對(duì)應(yīng)的最終40年總收益分別是169萬(wàn)元、620萬(wàn)元、2491萬(wàn)元和10281萬(wàn)元。注意在圖1-3中,圖形上面的最后一行字符:39169620249110281這行數(shù)字表示不同的年利率對(duì)應(yīng)的最后一年的收益結(jié)果,其中第一個(gè)數(shù)字是39,它是index(索引),之所以是39,是因?yàn)榈谝荒曛挥斜窘?,沒有利息收入,所以40年的總收益必須扣除第一年的收益,在復(fù)利公式中按39年來計(jì)算時(shí)間。1.1.3matplotlib繪圖模塊庫(kù)單純的數(shù)據(jù)分析非??菰铮罅康臄?shù)據(jù)令讀者很頭疼,所以需要把數(shù)據(jù)圖形化顯示??梢暬?jì)算是量化分析、數(shù)據(jù)分析的一個(gè)重要組成部分,Python量化分析和數(shù)據(jù)分析最重要的繪圖模塊是matplotlib。matplotlib繪圖模塊是Python編程語(yǔ)言最著名的繪圖模塊庫(kù),類似于MATLAB和R語(yǔ)言,它提供了一整套和MATLAB相似的命令A(yù)PI,非常適合交互式的制圖。matplotlib的官方網(wǎng)址是/。matplotlib繪圖模塊的文檔相當(dāng)完備,并且網(wǎng)站的Gallery頁(yè)面中有上百幅縮略圖,打開之后都有源程序。如果用戶需要繪制某種類型的圖,那么只需要在這個(gè)頁(yè)面中瀏覽、復(fù)制、粘貼一下,基本上都能完成。在Python語(yǔ)言中,比較著名的繪圖模塊還有g(shù)nuplot和seaborn,不過語(yǔ)法與Python差別太大,通常使用不多。近年來,隨著Python在大數(shù)據(jù)、金融量化方面的擴(kuò)展,出現(xiàn)了許多新的繪圖模塊庫(kù),但matplotlib依然是最重要的Python繪圖模塊。matplotlib2.0版本正在開發(fā)中,同時(shí)也出現(xiàn)了許多優(yōu)秀的、第三方matplotlib擴(kuò)展庫(kù),如Basemap、seaborn、mplot3D、ggplot、prettyplotlib和iTerm2。其中,seaborn和ggplot是統(tǒng)計(jì)繪圖模塊庫(kù)和美化增強(qiáng)庫(kù):prettyplotlib模塊庫(kù)與數(shù)據(jù)分析、量化分析領(lǐng)域關(guān)聯(lián)大,是用得較多的繪圖模塊庫(kù)。這些繪圖模塊庫(kù)在各自官方網(wǎng)站及Python網(wǎng)站的pyPI模塊庫(kù)下載中心都有下載。pyPI網(wǎng)址是/pypi。Python常用的模塊庫(kù)如圖1-4~圖1-6所示。圖1-4seaborn繪圖模塊圖1-5prettyplotlib繪圖模塊圖1-6ggplot繪圖模塊matplotlib繪圖模塊庫(kù)非常專業(yè)且龐大,有關(guān)的細(xì)節(jié)讀者可慢慢研究,具體內(nèi)容可瀏覽/mpl_toolkits/index.html。1.1.4案例分析:style繪圖風(fēng)格下面介紹matplotlib模塊庫(kù)中的style繪圖風(fēng)格函數(shù),它是與繪圖效果關(guān)聯(lián)最大的一個(gè)函數(shù)。腳本文件名為\zwpython\zw_k10\k101sty.py。全部代碼如下:#-*-coding:utf-8-*-importnumpyasnpimportscipyasspimportpandasaspdimportmatplotlibasmplimportmatplotlib.pyplotaspltimportseabornassnsimportprettyplotlibimportggplot#=======================mpl.style.use('seaborn-whitegrid');defsta001(k,nyear,xd):d2=np.fv(k,nyear,-xd,-xd);d2=round(d2)#print(nyear,d2)returnd2defdr_xtyp(_dat):#xtyp=['bmh','dark_background','fivethirtyeight','ggplot','grayscale','default'];i=0;forxssinplt.style.available:plt.figure()plt.style.use(xss);_dat.plot()fss="tmp\\k101_"+xss+".png";plt.savefig(fss);i+=1;print(i,xss,",",fss)plt.show()#=======================dx05=[sta001(0.05,x,1.4)forxinrange(0,40)]dx10=[sta001(0.10,x,1.4)forxinrange(0,40)]dx15=[sta001(0.15,x,1.4)forxinrange(0,40)]dx20=[sta001(0.20,x,1.4)forxinrange(0,40)]df=pd.DataFrame(columns=['dx05','dx10','dx15','dx20']);df['dx05']=dx05;df['dx10']=dx10;df['dx15']=dx15;df['dx20']=dx20;print(df.tail())dr_xtyp(df)這段代碼中最重要的語(yǔ)句是:plt.style.use(xss);另外,還可以設(shè)置繪圖風(fēng)格。在Python中,內(nèi)置的繪圖風(fēng)格有21種,包括bmh、classic、dark_background、fivethirtyeight、ggplot、grayscale、seaborn-bright、seaborn-colorblind、seaborn-dark、seaborn-darkgrid、seaborn-dark-palette、seaborn-deep、seaborn-muted、seaborn-notebook、seaborn-paper、seaborn-pastel、seaborn-poster、seaborn-talk、seaborn-ticks、seaborn-white和seaborn-whitegrid。其中,大部分是seaborn模塊庫(kù)引入的,運(yùn)行后輸出圖保存在“tmp”目錄下,具體效果如圖1-7所示。圖1-7matplotlib的不同style參數(shù)效果圖此外,在目錄“x:\zwPython\zw_k10\pic\style\”中也有類似的效果圖片。通常,style繪圖參數(shù)一般使用seaborn-whitegrid,即白色網(wǎng)格。在導(dǎo)入模塊庫(kù)后和其他程序語(yǔ)句前,用matplotlib設(shè)置為全局風(fēng)格,代碼如下:mpl.style.use('seaborn-whitegrid');1.1.5案例分析:colormap顏色表下面介紹顏色表colormap。腳本文件名為\zwpython\zw_k10\k101cmap.py,全部代碼如下:#-*-coding:utf-8-*-importnumpyasnpimportscipyasspimportpandasaspdimportmatplotlibasmplimportmatplotlib.pyplotaspltimportseabornassnsimportprettyplotlibimportggplot#=======================mpl.style.use('seaborn-whitegrid');defsta001(k,nyear,xd):d2=np.fv(k,nyear,-xd,-xd);d2=round(d2)returnd2defdr_cmap(_dat):fss='cor_maps.csv'cm8=pd.read_csv(fss,encoding='gbk')i=0;forxssincm8['name']:plt.figure()_dat.plot(colormap=xss)fss="tmp\\k101cor_"+xss+".png";plt.savefig(fss);i+=1;print(i,xss,",",fss)plt.show()#=======================dx05=[sta001(0.05,x,1.4)forxinrange(0,40)]dx10=[sta001(0.10,x,1.4)forxinrange(0,40)]dx15=[sta001(0.15,x,1.4)forxinrange(0,40)]dx20=[sta001(0.20,x,1.4)forxinrange(0,40)]df=pd.DataFrame(columns=['dx05','dx10','dx15','dx20']);df['dx05']=dx05;df['dx10']=dx10;df['dx15']=dx15;df['dx20']=dx20;print(df.tail())dr_cmap(df)運(yùn)行結(jié)果保存在“tmp”目錄下。colormap設(shè)置語(yǔ)句如下:_dat.plot(colormap=xss)在plot語(yǔ)句中,顏色表用關(guān)鍵詞“colormap”指定,通常內(nèi)置的顏色表有數(shù)十種,具體數(shù)量隨著matplotlib版本的不同及擴(kuò)充模塊的不同而有所差異。在筆者測(cè)試的版本中,colormap顏色表有76種,具體參見文件cor_map.csv,它在“\zwpython\doc\”目錄下。此外,在目錄“x:\zwPython\zw_k10\pic\cormap\”中也有相關(guān)的效果圖片。因?yàn)榫€條圖色彩效果表現(xiàn)不佳,因此在后面的條形圖中再進(jìn)行介紹。matplotlib不同的colormap顏色表參數(shù)效果圖如圖1-8所示。圖1-8matplotlib不同的colormap顏色表參數(shù)效果圖11.1.6案例分析:顏色表關(guān)鍵詞colormap顏色表可以使用預(yù)設(shè)的參數(shù),也可以編寫腳本來抓取系統(tǒng)內(nèi)置的顏色表參數(shù)。腳本文件名為\zwpython\zw_k10\k101cmap2.py,示例代碼如下:#-*-coding:utf-8-*-importnumpyasnpimportscipyasspimportpandasaspdimportmatplotlibasmplimportmatplotlib.pyplotaspltimportseabornassnsimportprettyplotlibimportggplot#=======================mpl.style.use('seaborn-whitegrid');defsta001(k,nyear,xd):d2=np.fv(k,nyear,-xd,-xd);d2=round(d2)returnd2#=======================dx05=[sta001(0.05,x,1.4)forxinrange(0,40)]dx10=[sta001(0.10,x,1.4)forxinrange(0,40)]dx15=[sta001(0.15,x,1.4)forxinrange(0,40)]dx20=[sta001(0.20,x,1.4)forxinrange(0,40)]df=pd.DataFrame(columns=['dx05','dx10','dx15','dx20']);df['dx05']=dx05;df['dx10']=dx10;df['dx15']=dx15;df['dx20']=dx20;print(df.tail())#df.plot(colormap='xss')df.plot(colormap='hot')運(yùn)行結(jié)果如圖1-9所示。圖1-9matplotlib不同的colormap顏色表參數(shù)效果圖2下面修改一下代碼:取消第40行前的“#”注釋符號(hào);在第41行前加上“#”注釋符號(hào)。修改后,相關(guān)代碼如圖1-10所示。圖1-10colormap顏色表參數(shù)代碼修改再次運(yùn)行,因?yàn)椤皒ss”是錯(cuò)誤的顏色代碼,因此運(yùn)行出錯(cuò),提示信息如圖1-11所示。圖1-11錯(cuò)誤colormap顏色表參數(shù)運(yùn)行截圖復(fù)制“Possiblevaluesare:”后面的文字到記事本或UltraEdit編輯軟件(推薦用UltraEdit軟件編輯文本)。把文字里的“,”(逗號(hào))替換成“回車換行”符號(hào),即可獲得系統(tǒng)內(nèi)置的可用colormap顏色列表。需要注意的是,在文件cor_map.csv中只收錄了正序的colormap顏色關(guān)鍵詞。在關(guān)鍵詞后面加上“_r”就可以組成同色系的、反序顏色表關(guān)鍵詞,如Blues與Blues_r。1.1.7深入淺出下面對(duì)1.1節(jié)的內(nèi)容進(jìn)行小結(jié),1.1節(jié)主要講述了以下內(nèi)容:趣味理財(cái)學(xué)之“神奇公式”;神奇公式的Excel量化分析;神奇公式的Python編程分析;Python圖表繪制;Python繪圖風(fēng)格函數(shù);Python顏色表colormap;Python顏色表關(guān)鍵詞。通常,講到“神奇公式”的Python編程分析本節(jié)就可以結(jié)束了。但是,我們通過這個(gè)最簡(jiǎn)單的編程案例逐步深入,進(jìn)一步學(xué)習(xí)了相關(guān)的Python繪圖、style繪圖風(fēng)格、colormap顏色表等多種實(shí)戰(zhàn)技巧。授之以魚,不如授之以漁。做學(xué)問,其實(shí)很簡(jiǎn)單,把簡(jiǎn)單的問題復(fù)雜化,從多個(gè)不同的角度不斷分析、深入,明白了原理、掌握了邏輯,就知道如何把復(fù)雜的問題簡(jiǎn)單化,從最簡(jiǎn)單、最直接的角度入手解決問題。筆者希望把這種學(xué)習(xí)的方法傳授給讀者。學(xué)會(huì)了這種由淺入深、化繁為簡(jiǎn)的學(xué)習(xí)方法后,讀者在面對(duì)各種新的領(lǐng)域、新的課題時(shí)就會(huì)知道如何把握全局、掌控方向。1.2股市“一月效應(yīng)”1.2.1案例1-2:股市“一月效應(yīng)”“一月效應(yīng)”是從統(tǒng)計(jì)學(xué)角度分析股市,發(fā)現(xiàn)一月份的回報(bào)率往往是“正數(shù)”,而且會(huì)比其他月份高,而在十二月,股市的回報(bào)率很多時(shí)候會(huì)呈現(xiàn)負(fù)值。在傳統(tǒng)股市,每逢進(jìn)入新一年的一月,股市總是升的多、跌的少。最初出現(xiàn)“一月效應(yīng)”的國(guó)家是美國(guó),后來其他國(guó)家的學(xué)者也陸續(xù)發(fā)現(xiàn)“一月效應(yīng)”存在于其他股市中。對(duì)于“一月效應(yīng)”的出現(xiàn),學(xué)者認(rèn)為這與美國(guó)“資本增值稅”的稅務(wù)安排、員工年終獎(jiǎng)及美國(guó)年尾的重要假期(感恩節(jié)、圣誕節(jié)、元旦)有很大關(guān)系。我國(guó)因?yàn)檗r(nóng)歷春節(jié),通常“一月效應(yīng)”會(huì)延后,大多在農(nóng)歷新年前后,即二月左右。筆者挑選一些經(jīng)典的傳統(tǒng)投資策略進(jìn)行具體的量化分析?!耙辉滦?yīng)”從量化投資角度而言,就是一種投資策略。不過,這種投資策略到底效果如何,我們可以通過Python編程進(jìn)行具體的量化分析?!耙辉滦?yīng)”有兩段示例代碼:k102m1.py文件,用于計(jì)算美國(guó)股票、中國(guó)A股的全部股票,以及多種指數(shù)成分股的相關(guān)數(shù)據(jù);k102m1dr.py文件,根據(jù)計(jì)算數(shù)據(jù),繪制相關(guān)的結(jié)果圖片。由于是Python量化編程,所以我們不僅計(jì)算一月的升跌情況,還計(jì)算了其他各月的升跌情況。本書采用的股票代碼表源自zwDat股票數(shù)據(jù)包zwDat\inx。各文件含義如下。(1)中國(guó)股票數(shù)據(jù)。inx_code.csv,中國(guó)A股大盤及各種指數(shù)代碼。stk_base.csv,中國(guó)A股2810只股票代碼公司概況。stk_code.csv,中國(guó)A股2810只股票代碼。stk_hs300.csv,中國(guó)滬深300指數(shù)股票代碼。stk_sz50.csv,中國(guó)上證50指數(shù)股票代碼。stk_zz500.csv,中國(guó)中證500指數(shù)股票代碼。(2)美國(guó)股票數(shù)據(jù)。inxYahoo.csv,全部6688只美股代碼。inxYahoo30sp.csv,道瓊斯30指數(shù)美股代碼。inxYahoo100ns.csv,納斯達(dá)克100指數(shù)美股代碼。inxYahoo100sp.csv,道瓊斯100工業(yè)指數(shù)美股代碼。inxYahoo500sp.csv,道瓊斯30指數(shù)美股代碼。inxYahoo600.csv,量化常用美股600股票代碼。1.2.2案例分析:“一月效應(yīng)”計(jì)算相關(guān)腳本文件名為\zwpython\zw_k10\k102m1.py。全部代碼如下:#-*-coding:utf-8-*-importsysimportpandasaspdimportnumpyasnpimportzwSysaszw#::zwQTimportzwTools#----------codedefzw_anz_m1sub(xcod,rss,kstr):fss=rss+xcod+".csv";print(fss)nSum=0;nAdd=0;nDec=0;knum=int(kstr);knum2=knum+1;try:df=pd.read_csv(fss,index_col=0,parse_dates=[0],encoding='gbk')df=df.rename(columns={'Close':'close'});df=df.sort_index();#_tim0=df.index[0];_ynum0=_tim0.year;_tim9=df.index[-1];_ynum9=_tim9.year+1;forynuminrange(_ynum0,_ynum9):ystr=str(ynum);_tim1x='-1';ystr2=ystr+"-"+kstr;#print(ystr2,len(df),knum)ifknum==12:ystr3=ystr+"-"+kstr+'-31';df2=df[(df.index>=ystr2)&(df.index<=ystr3)];else:kstr2=str(knum2);ifknum2<10:kstr2='0'+kstr2;ystr3=ystr+"-"+kstr2+'-01';df2=df[(df.index>=ystr2)&(df.index<ystr3)];#print(ystr2,ystr3,len(df2))if(len(df2)>0):_tim1x=str(df2.index[0].month);if(len(_tim1x)<2):_tim1x='0'+_tim1x;if(_tim1x==kstr):df1=df2[ystr2];if(len(df1)>0):xd1a=df1.ix[0];xd1z=df1.ix[-1];nSum+=1;vd1a=xd1a['close'];vd1z=xd1z['close'];if(vd1z>vd1a):nAdd+=1else:nDec+=1;exceptIOError:pass;#skip,error#print('nSum,nAdd,nDec,',nSum,nAdd,nDec);returnnSum,nAdd,nDecdefzw_stk_anz_m01(qx,finx0,rss,ksgn):fss=qx.rdatInx+finx0+".csv";#stk_code.csv,inxYahoo.csvdinx=pd.read_csv(fss,encoding='gbk')mx1={};mx1['finx']=finx0;mx1['ksgn']=ksgn;mx1['nSum']=0;mx1['nAdd']=0;mx1['nDec']=0;#nSum=0;nAdd=0;nDec=0;i=0;xn9=len(dinx['code']);mx1['nstk']=xn9;forxcodindinx['code']:i+=1;if(notisinstance(xcod,str)):xcod="%06d"%xcod;dSum,dAdd,dDec=zw_anz_m1sub(xcod,rss,ksgn);mx1['nSum']=mx1['nSum']+dSum;mx1['nAdd']=mx1['nAdd']+dAdd;mx1['nDec']=mx1['nDec']+dDec;print(i,'/',xn9,mx1);mx1['kAdd']=np.round(mx1['nAdd']*100/mx1['nSum']);mx1['kDec']=np.round(mx1['nDec']*100/mx1['nSum']);returnmx1defzw_stk_anz_mx(qx,finx0,rss):c10=["finx","ksgn","nstk",'nSum','nAdd','nDec','kAdd','kDec'];df=pd.DataFrame(columns=c10);ftg="tmp\\mx_"+finx0+".csv";print(ftg)foriinrange(12):ksgn=str(i+1);ifi<9:ksgn='0'+ksgn;#print(ksgn)mx1=zw_stk_anz_m01(qx,finx0,rss,ksgn);ds1=pd.Series(mx1,index=c10);ds2=ds1.T;df=df.append(ds2,ignore_index=True);df.to_csv(ftg,index=False,encode='utf8');defzw_stk_anz_mx_all(qx,xlst):forfxinxlst:if(fx.find('Yah')>0):rss=qx.rZWusDayelse:if(fx=='inx_code'):rss=qx.rZWcnXDayelse:rss=qx.rZWcnDayfinx0=fx;zw_stk_anz_mx(qx,finx0,rss);#============mainqx=zw.zwDatX(zw._rdatCN);uslst=['inxYahoo30sp','inxYahoo100ns','inxYahoo100sp','inxYahoo600','inxYahoo500sp','inxYahoo']zw_stk_anz_mx_all(qx,uslst)cnlst=['inx_code','stk_sz50','stk_hs300','stk_zz500','stk_code','stk_code'];zw_stk_anz_mx_all(qx,cnlst)運(yùn)行后,會(huì)在“zw_k10\tmp”目錄下根據(jù)相應(yīng)的股票代碼文件名,生成對(duì)應(yīng)的輸出數(shù)據(jù)文件,全部是CSV格式。為方便分析,我們縮短相關(guān)文件名,并復(fù)制到dat目錄下“\zwpython\zw_k10\dat\”。案例1-2,“一月效應(yīng)”代碼較長(zhǎng),為了便于初學(xué)者學(xué)習(xí),我們將對(duì)關(guān)鍵代碼,添加流程圖,進(jìn)行說明。案例1-2程序代碼,可分為三大模塊:文件頭:import模塊庫(kù)庫(kù)文件導(dǎo)入函數(shù)定義:定義相關(guān)的函數(shù)主控程序:注解main后面的語(yǔ)句我們先看看案例1-2的主程序部分代碼:#============mainqx=zw.zwDatX(zw._rdatCN);uslst=['inxYahoo30sp','inxYahoo100ns','inxYahoo100sp','inxYahoo600','inxYahoo500sp','inxYahoo']zw_stk_anz_mx_all(qx,uslst)cnlst=['inx_code','stk_sz50','stk_hs300','stk_zz500','stk_code','stk_code'];zw_stk_anz_mx_all(qx,cnlst)如圖1-12所示為主程序流程圖,主程序很簡(jiǎn)單:初始化變量qx先設(shè)置美股股票代碼索引文件參數(shù)變量uslst,調(diào)用分析函數(shù):zw_stk_anz_mx_all設(shè)置中國(guó)A股股票代碼索引文件參數(shù)變量cnlst,調(diào)用分析函數(shù)zw_stk_anz_mx_all圖1-12流程圖案例1-2,“一月效應(yīng)”的關(guān)鍵數(shù)據(jù)變量df,在函數(shù)zw_stk_anz_mx定義中:defzw_stk_anz_mx(qx,finx0,rss):c10=["finx","ksgn","nstk",'nSum','nAdd','nDec','kAdd','kDec'];df=pd.DataFrame(columns=c10);這里預(yù)定義變量df使用的是Pandas(潘達(dá)思)數(shù)據(jù)分析模塊庫(kù)中的DataFrame類型變量,而不是用傳統(tǒng)的Python語(yǔ)言內(nèi)置list(列表)類型變量。這樣做是為了便于使用Pandas作為統(tǒng)一的數(shù)據(jù)格式,以及方便追加新的數(shù)據(jù),代碼如下:ds1=pd.Series(mx1,index=c10);ds2=ds1.T;df=df.append(ds2,ignore_index=True);同樣,在下面的函數(shù)zw_stk_anz_m01中,技巧性地使用了“字典”這種數(shù)據(jù)格式作為數(shù)據(jù)變量,而不是直接使用傳統(tǒng)的簡(jiǎn)單變量。因?yàn)镻andas數(shù)據(jù)分析模塊庫(kù)中的DataFrame、Series數(shù)據(jù)格式預(yù)設(shè)的就是字典模式。在量化程序中,變量使用字典模式,在與Pandas耦合方面會(huì)方便很多。其他有關(guān)細(xì)節(jié),在后續(xù)相關(guān)章節(jié)將結(jié)合具體的圖表進(jìn)行講解。defzw_stk_anz_m01(qx,finx0,rss,ksgn):mx1={};mx1['finx']=finx0;mx1['ksgn']=ksgn;mx1['nSum']=0;mx1['nAdd']=0;mx1['nDec']=0;1.2.3案例分析:“一月效應(yīng)”圖表分析有關(guān)代碼與案例1-2類似,只是增加了圖表輸出代碼,具體代碼請(qǐng)大家參看腳本文件:\zwpython\zw_k10\k102m1dr.py。在本節(jié)源碼文件中,請(qǐng)注意下面的語(yǔ)句:df2.plot(kind='bar',colormap='hot',rot=0,figsize=(20,5));代碼運(yùn)行結(jié)果如圖1-13所示。因?yàn)檫\(yùn)行圖較長(zhǎng),所以在plot繪圖語(yǔ)句中特意使用了以下設(shè)置:圖1-13股市“一月效應(yīng)”運(yùn)行結(jié)果figsize=(20,5),把圖像尺寸設(shè)置為長(zhǎng)方形;用rot=0把坐標(biāo)顯示出來,設(shè)置為無(wú)旋轉(zhuǎn);colormap='hot',使色彩分隔明顯。此外,我們還使用了以下語(yǔ)句:plt.legend(ncol=3,loc=2),圖標(biāo)采用3列模式,位置是左上角;plt.tight_layout(),緊縮四周空白,擴(kuò)大繪圖面積。另外,請(qǐng)注意,為方便分析,我們縮短相關(guān)文件名,并復(fù)制到dat目錄下“F:\zwPython\zw_k10\dat\”。在圖1-13中,上半部分為“一月效應(yīng)”中國(guó)A股分析結(jié)果,下半部分為“一月效應(yīng)”美股分析結(jié)果?!耙辉滦?yīng)”中國(guó)A股數(shù)據(jù)表如圖1-14所示,對(duì)應(yīng)的數(shù)據(jù)文件為\zwpython\zw_k10\dat\mx_cn.csv。圖1-14“一月效應(yīng)”中國(guó)A股數(shù)據(jù)表由圖1-13和圖1-14可以看出,“一月效應(yīng)”因?yàn)檗r(nóng)歷春節(jié)的影響具有滯后效果,到二月份,60%~70%的股票都是上漲的(二月)另外,從圖1-14中可以看出,inxCN混合指數(shù)的股票,在五月、九月、十一月三個(gè)月份也是上漲的,關(guān)聯(lián)度遠(yuǎn)遠(yuǎn)高于傳統(tǒng)的“一月效應(yīng)”??赡苁俏逡弧?guó)慶、元旦假期的黃金周效應(yīng),讀者可以進(jìn)一步研究分析。股票分析結(jié)果也是70%~80%為正收益,這是一個(gè)新策略,可以稱為“A股黃金周策略”。傳統(tǒng)的算法、建模過程也和這個(gè)流程類似。對(duì)相關(guān)數(shù)據(jù)進(jìn)行統(tǒng)計(jì)分析、數(shù)據(jù)挖掘,然后對(duì)高于K值的算法、框架進(jìn)行驗(yàn)證整理和回溯測(cè)試,從而成為實(shí)戰(zhàn)當(dāng)中的操盤策略。本節(jié)的案例分析因?yàn)槭侨腴T課程,所以只考慮了上漲和下跌兩種情況,具體的上漲和下跌幅度沒有考慮。在實(shí)際建模時(shí),必須考慮這些因素,并且對(duì)相關(guān)指數(shù)對(duì)應(yīng)的股票進(jìn)行迭代分析,計(jì)算多個(gè)時(shí)間周期的盈利率。若股票90%是上漲的,10%是下跌的,但90%的上漲幅度之和低于10%的下跌幅度之和,那么總收益還是負(fù)的?!耙辉滦?yīng)”美股數(shù)據(jù)表如圖1-15所示,對(duì)應(yīng)的數(shù)據(jù)文件為\zwpython\zw_k10\dat\mx_us.csv。圖1-15股市“一月效應(yīng)”美股數(shù)據(jù)表從圖1-15中可以看出,美股“一月效應(yīng)”最強(qiáng)的是十二月份,可能和圣誕假期有關(guān)系。從以上數(shù)據(jù)分析圖表我們可以看出,“一月效應(yīng)”的確存在,但并非指的就是“一月”,而是“二月”(中國(guó)A股)與“十二月”(美股)。通過不同的指數(shù)組合可以發(fā)現(xiàn),大企業(yè)等藍(lán)籌股的“一月效應(yīng)”更加明顯,中小企業(yè)創(chuàng)業(yè)板股票相對(duì)較弱。因此,對(duì)于各種投資策略絕對(duì)不能生搬硬套,要具體分析,根據(jù)實(shí)際分析的結(jié)果進(jìn)行決策。1.2.4案例分析:顏色表效果圖本節(jié)代碼請(qǐng)參看腳本文件\zwpython\zw_k10\k102m1cmap.py。本節(jié)程序源碼,在函數(shù)dr_cmap中,增加了一行繪圖語(yǔ)句:plt.axhline(50,color='r');上面的繪圖語(yǔ)句是在Y軸數(shù)值為50的地方繪制一條紅色分割線表示中線。本節(jié)案例使用colormap表現(xiàn)較弱,因此使用柱形圖來展現(xiàn)相關(guān)效果,部分運(yùn)行效果如圖1-16所示。在圖1-16中,可以挑選自己喜歡的顏色風(fēng)格。圖1-16股市“一月效應(yīng)”柱形圖效果此外,在目錄“x:\zwPython\zw_k10\pic\cormap”中也有相關(guān)的效果圖片。常用的顏色表有Accent、brg、coolwarm、Dark2、rainrow、gnuplot、hot、hsv、jet、prism、raibow和Set1。1.2.5“一月效應(yīng)”全文注解版Python源碼“一月效應(yīng)”全文注解版Python源碼是筆者舉辦的“量化培訓(xùn)班”學(xué)員(昵稱:“我怎能不戲貓”)在課件源碼的基礎(chǔ)上,根據(jù)自己的學(xué)習(xí)過程所做的修改。這個(gè)全文注解版本幾乎對(duì)每一行的代碼都進(jìn)行了詳細(xì)的中文解釋。這種注解版本非常少見,不但對(duì)Python量化初學(xué)者,而且對(duì)普通Python入門讀者都有很高的參考價(jià)值,故收錄于此。腳本文件名為\zwpython\zw_k10\k102m1_note.py。代碼如下:#-*-coding:utf-8-*-#zw量化開源團(tuán)隊(duì)#中文注釋“我怎能不戲貓”#importsysimportpandasaspdimportnumpyasnpimportzwSysaszw#::zwQTimportzwToolsaszwt#----------codedefzw_anz_m1sub(xcod,rss,monStr):#kstr表示月份fss=rss+xcod+".csv";print(fss)#文件名nSum,nAdd,nDec=0,0,0#輸入的月份數(shù),其中上升的月份,其中下跌的月份kmon=int(monStr);#當(dāng)前月print('@m1sub',kstr,fss)try:df=pd.read_csv(fss,index_col=0,parse_dates=[0],encoding='utf-8')#讀取文件,csv使用gbk編碼df=df.rename(columns={'Close':'close'});df=df.sort_index();#重命名close列;按指數(shù)(年月日)重新排序_tim0=df.index[0];_ynum0=_tim0.year;#解釋時(shí)間模式,yy/mm/dd,這里提取了第一年_tim9=df.index[-1];_ynum9=_tim9.year+1;#最后一年+1#print('@t',_tim0,_tim9)forynuminrange(_ynum0,_ynum9):#遍歷所有年份ystr=str(ynum);last_day=zwt.lastDay(ynum,kmon);#年份,每月最后一天的日期dayStr='%02d'%last_daymonStr1=''.join([ystr,'-',monStr,'-1'])#當(dāng)前月的第一天monStr9=''.join([ystr,'-',monStr,'-',dayStr])#當(dāng)前月的最后一天df2=df[(df.index>=monStr1)&(df.index<=monStr9)];#選取當(dāng)前月1號(hào)到月底之間的數(shù)據(jù)#print('@y',ystr1,ystr9,ystr,len(df2))if(len(df2)>0):#若存在交易日(處理月份用)_kmon5='%02d'%df2.index[0].month;#選取交易日期中的月份并轉(zhuǎn)為stringif(_kmon5==monStr):#若上述月份為函數(shù)輸入的變量xd1a=df2.ix[0];xd1z=df2.ix[-1];nSum+=1;#交易月份+1vd1a=xd1a['close'];vd1z=xd1z['close'];#選取收盤價(jià)位if(vd1z>vd1a):nAdd+=1#比較收盤價(jià)位,判定升跌else:nDec+=1;exceptIOError:pass;#skip,errorprint('nSum,nAdd,nDec,',nSum,nAdd,nDec);returnnSum,nAdd,nDec#返回值為交易月份數(shù)量,上升,下跌defzw_stk_anz_m01(qx,finx0,rss,ksgn):#對(duì)每只股票運(yùn)算上一個(gè)函數(shù)fss=qx.rdatInx+finx0+".csv";#stk_code.csv,inxYahoo.csvprint('f',fss)dinx=pd.read_csv(fss,encoding='utf-8')#讀取CSV文件print(dinx.head())print('f2',fss)mx1={};mx1['finx']=finx0;mx1['ksgn']=ksgn;mx1['nSum']=0;mx1['nAdd']=0;mx1['nDec']=0;#字典,賦值#nSum=0;nAdd=0;nDec=0;xn9=len(dinx['code']);mx1['nstk']=xn9;#所讀取的CSV文件的行數(shù)(code列的長(zhǎng)度)#遍歷CSV文件中的code名,i是計(jì)數(shù)器變量fori,xcodinenumerate(dinx['code']):if(notisinstance(xcod,str)):xcod="%06d"%xcod;dSum,dAdd,dDec=zw_anz_m1sub(xcod,rss,ksgn);mx1['nSum']=mx1['nSum']+dSum;mx1['nAdd']=mx1['nAdd']+dAdd;mx1['nDec']=mx1['nDec']+dDec;print(i,'/',xn9,xcod,mx1);#print('xn9',xn9);#print(len(mx1['nAdd']))mx1['kAdd']=np.round(mx1['nAdd']*100/mx1['nSum']);#指數(shù)上升頻率(估計(jì)概率)mx1['kDec']=np.round(mx1['nDec']*100/mx1['nSum']);#指數(shù)下降頻率(估計(jì)概率)returnmx1defzw_stk_anz_mx(qx,finx0,rss):#生成一個(gè)CSV文件c10=["finx","ksgn","nstk",'nSum','nAdd','nDec','kAdd','kDec'];#CSV文件的第一列df=pd.DataFrame(columns=c10);#定義dataframeftg="tmp\\mx_"+finx0+".csv";print(ftg)#打印CSV文件名foriinrange(12):ksgn="%02d"%(i+1);#ksgn=str(i+1);#ifi<9:ksgn='0'+ksgn;#1到12月#print(ksgn)mx1=zw_stk_anz_m01(qx,finx0,rss,ksgn);#利用上一個(gè)函數(shù)生成dataframeds1=pd.Series(mx1,index=c10);#生成一個(gè)pandas中的seriesds2=ds1.T;#.T=轉(zhuǎn)置(矩陣轉(zhuǎn)置)df=df.append(ds2,ignore_index=True);#在df中加上ds2df.to_csv(ftg,index=False,encode='utf8');#保存為CSV文件,utf8編碼defzw_stk_anz_mx_all(qx,xlst):#遍歷指定list中的股票forfxinxlst:if(fx.find('Yah')>0):#rss=qx.rZWusDayrss=qx.rdat+'\\us\\day\\'else:if(fx=='inx_code'):rss=qx.rdat+'\\cn\\xday\\'#rss=qx.rZWcnXDayelse:rss=qx.rdat+'\\cn\\day\\'#rss=qx.rZWcnDayfinx0=fx;#生成文件名zw_stk_anz_mx(qx,finx0,rss);#用上一個(gè)函數(shù)生成CSV文件#============mainqx=zw.zwDatX(zw._rdat0);uslst=['inxYahoo30sp','inxYahoo100ns','inxYahoo100sp','inxYahoo600','inxYahoo500sp','inxYahoo']zw_stk_anz_mx_all(qx,uslst)cnlst=['inx_code','stk_sz50','stk_hs300','stk_zz500','stk_code','stk_code'];zw_stk_anz_mx_all(qx,cnlst)案例“一月效應(yīng)”主程序很簡(jiǎn)單,如圖1-17所示為主程序流程圖。圖1-17主控程序流程圖初始化變量qx先設(shè)置美股股票代碼索引文件參數(shù)變量uslst,調(diào)用分析函數(shù):zw_stk_anz_mx_all設(shè)置中國(guó)A股股票代碼索引文件參數(shù)變量cnlst,調(diào)用分析函數(shù)zw_stk_anz_mx_all案例“一月效應(yīng)”,重點(diǎn)在于幾個(gè)自定義函數(shù):zw_stk_anz_mx_all(qx,xlst):遍歷指定xlst中的股票zw_stk_anz_mx(qx,finx0,rss):根據(jù)finx0股票指數(shù)文件,統(tǒng)計(jì)分析12個(gè)月各個(gè)月的具體數(shù)據(jù)zw_stk_anz_m01(qx,finx0,rss,ksgn):根據(jù)finx0股票指數(shù)文件,分析單個(gè)月的數(shù)據(jù)zw_anz_m1sub(xcod,rss,kstr):根據(jù)xcod具體股票代碼,分析單只股票單個(gè)月
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度養(yǎng)老院護(hù)理服務(wù)與設(shè)施租賃合同3篇
- 2025年度土地流轉(zhuǎn)與農(nóng)業(yè)廢棄物綜合利用合同3篇
- 2025年度綠色能源補(bǔ)貼合同范本2篇
- 2025年度汽車4S店店面租賃及品牌運(yùn)營(yíng)合同3篇
- 二零二四醫(yī)院護(hù)士勞動(dòng)合同樣本:醫(yī)院護(hù)理團(tuán)隊(duì)人員勞動(dòng)合同3篇
- 2025年度債務(wù)重組與財(cái)產(chǎn)分配稅務(wù)籌劃合同3篇
- 二零二五版高端別墅租賃管理服務(wù)合同2篇
- 2024知名品牌授權(quán)使用及銷售代理合同
- 2024食堂人員安全生產(chǎn)責(zé)任與聘用合同3篇
- 2024貼磚勞務(wù)分包合同施工質(zhì)量監(jiān)督協(xié)議3篇
- 2025年湖北武漢工程大學(xué)招聘6人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 【數(shù) 學(xué)】2024-2025學(xué)年北師大版數(shù)學(xué)七年級(jí)上冊(cè)期末能力提升卷
- GB/T 26846-2024電動(dòng)自行車用電動(dòng)機(jī)和控制器的引出線及接插件
- 遼寧省沈陽(yáng)市皇姑區(qū)2024-2025學(xué)年九年級(jí)上學(xué)期期末考試語(yǔ)文試題(含答案)
- 2024年國(guó)家工作人員學(xué)法用法考試題庫(kù)及參考答案
- 妊娠咳嗽的臨床特征
- 國(guó)家公務(wù)員考試(面試)試題及解答參考(2024年)
- 《阻燃材料與技術(shù)》課件 第6講 阻燃纖維及織物
- 2024年金融理財(cái)-擔(dān)保公司考試近5年真題附答案
- 泰山產(chǎn)業(yè)領(lǐng)軍人才申報(bào)書
- 高中語(yǔ)文古代文學(xué)課件:先秦文學(xué)
評(píng)論
0/150
提交評(píng)論