python金融大数据分析
1.1.1 python简史
Python 对于某些人来说可能还是个新事物,但是官已经出现了很长时间。 实际上,早在20 世纪80 年代,荷兰人Guido van Rossum 就开始了开发工 作他现在仍然活跃于Python开发 中 ,被python 社区授予"仁慈独裁者"的称 号( lwiki/History_of_Python ) 。 下面是 python 开发的里程碑:
第一章 为什么将Python用于金融
2019.9. 邹绵璐
1.1 python是什么?
Python是一种高级的多用途编程语言,广泛用于各种非技术和技术领域。 Python是一种具备动态语义。面向对象的解释型高级编程语言。它的高 级内建数据结构和动态类型及动态绑定相结合,使其在快速应用开发上 极具吸引力,也适合作为脚本或者“粘合语法强调可读性,因此可以降低程序维护成本。 Python支持模块和软件包,鼓励模块化和代码重用。Python解释程序和 大量标准款可以源代码或者二进制形式免费获取,用于所有主要平台, 并且可以随意分发。
3 计算到期时期权的所有内在价值hT(i)=max((ST(i)-K, 0).
4 通过公式1-2 中给出的蒙特卡洛估算函数估算期权现值.
将问题和算法翻译成代码形式,也可以利用jupyter跟踪单独的步骤:
从参数开始:
S0 = 0
K = 105
T = 1.0
r = 0.05
sigma = 0.2
在接下来的估值算法中,要使用Numpy,这是一个向量化操作。
ST
S0
exp
r
12
2
T
Tz
(1-1)
公式1-2 欧式看期权的蒙特卡洛估算方法:
C0
erT
1 I
l
hT (i)
(1-2)
蒙特卡洛估值算法描述:
1 从正太分布中取得I个伪随机数z(i),i 属于{1, 2,..., I}.
2 为给定的z(i)和公式1-1计算所有到期指数水平ST(i).
1.1.1 python简史 值得注意的是,有两个可用的主要版本仍然在开发之中,更重要的是,它 们从2008 年起并行使用,这有时候令Python 初学者感到困惑。到本书编 著之时,这种情况已经持续(一段时间,因为两个版本之间没有100%的代码 兼容性,而且不是所有流行程序库都可以用于Python 3.x 大部分可用和生 产代码仍然是用Python 2.6/2.7 编写的。本书基于2.7.x 版本,但是大部 分代码示例应该可以在3.x 版本上运行。
1.1.2 python用户谱系
Python 不仅对专业软件开发人员布吸引力,临时开发人员初领域专家、科研开发人 员也使用它。
专业软件开发人员寻求高效构建大型应用程序所帘的一切工具Python 支持几乎所有 编再范式;有强大的开发工具;从理论上说,Python可以对付任何丁作。这些类型的 用户通常构建自己的框架和类,也依靠基础的Python 和科学校进行工作,并且尽最 大的努力利用生态系统。
有三个方面的注意: 语法 翻译 向量化
print(“value of the euopean call option %5.3f % C0”)
例 1-1 欧式看涨期权的蒙特卡洛估值
import math import numpy as np
# Parameter Values S0 = 100. # initial index level K = 105. # strike price T = 1.0 # time-to-maturity r = 0.05 # riskless short rate sigma = 0.2 # volatility I = 100000 # number of simulations
1.2 金融中的科技
金融行业有一个方面最受科技进步的影响:金融交易决策和l执行的速度及频率Lewis 最近的著作( 2014 )生动而详细地描述了所谓的"闪电交易"——也就是以可能的鼓 高速度进行的交易。 一方面,可用数据的尺度越来越小使实时反应成为必需的能力。另一方面,交易的述 度和频率的提高使数据最进一步增大。这两方面相互补充,推动了金融交易平均时间 标度的系统性下降.
1.1.3 科学栈
NumPy () NumPy 提供多维数组对象,以存储同间构或者异构数据;它还提供操作这一数到对 象的优化两数/方法。 SciPy () SciPy是一组子库和函数,实现科学或者金融中常常需要的重要标准功能;例如,可 以找到三次样条插值和数值积分的函数. Matplotlib () Matplotlib是最流行的Python 绘图和可视化库,提供2D和3D可视化功能 PyTables () PyTables 是流行的I lDF5 数据存储库封装器(/HDF5/); 这个库实现基于层次数据库/文件格式的优化磁I/O 操作. pandas () pandas 在NumPy 基础上构建,提供更丰富的时间序列和表格数据管理及分析类; 它与Matlotlib 在绘图上、与PyTables 在数据布储和读取上紧密集成。
from numpy import *
I = 100000
z = random.standardnormal(I) ST = S0*exp((r-0.5*sigma**2)*T+sigma*sqrt(T)*z) hT = maximum(ST-K, 0) C0 = exp(-r*T)*sum(hT)/I 打印结果
ST
S0
exp
r
1
2
2
T
Tz
C0
erT
1 I
l
hT (i)
# Valuation Algorithm z = np.random.standard_normal(I) # pseudo-random numbers # index values at maturity ST = S0 * np.exp((r - 0.5 * sigma ** 2) * T + sigma * math.sqrt(T) * z) hT = np.maximum(ST - K, 0) # payoff at maturity C0 = math.exp(-r * T) * np.mean(hT) # Monte Carlo estimator
• 1991 年发行的Python 0.9.0 (第一个友行版本); • 1994 年发行的P严hon 1.0; • 2000 年发行的Python 2.0; • 2008 年发行的Python 2.6; • 2010 年发行的Python 2.7; • 2008 年发行的Python 3.0; • 2010 年发行的P严hon 3.3; • 2014 年发行的Python 3.4
假定我们使用如下数值化参数进行估值: ·初始化股票指数水平S0=100; ·欧式看涨期权的行权价格 K=105; ·到期时间T=1年; ·固定物风险短期利率 r=5%; ·固定波动率 =20%
在BSM模型中,到期指数水平是一个随机变量。由公式1-1给出,其中z 是一个标
准正态分布的随机变量。
公式1-1 Black-Scholes-Merton 到期指数水平:
4、多用途 Python可以用于快速交互式代码开发,也可以用于构建大型应用程序;它可以用于低 级系统操作,也可以承担高级分析任务。
5、跨平台 Python可用于大部分重要的操作系统,如Windows、Linux、Mac OS;它用于构建桌 面应用和web 应用;可以在最大的集群和最强大的服务器上使用,也可以在树莓派 这样的小设备上运行。 6、动态类型 Python 中的类型通常在运行时推知,而不像部分编译语言那样静态声明。 7、缩进感知 和大部分其他编程语言不同,Python使用缩进标记代码块,代替圆括号、方括号或 者分号。 8、垃圾收集 Python具有自动垃圾收集机制,避免程序员管理内存。
Python具有如下特征
1、开放源码 Python和大部分可用的支持库及工具都是开源的,通常使用相当灵活和开放的许可证。 2、解释型 Cpython参考实现是该语言的一个解释程序,在运行时将 Python代码翻译为可执行字 节代码。 3、多重范型 Python支持不同的编程和实现范型,例如面向对象和命令式、函数式或者过程式编程。
利用Python大量的可用库和工具,似乎可以应付当今金融业中分析、数据 量和频率、依从性及监管所引发的大部分问题。
python简单易学,和数学很接近,易于将数学问题转化为代码实现。
1.1.2 python生态系统
Python作为一个生态系统,而不仅仅是一门编程语言,其主要特征是有大量可用的 库和工具。这些库和工具通常必须在需要(例如,会图库)时导入或者作为单独的 系统进程(例如,Python开发环境)启动。导入意味着是某个库可用于当前命名空 间和当前Python解释程序进程。 Python本身自带了一组大型的程序库,在不同方面增强了基本解释程序。例如,基 本数学计算可以在不做任何导入思维情况下完成,而更复杂的数据函数必须通过数 学库导入:
1.3 用于金融的python
1.3.1金融和Python语法
Python语法总体上和利用用于描述科学问题或者金融算法的数学语法相当接近。 举例简单的金融算法——通过蒙特卡洛模拟方法估计欧式看涨期权的价值。这里将考虑 Black-Scholes-Merton(BSM)模型,在这种模型中期权潜在风险遵循几何布朗运动。
In :100 * 2.5 + 50 out:300.0 in :log(1) ... NameError: name 'log' is not defined in : from math import * #导入数学函数库 in : log(1) out: 0.0