Python量化交易基础讲堂-可视化随机漫步轨迹

在《Python实战-构建基于股票的量化交易系统》小册子的《前置基础:由例程快速入门经常使用数据分析工具》小节咱们用到了一副插图:数组

这里咱们结合小册中Numpy、Matplotlib库的使用,用Python的方式来介绍下如何绘制随机漫步轨迹,以及如何从统计学的角度去预测随机漫步的股价。dom

早在1990年,巴黎一位博士生路易斯·巴舍利耶(1887—1946)跟踪当时巴黎股市起伏,指望用数学工具来描述股价变更过程。在他的论文《投机理论》中指出,股票价格的平常变更从根本上说是不可预知的,相似于”布朗运动”那样属于随机游走,没有任何规律可循。就比如一我的购买一只股票后当即将其卖掉,那么他输赢的几率是相等的。函数

数学的奇妙之处就在于,咱们能够把股票的不可预知性变为可预知。最经典的例子便是模拟醉汉的随机漫步:假设一名醉汉喝醉了酒,从一个路灯下开始漫无目的地行走。每一步便可能前进也可能后退也可能拐弯。那么通过必定时间以后,这名醉汉的位置在哪里呢?工具

咱们使用numpy.random.randint(low, high=None, size=None, dtype=’l’)函数产生随机数。spa

  • 返回随机整数,范围区间为[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]] """
复制代码

为了便于理解,咱们将醉汉的移动简化为一维的移动,规定他只能在一条直线上随机前进或者后退。计算获得醉汉随机游走轨迹的代码以下所示: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

真实的几率分布用数学公式来精确计算,这就是量化交易的精髓所在。量化交易的鼻祖级大神爱德华·索普就是利用这种随机游走模型的思想,推算出认股权证在合约兑现的那一天相对应的股票的价格的几率分布,从而计算出当前认股权证的价格是太高仍是太低,而后再利用凯利公式,进行买卖。

关于完整代码能够加入小册交流群获取。更多的量化交易内容欢迎你们订阅小册阅读!!

相关文章
相关标签/搜索