歡迎大家訂閱《Python實戰-構建基於股票的量化交易系統》小冊子,小冊子會陸續推出與小冊內容相關的專欄文章,對涉及到的知識點進行更全面的擴充套件介紹。本篇專欄為小冊子內容的加推篇!!!
前言
在小冊子的《前置基礎:NumPy模擬隨機漫步理論》小節我們用到了一副插圖:
早在1990年,巴黎一位博士生路易斯·巴舍利耶(1887—1946)跟蹤當時巴黎股市起伏,期望用數學工具來描述股價變動過程。在他的論文《投機理論》中指出,股票價格的日常變動從根本上說是不可預知的,類似於”布朗運動”那樣屬於隨機遊走,沒有任何規律可循。就好比一個人購買一隻股票後立即將其賣掉,那麼他輸贏的概率是相等的。
數學的奇妙之處就在於,我們可以把股票的不可預知性變為可預知。最經典的例子即是模擬醉漢的隨機漫步:假設一名醉漢喝醉了酒,從一個路燈下開始漫無目的地行走。每一步即可能前進也可能後退也可能拐彎。那麼經過一定時間之後,這名醉漢的位置在哪裡呢?
這裡我們結合小冊中Numpy、Matplotlib庫的使用,用Python的方式來介紹下如何繪製隨機漫步軌跡,以及如何從統計學的角度去預測隨機漫步的股價。
生成隨機漫步陣列
我們使用numpy.random.randint(low, high=None, size=None, dtype=’l’)
函式產生隨機數。
- 返回隨機整數,範圍區間為[low,high),包含low,不包含high
- 引數:low為最小值,high為最大值,size為陣列維度大小,dtype為資料型別,預設的資料型別是np.int
- high沒有填寫時,預設生成隨機數的範圍是[0,low]
print("np.random.randint:\n {}".format(np.random.randint(1,size=5)))# 返回[0,1)之間的整數,所以只有0
"""
np.random.randint:
[0 0 0 0 0]
"""
print("np.random.randint:\n {}".format(np.random.randint(1,5)))# 返回1個[1,5)時間的隨機整數
"""
np.random.randint:
2
"""
print("np.random.randint:\n {}".format(np.random.randint(-5,5,size=(2,2))))
"""
np.random.randint:
[[-5 -3]
[ 2 -3]]
"""
複製程式碼
視覺化隨機漫步軌跡
為了便於理解,我們將醉漢的移動簡化為一維的移動,規定他只能在一條直線上隨機前進或者後退。計算得到醉漢隨機遊走軌跡的程式碼如下所示:
draws = np.random.randint(0, 2, size=nsteps)
steps = np.where(draws > 0, 1, -1)
walk = steps.cumsum()
複製程式碼
我們用matplotlib.pyplot.plot()函式繪製出醉漢從0軸開始隨機遊走2000步的模擬軌跡圖形,如下所示:
由於醉漢的每一步都是完全隨機的,因此他最終準確位置是不可能被算出來的,就像每天的股票價格變動一樣是不可預知的。但是,從統計學的角度來看,這名醉漢最終的位置的概率分佈卻是可以計算出來的。接下來,我們用1000次隨機漫步來看下結果,我們把隨機漫步軌跡的計算封裝為函式random_walk(),如下所示:
_ = [plt.plot(np.arange(2000), random_walk(nsteps=2000), c='b', alpha=0.05) for _ in np.arange(0,1000)]
複製程式碼
模擬醉漢從0軸開始1000次隨機遊走2000步的模擬軌跡圖形,如下所示:
圖中我們直觀地觀察出隨機遊走的發展情況,每一條淡淡的藍線就是一次模擬,橫軸為行走的步數,縱軸表示離開起始點的位置。藍色越深,就表示醉漢在對應行走了對應的步數之後,出現在此位置的概率越大,可見隨著醉漢可能出現的位置的範圍不斷變大,但是距離起始點越遠的位置概率越小。
總結
真實的概率分佈用數學公式來精確計算,這就是量化交易的精髓所在。量化交易的鼻祖級大神愛德華·索普就是利用這種隨機遊走模型的思想,推算出認股權證在合約兌現的那一天相對應的股票的價格的概率分佈,從而計算出當前認股權證的價格是過高還是過低,然後再利用凱利公式,進行買賣。
更多的量化交易內容歡迎大家訂閱小冊閱讀!!同時也歡迎大家關注我的微信公眾號【元宵大師帶你用Python量化交易】瞭解更多Python量化交易相關內容