在《Python實戰-構建基於股票的量化交易系統》小冊子的《前置基礎:由例程快速入門經常使用數據分析工具》小節咱們用到了一副插圖:數組
這裏咱們結合小冊中Numpy、Matplotlib庫的使用,用Python的方式來介紹下如何繪製隨機漫步軌跡,以及如何從統計學的角度去預測隨機漫步的股價。dom
早在1990年,巴黎一位博士生路易斯·巴舍利耶(1887—1946)跟蹤當時巴黎股市起伏,指望用數學工具來描述股價變更過程。在他的論文《投機理論》中指出,股票價格的平常變更從根本上說是不可預知的,相似於」布朗運動」那樣屬於隨機遊走,沒有任何規律可循。就比如一我的購買一隻股票後當即將其賣掉,那麼他輸贏的機率是相等的。函數
數學的奇妙之處就在於,咱們能夠把股票的不可預知性變爲可預知。最經典的例子便是模擬醉漢的隨機漫步:假設一名醉漢喝醉了酒,從一個路燈下開始漫無目的地行走。每一步便可能前進也可能後退也可能拐彎。那麼通過必定時間以後,這名醉漢的位置在哪裏呢?工具
咱們使用numpy.random.randint(low, high=None, size=None, dtype=’l’)
函數產生隨機數。spa
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]] """
複製代碼
爲了便於理解,咱們將醉漢的移動簡化爲一維的移動,規定他只能在一條直線上隨機前進或者後退。計算獲得醉漢隨機遊走軌跡的代碼以下所示:3d
draws = np.random.randint(0, 2, size=nsteps)
steps = np.where(draws > 0, 1, -1)
walk = steps.cumsum()
複製代碼
咱們用matplotlib.pyplot.plot()函數繪製出醉漢從0軸開始隨機遊走2000步的模擬軌跡圖形,以下所示:code
因爲醉漢的每一步都是徹底隨機的,所以他最終準確位置是不可能被算出來的,就像天天的股票價格變更同樣是不可預知的。可是,從統計學的角度來看,這名醉漢最終的位置的機率分佈倒是能夠計算出來的。接下來,咱們用1000次隨機漫步來看下結果,咱們把隨機漫步軌跡的計算封裝爲函數random_walk(),以下所示:orm
_ = [plt.plot(np.arange(2000), random_walk(nsteps=2000), c='b', alpha=0.05) for _ in np.arange(0,1000)]
複製代碼
模擬醉漢從0軸開始1000次隨機遊走2000步的模擬軌跡圖形,以下所示: cdn
圖中咱們直觀地觀察出隨機遊走的發展狀況,每一條淡淡的藍線就是一次模擬,橫軸爲行走的步數,縱軸表示離開起始點的位置。藍色越深,就表示醉漢在對應行走了對應的步數以後,出如今此位置的機率越大,可見隨着醉漢可能出現的位置的範圍不斷變大,可是距離起始點越遠的位置機率越小。blog
真實的機率分佈用數學公式來精確計算,這就是量化交易的精髓所在。量化交易的鼻祖級大神愛德華·索普就是利用這種隨機遊走模型的思想,推算出認股權證在合約兌現的那一天相對應的股票的價格的機率分佈,從而計算出當前認股權證的價格是太高仍是太低,而後再利用凱利公式,進行買賣。
關於完整代碼能夠加入小冊交流羣獲取。更多的量化交易內容歡迎你們訂閱小冊閱讀!!