银行本质上是技术公司。
——胡戈•班齐格
近来,Python无疑是金融业的重要策略性技术平台之一。到2018年底,这已经不再是个问题:全世界的金融机构现在都尽最大努力利用Python及其强大的数据分析、可视化和机器学习程序库生态系统。在金融领域之外,Python还常常成为编程入门课程选择的语言,例如计算机科学课程项目。
除了容易理解的语法和多重范型方法之外,形成这一局面的主要原因之一是,Python已经成为人工智能(AI)、机器学习(ML)和深度学习(DL)领域的“头等公民”。这些领域的许多流行的软件包和程序库都直接用Python(如ML所用的scikit-learn)编写,或者用Python包装器(例如DL所用的TensorFlow)。
金融本身正在进入一个新时代,这一发展有两个主要的推动力。首先是基本上所有金融数据都可以编程访问——一般来说,这种访问是实时的,也是催生“数据驱动金融”的原因。几十年前,大部分交易或者投资决策是由交易员和投资组合管理人推动的,这些人阅读报纸,或者通过私下交谈进行学习。此后出现了一些终端,通过计算机和电子通信,将金融数据实时传递到交易员和投资组合管理人的桌面上。今天,即使是一分钟产生的海量金融数据,个人(或者团队)都无法应付。只有处理速度和计算能力与日俱增的机器,才能应对金融数据的容量和速度。这意味着,全球大部分股票交易量是由算法和计算机驱动的,而不是来自于交易员。
第二个主要推动力是在金融中越来越重要的人工智能。越来越多的金融机构试图利用ML和DL算法改善运营,以及它们的交易及投资表现。
面对这一金融时代的挑战,Python是合适的编程语言和生态系统。本书涵盖有监督学习和无监督学习的基本ML算法(以及深度神经网络),但焦点是Python的数据处理和分析能力。想要全面叙述AI当前和未来在金融中的重要性,需要一整本书的篇幅。不过,大部分AI、ML和DL需要大量的数据,因此无论如何应该首先掌握数据驱动金融学。
《Python金融大数据分析》第2版更多的是一次升级,而非更新。例如,这一版增加了关于算法交易的一整个部分(第4部分)。这一主题最近在金融业变得相当重要,在散户中也很受欢迎。本版还增加了一个入门部分(第2部分),介绍Python基本编程和数据分析,这些知识将为本书的后续几个部分奠定基础。另1方面,第一版的某些章节完全删除了。例如,关于Web技术和对应库(如Flask)的部分删除,因为现在已经有专门介绍这些知识的图书。
在第2版中,我力图涵盖更多金融相关主题,聚焦于对金融数据科学、算法交易和计算金融学特别有用的Python技术。和第1版中一样,我采用的是实用方法,实现和图示先于理论细节,通常将重点放在整体上,而不是某些类、方法或者晦涩难懂的函数参数化选项。
描述完第2版的基本方法之后,我还必须强调,这本书既不是介绍Python编程,也不是介绍一般金融知识的图书。在这两个方面,都有大量出色的知识来源。本书定位于这两个激动人心的领域相互交叉的方面,并假定读者有一定的编程(不一定是Python)和金融背景。这些读者将学习把Python及其生态系统应用于金融领域的方法。
Yves J. Hilpisch博士是Python Quants集团的创始人和管理合伙人,该集团致力于应用开源技术来解决金融数据科学、人工智能、算法交易和计算金融学等问题。他还是AI Machine公司的CEO,这个公司的专业领域是通过专属策略执行平台来利用人工智能的威力。他还是另外两本图书的作者:
Yves在CQF项目讲授计算金融学课程,在EPAT项目讲授算法交易。他还是Python算法交易大学认证的首个在线培训项目的主管。
Yves编写了DX Analytics金融分析库,并在伦敦、柏林、巴黎和纽约等地组织了关于Python计量金融学相关的聚会、会议和训练营。他曾在美国、欧洲和亚洲的技术会议上担任过主讲人。
第 1部分 Python与金融
第 1章 为什么将Python用于金融 3
1.1 Python编程语言 3
1.1.1 Python简史 5
1.1.2 Python生态系统 6
1.1.3 Python用户谱系 7
1.1.4 科学栈 7
1.2 金融中的科技 8
1.2.1 科技投入 9
1.2.2 作为业务引擎的科技 9
1.2.3 作为进入门槛的科技和人才 10
1.2.4 不断提高的速度、频率和数据量 10
1.2.5 实时分析的兴起 11
1.3 用于金融的Python 12
1.3.1 金融和Python语法 12
1.3.2 Python的效率和生产率 16
1.3.3 从原型化到生产 20
1.4 数据驱动和人工智能优先的金融学 21
1.4.1 数据驱动金融学 21
1.4.2 人工智能优先金融学 24
1.5 结语 26
1.6 延伸阅读 27
第 2章 Python基础架构 29
2.1 作为包管理器使用的conda 31
2.1.1 安装Miniconda 31
2.1.2 conda基本操作 33
2.2 作为虚拟环境管理器的conda 37
2.3 使用Docker容器 41
2.3.1 Docker镜像和容器 41
2.3.2 构建Ubuntu和Python Docker镜像 42
2.4 使用云实例 46
2.4.1 RSA公钥和私钥 47
2.4.2 Jupyter Notebook配置文件 48
2.4.3 Python和Jupyter Notebook安装脚本 49
2.4.4 协调Droplet设置的脚本 51
2.5 结语 52
2.6 延伸阅读 53
第 2部分 掌握基础知识
第3章 数据类型与结构 57
3.1 基本数据类型 58
3.1.1 整数 58
3.1.2 浮点数 59
3.1.3 布尔值 61
3.1.4 字符串 65
3.1.5 题外话:打印和字符串替换 66
3.1.6 题外话:正则表达式 69
3.2 基本数据结构 71
3.2.1 元组 71
3.2.2 列表 72
3.2.3 题外话:控制结构 74
3.2.4 题外话:函数式编程 75
3.2.5 字典 76
3.2.6 集合 78
3.3 结语 79
3.4 延伸阅读 79
第4章 用NumPy进行数值计算 81
4.1 数据数组 82
4.1.1 用Python列表形成数组 82
4.1.2 Python array类 84
4.2 常规NumPy数组 86
4.2.1 基础知识 86
4.2.2 多维数组 89
4.2.3 元信息 93
4.2.4 改变组成与大小 93
4.2.5 布尔数组 97
4.2.6 速度对比 99
4.3 NumPy结构数组 100
4.4 代码向量化 102
4.4.1 基本向量化 102
4.4.2 内存布局 105
4.5 结语 107
4.6 延伸阅读 108
第5章 pandas数据分析 109
5.1 DataFrame类 110
5.1.1 使用DataFrame类的第 一步 110
5.1.2 使用DataFrame类的第二步 114
5.2 基本分析 118
5.3 基本可视化 122
5.4 Series类 124
5.5 GroupBy操作 126
5.6 复杂选择 128
5.7 联接、连接和合并 131
5.7.1 联接 132
5.7.2 连接 133
5.7.3 合并 135
5.8 性能特征 137
5.9 结语 139
5.10 延伸阅读 140
第6章 面向对象编程 141
6.1 Python对象简介 145
6.1.1 int 145
6.1.2 list 146
6.1.3 ndarray 146
6.1.4 DataFrame 148
6.2 Python类基础知识 149
6.3 Python数据模型 154
6.4 Vector类 158
6.5 结语 159
6.6 延伸阅读 159
第3部分 金融数据科学
第7章 数据可视化 163
7.1 静态2D绘图 164
7.1.1 一维数据集 164
7.1.2 二维数据集 170
7.1.3 其他绘图样式 177
7.2 静态3D绘图 184
7.3 交互式2D绘图 188
7.3.1 基本图表 188
7.3.2 金融图表 192
7.4 结语 196
7.5 延伸阅读 196
第8章 金融时间序列 197
8.1 金融数据 198
8.1.1 数据导入 198
8.1.2 汇总统计 201
8.1.3 随时间推移的变化 203
8.1.4 重新采样 207
8.2 滚动统计 209
8.2.1 概述 209
8.2.2 技术分析示例 211
8.3 相关分析 213
8.3.1 数据 213
8.3.2 对数回报率 214
8.3.3 OLS回归 216
8.3.4 相关 217
8.4 高频数据 218
8.5 结语 220
8.6 延伸阅读 220
第9章 输入/输出操作 221
9.1 Python基本I/O 222
9.1.1 将对象写入磁盘 222
9.1.2 读取和写入文本文件 225
9.1.3 使用SQL数据库 229
9.1.4 读写NumPy数组 232
9.2 pandas的I/O 234
9.2.1 使用SQL数据库 235
9.2.2 从SQL到pandas 237
9.2.3 使用CSV文件 239
9.2.4 使用Excel文件 240
9.3 PyTables的I/O 242
9.3.1 使用表 242
9.3.2 使用压缩表 250
9.3.3 使用数组 252
9.3.4 内存外计算 253
9.4 TsTables的I/O 256
9.4.1 样板数据 257
9.4.2 数据存储 258
9.4.3 数据检索 259
9.5 结语 261
9.6 延伸阅读 262
第 10章 高性能的Python 265
10.1 循环 266
10.1.1 Python 266
10.1.2 NumPy 267
10.1.3 Numba 268
10.1.4 Cython 269
10.2 算法 271
10.2.1 质数 271
10.2.2 斐波那契数 275
10.2.3 π 279
10.3 二叉树 283
10.3.1 Python 283
10.3.2 NumPy 285
10.3.3 Numba 286
10.3.4 Cython 287
10.4 蒙特卡洛模拟 288
10.4.1 Python 289
10.4.2 NumPy 291
10.4.3 Numba 291
10.4.4 Cython 292
10.4.5 多进程 293
10.5 pandas递归算法 294
10.5.1 Python 294
10.5.2 Numba 296
10.5.3 Cython 296
10.6 结语 297
10.7 延伸阅读 298
第 11章 数学工具 299
11.1 逼近法 299
11.1.1 回归 301
11.1.2 插值 310
11.2 凸优化 314
11.2.1 全局优化 315
11.2.2 局部优化 317
11.2.3 有约束优化 318
11.3 积分 320
11.3.1 数值积分 321
11.3.2 通过模拟求取积分 322
11.4 符号计算 323
11.4.1 基础知识 323
11.4.2 方程式 325
11.4.3 积分与微分 325
11.4.4 微分 326
11.5 结语 328
11.6 延伸阅读 328
第 12章 推断统计学 331
12.1 随机数 332
12.2 模拟 338
12.2.1 随机变量 338
12.2.2 随机过程 341
12.2.3 方差缩减 356
12.3 估值 359
12.3.1 欧式期权 359
12.3.2 美式期权 364
12.4 风险测度 367
12.4.1 风险价值 367
12.4.2 信用价值调整 371
12.5 Python脚本 374
12.6 结语 377
12.7 延伸阅读 377
第 13章 统计学 379
13.1 正态性检验 380
13.1.1 基准案例 381
13.1.2 真实数据 390
13.2 投资组合优化 396
13.2.1 数据 396
13.2.2 基本理论 398
13.2.3 最优投资组合 401
13.2.4 有效边界 404
13.2.5 资本市场线 405
13.3 贝叶斯统计 408
13.3.1 贝叶斯公式 409
13.3.2 贝叶斯回归 410
13.3.3 两种金融工具 414
13.3.4 随时更新估算值 418
13.4 机器学习 423
13.4.1 无监督学习 423
13.4.2 有监督学习 426
13.5 结语 441
13.6 延伸阅读 441
第4部分 算法交易
第 14章 FXCM交易平台 445
14.1 入门 446
14.2 读取数据 447
14.2.1 读取分笔交易数据 447
14.2.2 读取K线(蜡烛图)数据 449
14.3 使用API 451
14.3.1 读取历史数据 452
14.3.2 读取流数据 454
14.3.3 下单 455
14.3.4 账户信息 457
14.4 结语 457
14.5 延伸阅读 458
第 15章 交易策略 459
15.1 简单移动平均数 460
15.1.1 数据导入 460
15.1.2 交易策略 461
15.1.3 向量化事后检验 463
15.1.4 优化 465
15.2 随机游走假设 467
15.3 线性OLS回归 469
15.3.1 数据 470
15.3.2 回归 472
15.4 聚类 474
15.5 频率方法 476
15.6 分类 479
15.6.1 两个二元特征 479
15.6.2 5个二元特征 480
15.6.3 5个数字化特征 482
15.6.4 顺序训练-测试分离 484
15.6.5 随机训练-测试分离 485
15.7 深度神经网络 486
15.7.1 用scikit-learn实现DNN 486
15.7.2 用TensorFlow实现DNN 489
15.8 结语 492
15.9 延伸阅读 493
第 16章 自动化交易 495
16.1 资本管理 496
16.1.1 二项设定中的凯利标准 496
16.1.2 用于股票及指数的凯利标准 500
16.2 基于ML的交易策略 505
16.2.1 向量化事后检验 505
16.2.2 最优杠杆 510
16.2.3 风险分析 512
16.2.4 持久化模型对象 515
16.3 在线算法 516
16.4 基础设施与部署 518
16.5 日志与监控 519
16.6 结语 521
16.7 Python脚本 522
16.7.1 自动化交易策略 522
16.7.2 策略监控 525
16.8 延伸阅读 525
第5部分 衍生品分析
第 17章 估值框架 529
17.1 资产定价基本定理 529
17.1.1 简单示例 530
17.1.2 一般结果 530
17.2 风险中立折现 532
17.2.1 日期建模与处理 532
17.2.2 恒定短期利率 534
17.3 市场环境 536
17.4 结语 539
17.5 延伸阅读 540
第 18章 金融模型的模拟 541
18.1 随机数生成 542
18.2 通用模拟类 544
18.3 几何布朗运动 548
18.3.1 模拟类 548
18.3.2 用例 550
18.4 跳跃扩散 553
18.4.1 模拟类 553
18.4.2 用例 556
18.5 平方根扩散 557
18.5.1 模拟类 558
18.5.2 用例 560
18.6 结语 561
18.7 延伸阅读 563
第 19章 衍生品估值 565
19.1 通用估值类 566
19.2 欧式行权 570
19.2.1 估值类 570
19.2.2 用例 572
19.3 美式行权 577
19.3.1 最小二乘蒙特卡洛方法 577
19.3.2 估值类 578
19.3.3 用例 580
19.4 结语 583
19.5 延伸阅读 585
第 20章 投资组合估值 587
20.1 衍生品头寸 588
20.1.1 类 588
20.1.2 用例 590
20.2 衍生品投资组合 592
20.2.1 类 592
20.2.2 用例 597
20.3 结语 604
20.4 延伸阅读 605
第 21章 基于市场的估值 607
21.1 期权数据 608
21.2 模型检验 610
21.2.1 相关市场数据 611
21.2.2 期权建模 612
21.2.3 检验过程 615
21.3 投资组合估值 620
21.3.1 建立期权头寸模型 621
21.3.2 期权投资组合 622
21.4 Python代码 623
21.5 结语 625
21.6 延伸阅读 626
附录A 日期与时间 627
A.1 Python 627
A.2 NumPy 633
A.3 pandas 636
附录B BSM期权类 641
B.1 类定义 641
B.2 类的使用 643