- D1 - 1.數據分析秘笈介紹
- D1 - 2.修煉前的準備-環境搭建
- D1 - 3.numpy數組三種神秘創建方式
- D1- 4.numpy爆破屬性
- D1 - 5.numpy炸天之索引和切片
- D1 - 6.統計&聚合&矩陣操作
- D2 - 1.df的前世之Series
- D2 - 2.Series的進化之DataFrame
- D2 - 3.df大殺器之索引&切片
- D3 - 1.股票數據預處理
- D3 - 2.捕獲股票上漲的日期
- D3 - 3.捕獲股票跌幅的日期
- D3 - 4.股票買賣收益分析
- D4 - 1.雙均線策略-均線的計算分析
- D4 - 2.雙均線策略-金叉&死叉
- D4 - 3.雙均線策略的測試
- D5 - 1.缺失值的清洗
- D5 - 2.清洗空值面試題
- D5 - 3.重復值和異常值的清洗
- D6 - 1.DataFrame的級聯操作
- D6 - 2.DataFrame合并
- D7 - 1.人口分析項目實現01
- D7 - 2.人口分析項目實現02
- D8 - 1.pandas高級操作之映射
- D8 - 2.pandas高級操作之分組聚合
- D8 - 3.pandas高級操作-透視表&交叉表
- D9 - 政治獻金數據分析
- D10 - 繪圖操作
- D10 - 1.項目介紹
- D10 - 2.數據的預處理
- D10 - 3.按月數據分析
- D10 - 4.用戶個體消費分析
- D10 - 5.用戶消費行為分析
- D10 - 6.用戶生命周期分析
- D10 - 繪圖操作
- D11 - 01金融量化分析-基本金融知識介紹
- D11 - 02金融量化分析-股票基本知識和股票分類
- D11 - 03金融量化分析-股票市場構成
- D11 - 04金融量化分析-影響股價因素&股票買賣知識
- D11 - 05金融量化分析-金融分析
- D12 - 01金融量化分析-金融量化投資介紹
- D12 - 02金融量化分析-量化投資與Python&ipython初識
- D12 - 03金融量化分子-ipython魔術命令
- D12 - 04金融量化分析-ipython高級功能
- D12 - 05金融量化分析-numpy-array基礎
- D12 - 06金融量化分析-numpy-array創建
- D12 - 07金融量化分析-numpy-array索引和切片
- D12 - 08金融量化分析-numpy-array布爾型索引
- D12 - 09金融量化分析-numpy-array花式索引
- D12 - 10金融量化分析-numpy-array通用函數
- D13 - 16金融量化分析-numpy-統計方法和隨機數生成
- D13 - 17series介紹
- D13 - 18series整數索引問題
- D13 - 19series數據對齊
- D13 - 20series缺失值處理
- D13 - 21series小結
- D13 - 22DataFrame的創建
- D13 - 23DataFrame常用屬性
- D14 - 24DataFrame索引和切片
- D14 - 25DataFrame數據對齊與缺失數據處理
- D14 - 26pandas常用函數
- D14 - 27時間處理對象
- D14 - 28時間對象生成
- D14 - 29時間序列
- D14 - 30文件讀取
- D14 - 31文件操作3+pandas收尾
- D14 - 33matplotlib介紹
- D14 - 34plot函數周邊
- D14 - 35pandas與Matplotlib
- D14 - 36使用matplotlib繪制數學函數圖像
- D14 - 37matplotlib 畫布與子圖
- D14 - 38matplotlib 柱狀圖和餅圖
- D14 - 39matplotlib K線圖
- D15 - 40tushare包介紹
- D15 - 41股票分析作業說明
- D15 - 42股票分析作業
- D15 - 43雙均線分析作業說明
- D15 - 44雙均線分析作業1
- D15 - 45雙均線分析作業2
- D16 - 47 第一個量化策略-1
- D16 -48 第一個量化策略-2
- D16 -49 第一個量化策略-3
- D16 -50 第一個量化策略-4
- D17 -51 雙均線策略-1
- D17 -52 雙均線策略-2
- D17 -53 因子選股策略-1
- D17 -54 因子選股策略-2
- D17 -55多因子選股策略
- D17 -56多因子選股策略實現
- D17 -57均值回歸理論講解
- D17 -58均值回歸理論實現
- D18 -59布林帶策略
- D18 -60布林帶策略實現
- D18 -61PEG策略
- D18 -62PEG策略實現
- D18 -63動量策略vs反轉策略
- D18 -64羊駝交易法則
- D18 -65簡易回測框架介紹
從程序員視角理解量化交易
量化交易屬于人工智能的一個應用分支,它利用計算機強大運算能力,用數學模型來模仿人的思維作出決策,通過數據建模、統計學分析、程序設計等工具從股票、債券、期貨的歷史數據分析中得到大概率下獲利的交易策略。
這么說有些官方,聽起來有些繞口,其實往簡單地說就是如何管理輸贏的概率,如何幫助我們做出準確的決策,比如像玩德州撲克牌那樣,當你持有的牌可以掌握勝算時便跟進,否則便蓋牌,沒贏錢的勝算咱們選擇不玩。
玩牌時勝算的概率在我們的大腦中時刻不停地計算著,而在量化交易中利用的是計算機、數學建模、程序設計這些更高級的手段,目的是為了高效快速地獲得勝算的概率,并依據概率去做出決策。
接下來我們用一個簡單的市場模型來介紹下量化交易的本質,這個模型是用Python實現的。win_rate為勝率、play_cnt為參與局數、stock_num為股票數量、commission為手續費。
假設我們投資的市場是一個具備短線交易特征的市場,可以不分晝夜的不停交易,而且還不需要交手續費。那么我們的初始資金是1000元,每次隨機的買9個股票,如果有一半以上的股票漲了的話,我們暫定賺1元,否則一半以上的股票跌了,我們就虧一元。由于我們是隨機買的,那么贏錢的概率為50%。我們邀請50個人參與1000局看下效果:
結果還不錯,虧錢的人和賺錢的人基本一半一半,符合零和游戲的特征。不過市場要經營是需要有收入的,那么就需要對交易收取手續費,為了更直觀的比較出手續費對交易的影響,我們假定每次交易的手續費為0.1元。我們邀請50個人參與1000局看下效果:
很不幸的是零和游戲變成了負和游戲,沒有一個人是賺錢的,大家都虧錢了,當局數再增大以后的結局一定是血本無歸。市場是一定會有手續費的,那我們就這么心甘情愿的當韭菜嗎?
如果我們想盈利的話就只能期待每局上漲的概率大于50%時才參與,否則不參與就不會虧錢了,并且每局贏的錢要比虧的錢多。其實這些需求映射到量化交易之中就是策略回測、倉位管理、止盈止損這些功能。那么我們改變概率這個因子,將它放大到55%,我們邀請50個人參與1000局看下效果:
看來結果還不錯,只要增加盈利的概率,就可以在市場中獲得收益。其實股票交易和玩一個游戲、做一個項目理念上是相通的,需要章法、需要制定策略,否則就和拋硬幣賭博一樣的,用量化交易可以幫助我們管理好概率,更理性的去下單!因此通過量化交易管理虧盈的概率,能夠更理性的將股票投資作為理財的一個手段。
也許大家會覺得以上的市場模型每次都是獨立事件,概率上沒有連續性。股票和期貨市場的每次下注的結果是有連續性的,并不是純隨機的獨立事件。事實上我們真的不能確定明天的具體價格,不過量化交易的精髓在于,它能從歷史數據中得到大概率下獲利的策略。
有研究稱股票每天的價格變動就像醉漢行走一樣不可預知,那么我們假設一名喝醉了酒的醉漢,從一個路燈下開始漫無目的地行走,每一步即可能前進也可能后退也可能拐彎。那么經過一定時間之后,這名醉漢的位置在哪里呢?
為了便于理解,我們將醉漢的移動簡化為一維的移動,規定他只能在一條直線上隨機前進或者后退。我們使用numpy.random.randint()函數來產生2000個隨機數,作為隨機游走的路線,實現代碼如下所示:
draws = np.random.randint(0, 2, size=2000)
然后使用matplotlib.pyplot.plot()函數繪制出醉漢從0軸開始隨機游走2000步的模擬軌跡圖形,如圖所示:
由于醉漢的每一步都是完全隨機的,因此他最終準確的位置無法被預測出,就像每天的股票價格變動一樣是不可預知的。但是,量化交易會從統計學的角度去分析問題,我們用1000次隨機漫步來模擬醉漢從0軸開始1000次隨機游走2000步的模擬軌跡圖形,如圖所示:
從統計學的角度來看,這名醉漢最終的位置的概率分布卻是可以計算出來的。圖中我們直觀地觀察出隨機游走的發展情況,每一條淡淡的藍線就是一次模擬,橫軸為行走的步數,縱軸表示離開起始點的位置。藍色越深,就表示醉漢在對應行走了對應的步數之后,出現在此位置的概率越大,可見隨著醉漢可能出現的位置的范圍不斷變大,但是距離起始點越遠的位置概率越小。
于是我們聯想到正態分布。正態分布描述的是某件事出現不同結果的概率分布情況,它的概率密度曲線的形狀是兩頭低,中間高,左右對稱呈鐘型,與我們模擬的隨機漫步圖很相似。
我們使用matplotlib.pyplot庫中的hist()函數將隨機漫步的位置繪制為直方圖。如圖所示:
從圖中的顯示可知醉漢的行走軌跡在一定意義上是符合正態分布的。正態分布現象在現實中意義重大,在自然界、人類社會、心理學等領域的大量現象中都服從或者近似服從正態分布,比如人們能力的高低,身高、體重等身體的狀態,學生成績的好壞,人們的社會態度、行為表現等等。
數學的奇妙之處就在于,我們可以把不可預知性變為可預知。量化交易的精髓就是用數學公式來精確計算真實的概率分布,以應對不確定性。
普及股票基礎知識及漲跌邏輯
股票是股份公司發行的所有權憑證,是股份公司為籌集資金而發行給各個股東作為持股憑證并借以取得股息和紅利的一種有價證券。每股股票都代表股東對企業擁有一個基本單位的所有權。
股票發行是在一級市場進行的,投資者買賣交易的是二級市場,也稱股票交易市場,它是投資者之間買賣已發行股票的場所。二級市場為股票創造流動性,能夠迅速脫手換取現值。因為能賺錢,所以這也是投資者熱衷于分析股票漲跌的原因。
關于股票漲跌的因素,其實驅動股票漲跌的因素無外乎這五個方面:公司自身的發展、市場估值變化、宏觀經濟前景、行業發展環境、政治上的變化。
公司自身發展的因素是決定股票價值最基本的因素,主要取決于發行公司的經營業績、資信水平、股息紅利派發狀況、領導者的決策、經營管理情況、公司發展的前景、公司核心競爭力、公司的背景等。
市場估值變化受到投資者的動向的影響,包括交易的流動性、群體性交易情緒、市場熱錢的流向、大戶的意向和操縱等。
宏觀經濟前景包括國家的財政狀況,經濟的增速情況、通貨膨脹的情況、國家匯率的調整、世界經濟的形式等。比如利率下降,存款準備金率下調,很多游資會從銀行轉向股市,股價往往會出現升勢;國家抽緊銀根,市場資金緊缺,利率上調,股價通常會下跌。
行業發展環境主要包括行業在國民經濟中地位的變更,這會引起國家支持力度的變化,行業的發展前景、所處發展階段、發展潛力、競爭度,新興行業引來的沖擊等,以及上市公司在行業中所處的位置,經營業績,經營狀況,資金組合的改變及領導層人事變動等都會影響股票的價格。
政治變化是指國家的政策調整或改變,領導人更迭,國際政治的變動,國家間發生戰事,某些國家發生勞資糾紛甚至罷工風潮等導致股價波動。
市場中成千上萬的專業人士會對以上因素進行詳細的分析,對于中小股民來說,技術指標分析會比基本面分析似乎更靠譜些。因為以中小股民的能力是很難解讀政策層面實質性是利好還是利空,利好多大,利空多大,也無法了解上市公司內部運營的實質狀況,發布的公告對股價的影響有多大。而股價的走勢則涵蓋了所有的盤面信息,當主力做多,表明有資金進場,此時一切指標都會走好,我們只需要跟著主力進場就行,當資金離場時一切指標都會走壞,我們也只需要跟著主力離場即可。
如何用Python獲取股票數據
既然是金融數據的分析,那么第一步獲取數據很重要。目前,獲取股票數據的渠道有很多,而且基本上是免費的,比如同花順、東方財富這些行情軟件,新浪財經、騰訊財經、和訊網這些門戶網站。
Python也有不少免費的開源API可以獲取交易行情數據,比如pandas專門處理金融數據模塊pandas-datareader、tushare、baostock等。這樣無需使用Python網絡爬蟲,可以節省不少精力。
這里推薦使用tushare獲取股票交易數據,基本上tushare記錄了股票自上市之日起所有的日交易數據,而baostock最早記錄的數據是2006年,總的來說tushare是目前分析國內A股、期貨等比較好用的開源接口。
目前團隊推出了Tushare Pro版本,這個版本相比于舊版本來說數據更加穩定、質量也更好了,使用的話需要先注冊獲取TOKEN憑證,不過舊版本仍然可以使用,只是團隊不再維護數據獲取的接口。
下圖是使用pro.index_daily()接口獲取上證綜指2003年至2018年日交易數據,結合可視化方法對指數走勢進行分析?梢钥吹焦芍阜謩e在2005-2007年和2014-2015年有兩波大牛市,然后又從高峰跌入谷底,目前處于下跌通道,期待下一次大牛市。
獲取到大量的股票數據,可以用數據庫來高效地管理。目前流行的數據庫有Oracle、MySQL、MongoDB、Redis、SQLite……關于數據庫的選型通常取決于性能、數據完整性以及應用方面的需求。
如果我們僅僅是用于本地的數據管理,無需多用戶訪問,數據容量小于2T,無需海量數據處理,關鍵是要求移植方便、使用簡單、處理迅速的話, SQLite確實是個很不錯的選擇。
Python 2.5.x 以上版本默認內置SQLite3,無需單獨安裝和配置,直接使用就行。
建立了本地SQLite數據庫,可以進一步查詢和操作。比如查詢股價日漲幅超過5%的個股在19年1月至2月的分布。如下所示:
除了獲取行情數據,我們也需要尋找宏觀經濟、行業、公司相關的信息,這些信息是驅動股票漲跌的因素。關于這些信息,我們可以通過爬蟲的方式去各大網站和論壇獲取。這里我們列出一部分信息來源:
政府網站:國家統計局、工業和信息化部、財政部、中國人民銀行……
證券官方網站:上海證券交易所、深圳證券交易所、證監會、證券業協會……
信息披露網站:東方財富網、巨潮資訊網……
股票論壇:點金投資家園、股天下、MACD股票論壇、創幻論壇、和訊股吧、東方財富股吧
量化交易的Python庫有哪些
量化交易的第三方Python庫是為了實現量化交易的需求而封裝的,以下是量化交易初級入門所設計到的一些功能和基礎工具。
我們對這些第三方庫的應用場景簡單地做個介紹,后續大家在需要使用的時候,可以有側重地去查找相關資料:
Matplotlib——應用于可視化繪圖
Bokeh——應用于Web交互式可視化繪圖
WxPython——應用于創建本地GUI界面
Urllib3——應用于HTTP客戶端網絡請求
Numpy——應用于科學計算
Pandas——應用于金融數據分析
Statsmodels——應用于統計模型和分析
TA-Lib——應用于金融技術指標計算
Tushare——應用于財經數據的獲取
Django——應用于Web框架的搭建
scrapy——應用于爬蟲框架的搭建
初學者入門的話可以先開發一個桌面版的股票行情界面:
關于這幅界面的實現,我們簡單地介紹下方法,主要包括:
使用TuShare、Pandas庫來獲取金融數據;
使用Pandas、Numpy庫對原始數據進行規整化的處理;
使用Talib庫從原始數據計算出均線、MACD、KDJ指標;
使用Matplotlib庫實現股票技術指標的可視化圖形;
使用WxPython庫實現GUI界面的交互;
再比如可以使用Urllib3、scrapy庫爬取東方財富網的財經數據,作為量化分析的基礎數據。
圖片描述
概述股票量化交易的基本過程
最后我們概述下量化交易的基本過程。當然實際上這個過程并沒有以下流程圖顯示的那么簡單,這里只是讓大家有個整體的概念。
首先是把歷史行情、基本面信息、新聞資訊等數據進行初步清洗和處理,而后輸入到量化模型中。
量化模型包括了數學建模、編程設計等工具所形成的交易策略,通過分析這些數據最終產生出交易的信號,比如買什么股、什么時候買、買多少、什么時候賣等信息。
分解量化模型可以看到模型是通過各種策略來實現的,常見的策略有均線策略、Alpha策略、布林帶策略、海龜策略、動量策略等等,也包括自主開發的策略,不過要良心的聲明下凡事公開的、用的人多的策略,基本也就不賺錢了,當然并不影響我們學習這些策略從中借鑒其中的精髓,站在巨人的肩膀上看問題。
策略層再往下分解則是我們熟悉的Pyhon、Pandas、Matplotlib、Numpy、統計學、數學模型這些基礎工具。
關于上圖的回測階段,我們要提一下。當我們制定了一個交易策略后,我們并不能立即將該策略應用于實盤交易之中,原因很簡單,我們無法評價該策略的具體效果如何。對此,我們需要將策略基于一段歷史股票數據進行模擬的買入和賣出,以驗證交易策略的可行性,我們稱這個環節為“回測階段”。
在回測階段,策略的收益和風險是度量策略效果非常關鍵的兩個指標,比如我們將N日突破擇時策略應用在華勝天成股票上時,可以通過直觀的圖形分析來了解下策略的執行效果。如下所示: