一文教你Python编程金融数据量化分析,了解一下?

-回复 -浏览
楼主 2019-09-10 16:31:45
举报 只看此人 收藏本贴 楼主

如今Python语言的学习已经上升到了国家战略的层面上。Python语言是人工智能的基础语言,国家相关教育部门对于“人工智能普及”格外重视,不仅将Python列入到小学、中学和高中等传统教育体系中,并借此为未来国家和社会发展奠定了人工智能的人才培养基础,逐步由底层向高层推动“全民学Python”,从而进一步实现人工智能技术的推动和社会人才结构的更迭。


Python岗位年薪已达到至少在20w+,而且除了北、上、广、深外,杭州和合肥等二、三线城市的待遇正在与一线城市持平。


那么,今天我们就来教大家如何在融行业中使用Python量化分析,助大家一臂之力!


基于Python金融数据

量化分析实战教程


1

教程背景



近年来,金融领域的量化分析越来越受到理论界与实务界的重视,量化分析的技术也取得了较大的进展,成为备受关注的一个热点领域。所谓金融量化,就是将金融分析理论与计算机编程技术相结合,更为有效的利用现代计算技术实现准确的金融资产定价以及交易机会的发现。量化分析目前已经涉及到金融领域的方方面面,包括基础和衍生金融资产定价、风险管理、量化投资等。随着大数据技术的发展,量化分析还逐步与大数据结合在一起,对海量金融数据实现有效和快速的运算与处理。


在量化金融的时代,选用一种合适的编程语言对于金融模型的实现是至关重要的。在这方面,Python语言体现出了不一般的优势,特别是它拥有大量的金融计算库,并且可以提供与C++,java等语言的接口以实现高效率的分析,成为金融领域快速开发和应用的一种关键语言,由于它是开源的,降低了金融计算的成本,而且还通过广泛的社交网络提供大量的应用实例,极大的缩短了金融量化分析的学习路径。

2

整体概况

本教程介绍使用Python进行数据分析和金融应用开发的基础知识。课程覆盖了Python的基本数据结构、输入输出、效率分析、数学库、随机分析库、统计分析库等。接着课程以专题的形式介绍了Python与Excel的结合,学习如何使用Python的相关库生成Excel可调用的函数;Python与Hadoop和MongoDB结合进行大数据分析的基础知识。最后课程介绍了Python的面向对象编程并介绍了两个案例:使用Python实现金融衍生品分析库以及使用Python实现事件驱动的量化投资系统,使学员在实战的环境下理解Python在金融应用开发中的具体应用方式,训练学员独立开发Python模块的能力。

3

教程大纲


第一讲、Python与金融应用概述

本讲主要介绍Python的基本特性,安装本课程所需要的Python环境,概述Python在金融数据分析中应用领域。本讲将使用一个简单的趋势投资的例子,讲解为什么使用Python进行金融数据分析和量化投资是非常方便的。


第二讲、Python的基本数据类型与数据结构

本讲介绍Python的基本数据类型与数据结构,包括基础Python和NumPy库提供的数据结构。


第三讲、Python数据可视化

本讲介绍Python的matplotlib库提供的数据可视化技术,虽然Python还有很多其他的数据可视化方式,但是matplotlib提供了一种基准实现方式。


第四讲、金融时间序列分析

在金融分析中常见的一种数据类型是金融时间序列数据,本章主要介绍Python的Pandas库对金融时间序列类型数据结构的实现——DataFrame和Series,以及如何运用这些工具进行基本的金融时间序列分析


第五讲、输入输出操作

本讲介绍Python提供的基本输入输出操作,以及如何在金融数据分析与投资中有效的进行使用。


第六讲、提升Python效率

本讲介绍Python中提供的提升计算效率的一些工具以及它们在金融数据分析与投资中的基本应用。


第七讲、数学工具

本讲介绍Python提供的用于金融数据分析的数学方法与工具及其背景知识与应用方式。


第八讲、随机分析

对不确定性的刻画与研究是金融研究与分析的重要方面,本讲介绍随机分析的一些知识,在金融数据分析与投资中的应用与Python实现。


第九讲、统计分析

统计分析是金融数据分析的核心,本讲介绍常用的统计分析方法、金融应用及其Python实现。


第十讲、数值分析技术

对于一些非线性、没有显式解的金融和数据分析问题,需要使用数值分析的技术,本讲介绍这些技术的基础及应用,以及Python的实现。


第十一讲、使用Python操作Excel

微软的Excel是常用的办公软件,是数据分析和应用的重要支撑。Python提供了丰富的与Excel交互的接口,本讲介绍这些接口并举例。


第十二讲、Python面向对象编程与图形用户界面

本讲介绍Python面向对象编程技术,这是后续章节,特别是量化投资一章的基础,除此之外,本讲还介绍了Python图形用户界面编程的基本方法。


第十三讲、金融中的大数据技术概述

本讲介绍大数据技术在金融中的应用以及使用Python的基本实现。


第十四讲、案例1:使用Python构建期权分析系统

本案例使用之前各讲介绍的Python金融应用相关知识,构建相对完整的期权分析系统,帮助学员掌握金融系统开发的要点以及Python整合应用的方式,与之前介绍相比,在案例分析中更多的使用面向对象方法。


第十五讲、案例2:使用Python构建简单的算法交易系统

算法与程序化交易是大数据时代计算机技术在金融领域应用的最重要方面之一。本讲介绍这方面的Python实现,包括基本交易、交易策略与回测等。


大纲详情可进入官网课程页了解:

http://www.ibeifeng.com/goods-604.html

4

内容预览-python介绍

(收藏后慢慢看)



Python生态系统


本课程中展示的例子都是使用Ipython这种流行的Python交互式开发环境(IDE)。虽然它开始的时候只是一个升级的外壳,但是今天的IDE中已经有很多可选的东西(例如支持调试)。


Ipython通常被称为Python生态系统的killer application,在很多方面对标准的交互环境进行了改进。例如,提供了命令行历史命令的功能,允许较为容易的观测对象等。在这个系统中,获得帮助也是非常容易的。


Ipython提供了多种版本:包括一个壳版本,一个基于QT图形用户界面的版本以及一个基于浏览器的版本(NOTEBOOK)。


科学计算库


科学计算库是Python语言的重要组成部分,其包括:

NumPy:提供了多维数组对象保存同质或异质的数据,它还提供了处理这个数组对象的优化函数/方法。


SciPy:包含一系列子库和函数来完成科学和金融领域的重要标准功能,比如三维曲线插值以及数值积分。


Matplotlib:这是Python最为流行的绘图和可视化库,提供了2D和3D的绘图功能。


PyTables:是流行的HDF5数据存储库,这个库可以完成基于有层次的数据库和文件格式的优化的,以磁盘为基础的IO操作。


Pandas:pandas基于NumPy来创建,提供了管理和分析时间序列以及表格数据的丰富的类;它与matplotlib库紧密结合提供了绘图功能,和PyTables类结合提供了数据读取功能。


5

内容预览-python在金融中应用的典型事例

(收藏后慢慢看)



讨论一些量化金融中的例子,显示使用Python以及其附属的金融分析库处理起来是多么方便。这些例子是描述性的,对于一些Python语言以及实际应用中的细节问题并不做过多介绍。本讲包括以下几个例子:


隐含波动率:不同到期期限期权的隐含波动率求解并作图,这是很多期权交易者以及风险管理者面对的一项日常任务。


MonteCarlo模拟:通过MonteCarlo模拟来得到一组随时间变化的股票指数,将选择的结果作图,并计算欧式期权的价值。MonteCarlo模拟方法是数值期权定价以及value-at-risk风险管理以及信用价值调整的基础。


技术分析:通过对历史时间序列的分析,完成对一项基于趋势信号的交易策略的回测,专业投资者以及激进的业余投资者通常都会进行这类型的投资分析。

6

示例演示-隐含波动率

(收藏后慢慢看)



隐含波动率

给定类似于Black-Scholes-Merton(1973)的期权定价公式,隐含波动率是指:在其他条件不变的情况下,通过将这个隐含波动率数值代入到公式中,可以得到不同的执行价格和期限的期权的市场报价。本例中,波动率不是代入到模型或公式中的一个输入参数,而是给定这个公式而得到的一个(数值)优化过程的结果。


这里我们考虑的例子是关于一项新的期权,即基于VSTOXX波动率指数的波动率期权。Eurex是提供基于VSTOXX和各种期货合同的衍生品交易市场,于2013年6月建立了一个综合化的Python为基础的关于这个指数以及基于此指数的衍生品合同的教程,称为”VSTOXXAdvanced Services”。


在讨论VSTOXX期权之前,我们首先回顾一下基于不付息标的欧式看涨期权的Black-Scholes-Merton公式。



这里,St 代表的资产在t 时刻的价格水平。σ 代表标的资产常数的波动率(即标准差),K 代表期权的执行价格,T 代表期权的到期期限,r 代表常数的无风险短期利率。



现在假设某项欧式看涨期权的报价C*已经给定,那么隐含波动率σ^imp是可以求解上述公式的波动率数值,即:




这个方程并没有显式解,这样需要使用列如Newton等数值方法来估计正确的解。最常用的是Newton方法,使用相关函数的一阶导数,直到达到了规定的迭代次数或者是某种精确性。对于某个初始值 σ^imp 和 0<n<


期权定价公式关于波动率的一阶导数称为期权的Vega,由如下公式给出:

下面我们来分析一种特殊情形 t=0 条件下计算的python代码



当然在这个例子中我们还需要相关的期权报价,以及在我们的关于VSTOXX指数的欧式看涨期权中,我们还需要代码生成single implied volatilities。


T=0,参考日期我们取2014年3月31日,这一天指数的收盘价为 000=17.6639。假设无风险利率 r=0.01 。



其他参数都来自于期权数据以及需要进行计算获得。数据存储在pandas DataFrame对象中并保存在PyTables数据库文件中。我们需要将它读入内存。


这里之所以需要期货数据,是因为我们需要根据期权的远期moneyness来选择一组VSTOXX期权。在任意时刻交易的VSTOXX期货共有8种,到期日为下面8个月份的第三个星期五。在三月末,期货合同的到期期限是从4月的第三个星期五到11月的第三个星期五。



期权的数据集要更大一些,因为在任意给定的交易日,对于每个到期日,有很多看涨和看跌期权。但是这里到期日与期货是相同的。在2014年3月31日这一天,共有395份看涨期权。


从表中可以看出,交易的看涨期权中有非常实值的(指数的水平比期权执行价格高出很多),也有非常虚值的(即指数的水平比期权执行价格低很多)。因此,我们希望将分析限制在某种给定的(远期)moneyness水平上,给定分别期限的期货价值。假设我们允许期货水平上下50%的波动。


首先,我们定义新的一列来存储结果,并引入我们需要的函数。


现在我们计算看涨期权的隐含波动率。


接着,我们将所选择的期权的隐含波动率用图形表示出来,我们首先取隐含波动率大于0的子集(也就是我们进行了隐含波动率计算的子集)。


为了数据的可视化,我们对于数据集的所有到期日进行迭代,并且将隐含波动率做成线状图或者单点图。因为所有的到期日显示为多个时间,我们需要使用一点技巧来获得没有重复的,排序的日期列表。在Python中,set操作可以去掉重复项目,但是获得的是没有排序的期限集合。因此,我们还要对set进行排序。



接着我们对所有的日期进行迭代并作图。在这里可以看到一个明显的波动率微笑图形。而且对于长期的期权来说更为明显。


我们来看pandas另外一个强大的功能:对于按照逻辑索引的数据,DataFrame对象options_data都有一个整数的索引。但是这个索引是没有含义的,2014年3月31日交易的期权报价通过期限和执行价格来唯一描述,也就是说每个到期日的每个执行价格水平都对应着唯一的一个看涨期权。


Groupby方法可以得到一个更为有意义的索引,我们可以分别按照MATURITY和STRIKE进行索引。在这个例子中,我们只保留PRICE和IMP_VOL的列。这样的操作会返回一个DataFrameGroupBy对象,为了获得这个数据,我们需要对这个对象进行加总操作。


说到这里呢,送大家一个福利,想要学习完整课程:


1、转发本文至朋友圈五小时,即可享受课程5折优惠!

2、转发6个以上IT或金融相关群,即可享受课程4折优惠!

3、朋友圈获赞60次以上,即可享受3折优惠!

4、以上内容全部满足,全套课程免费学!


课程原价1280元,转发分享后截图发送公众号“北风网”即可获取0元学习福利!


7

北风网就业情况


每一份努力都值得更好的回报,北风学子经过数月的磨练,现以就业率39%的好成绩回馈他们的努力,其实你也可以!



点击【阅读原文】申请试听课,即可领取:

14 张思维导图部分例图


上下滑动,可点击看大图


  • 14张高清PDF思维导图下载链接

  • python核心编程教程指南

  • 进群资格,社群资源共享,解决资源匮乏问题

  • 不定期赠送试听课绿色通道

  • 课程报名后添加微信gjy00000000000(11个0)领取


戳原文,更有料!
我要推荐
转发到