我的编程空间,编程开发者的网络收藏夹
学习永远不晚

在Python中使用QuantLib

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

在Python中使用QuantLib

Quantlib简介

相比TA-Lib在技术分析领域的地位,QuantLib在金融工程领域的地位可以说有过之而无不及。

参考其官方网站,QuantLib中包含的的模块如下(其中个人感觉国内比较有用的添加了中文注释):

  • Currencies and FX rates(货币相关)

  • Date and time calculations(日期和时间计算)

  • Calendars

  • Day counters

  • Design patterns

  • Financial instruments

  • Finite-differences framework

  • Lattice methods

  • Math tools

  • 1-D Interpolations and corresponding traits

  • One-dimensional solvers

  • Optimizers(优化器)

  • Monte Carlo framework (蒙特卡洛模拟框架)

  • Numeric types

  • Output manipulators

  • Pricing engines(定价引擎)

  • Asian option engines(亚式期权)

  • Barrier option engines(障碍期权)

  • Basket option engines(篮子期权)

  • Cap/floor engines

  • Cliquet option engines

  • Forward option engines(远期期权)

  • Quanto option engines

  • Swaption engines

  • Vanilla option engines(普通期权)

  • QuantLib macros

  • Debugging macros

  • Numeric limits

  • Short-rate modelling framework(短期利率建模框架)

  • Stochastic processes(随机过程)

  • Term structures(期限结构)

  • Utilities

作为期权交易员,作者本人比较关注的是期权定价引擎和日历模块。接下来国内预计将会推出的大商所豆粕期权和郑商所白糖期权都是美式期权,在每天连续交易时段中定价比较适合的是二叉树模型。相比较于闭式解的BS模型,基于数值模拟的二叉树模型的运算量提高了一个数量级,因此高效的定价引擎对于这些商品期权的交易员而言十分重要。QuantLib使用C++开发,并通过SWIG包装对其他语言提供调用API,足以满足连续交易对性能的需求。

其他的亚式期权、障碍期权定价引擎等,则适合国内OTC期权市场的参与者(无论做市商还是买方机构),毕竟这是一个“货物出柜、概不退换”的市场,想要不被对手坑就得保证自己也能有奇异期权定价能力。

QuantLib在Python中的安装

QuantLib功能强大的同时安装也较为复杂,其官方网站仅提供了源代码,需要用户自行编译,完成后还需要编译QuantLib的SWIG封装从而实现Python调用。

除了官方提供的SWIG封装外,Enthought公司在Github上还有一个名为pyql的Cython封装项目,号称速度更快,API设计更Pythonic,但是这里作者提醒:

除非真的特别喜好折腾,否则轻易不要跳pyql的坑!安装过程相当复杂(涉及到修改QuantLib的C++源代码),pyql在github上的安装教程中的步骤也有一些错误,作者跳坑后花了两周都没爬出来,老老实实回去用SWIG封装了。

下面开始一步步的介绍安装步骤:

  1. 参考Python量化交易平台开发教程系列3-vn.py项目中API封装的编译中的步骤,安装好Anaconda、Visual Studio和Boost,假设Anaconda的安装路径为D:\Anaconda,Boost的安装路径为D:\boost_1_60_0。

  2. 在这里下载QuantLib和Quantlib-SWIG,注意请选择两者都有的版本(在作者写这篇教程时,两者都有的最新版本号是1.7),将下载的zip文件分别解压缩,假设路径为D:\QuantLib-1.7和D:\QuantLib-SWIG-1.7。

  3. 在这里下载SWIG(swigwin-3.0.8),并解压缩放到D:\swigwin-3.0.8。

  4. 设置以下环境变量(不会的请参考设置环境变量):

    • QL_DIR:D:\QuantLib-1.7
    • myanaconda:D:\Anaconda
    • myboost:D:\boost_1_60_0
    • myswig:D:\swigwin-3.0.8
    • myqlswig:D:\QuantLib-SWIG-1.7
  5. 编译安装QuantLib,打开cmd,切换到D盘(输入D:,因为上面的所有文件夹都在D盘),点击窗口左上角的图标,选择“编辑->粘贴“,将下方的批处理命令复制到cmd中运行(可以一次性全部复制,也可以逐行复制运行,注意全部复制时,若运行到某一步卡住,可以尝试按回车执行这一步的命令):

    REM 这里使用的是VS2013
    
    REM 打开VS命令行工具来设置编译所需的环境变量
    "%VS120COMNTOOLS%\VsDevCmd.bat"
    
    REM 切换到QuantLib代码所在的文件夹
    cd %QL_DIR%
    
    REM 把boost库添加到include和library路径中,并且指定VSC+=使用这些路径
    set INCLUDE=%myboost%;%INCLUDE%
    set LIB=%myboost%\lib32-msvc-12.0;%LIB%
    set UseEnv=true
    
    REM 使用msbuild来编译QuantLib
    REM 这个要花一段时间(几十分钟到若干小时)
    msbuild /p:AdditionalLibPaths="%myboost\lib" /p:Configuration=Release /p:Platform=Win32 QuantLib_vc12.sln
    
  6. 编译安装QuantLib-SWIG,将下方的批处理命令复制到cmd中运行(运行方法和上一步相同):

    REM 把编译工具设置为使用VS2013
    set VS100COMNTOOLS=%VS120COMNTOOLS%
    set VS90COMNTOOLS=%VS120COMNTOOLS%
    
    REM 打开VS命令行工具来设置编译所需的环境变量
    "%VS120COMNTOOLS%\VsDevCmd.bat"
    
    REM 切换到QuantLib-SWIG下面的Python文件夹下
    cd %myqlswig%\Python
    
    REM 创建setup.cfg
    echo [build] > setup.cfg
    echo compiler=msvc >> setup.cfg
    
    REM 设置路径和环境变量
    set PATH=%myanaconda%;%myanaconda%\scripts;%myswig%;%PATH%
    set INCLUDE=%myboost%;%INCLUDE%
    set LIB=%myboost%\lib32-msvc-12.0;%LIB%
    
    REM 编译QuantLib-SWIG的Python接口
    REM 只有当swig的.i文件发生变化时,才需要先执行wrap命令
    python setup.py wrap
    python setup.py build
    python setup.py install
    
  7. 接下来可以尝试运行D:\QuantLib-SWIG-1.7\Python\examples目录下的一些例子,没有报错则说明安装成功

有社区成员发现TA-Lib的下载网站上也有QuantLib的安装包,不想折腾以上步骤的用户可以尝试(作者并未测试过,大家请自行折腾)。

vn.py和QuantLib

相比较于TA-Lib,QuantLib由于其主要针对复杂衍生品,适用的人群会相对窄一些,举两个例子:

商品期权的CTA策略交易

前文已经提到过国内的商品期权将会主要采用美式期权的合约设计,在定价方面需要使用二叉树模型。商品期权的最小价格变动通常比其标的物本身更小(相同的价格变动对应的TICK跳动更多),所以会比其标的物更适合交易CTA类的策略。

但是同时因为期权的非线性特征,在做多时可以采用买入看涨和卖出看跌两种方法(做空也一样有两种:买入看跌和卖出看涨),具体的选择就需要参考当时的波动率水平,而QuantLib的速度足以满足CTA类策略对于低延时的要求。

场外期权交易系统

越来越多的国内买方机构(券商资管、信托、基金和私募等)开始参与到OTC期权的市场,OTC期权以灵活著称,不但可交易的品种更多(沪深300、中证500、黄金、铜等),可供选择的期权类型也更多(灵活到期时间、奇异期权)。

目前大部分机构依旧采用传统的EXCEL来记录和管理,通常需要手动输入行情数据(也可以使用Wind接口接入实时行情),使用较为麻烦也无法做到实时的一些交易对冲。同时由于EXCEL VBA的局限性,对于障碍期权等奇异期权,买家往往无法自己进行估值,必须依赖于OTC做市商给出的数字。

结合vn.py和QuantLib,交易员可以构建连通场内外的期权交易系统,使用数据库而不是EXCEL来管理持仓和风险,并基于实时行情来计算当前持仓的希腊值敞口,结合场内的期货和现货(ETF、股票等)来实现日内对冲,从而真正实现三维立体的交易模式。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

在Python中使用QuantLib

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

在Python中使用QuantLib

Quantlib简介相比TA-Lib在技术分析领域的地位,QuantLib在金融工程领域的地位可以说有过之而无不及。参考其官方网站,QuantLib中包含的的模块如下(其中个人感觉国内比较有用的添加了中文注释):Currencies and
2023-01-31

使用Quantlib,通过YTM计算债券

债券标的为170005,我的python代码如下: 1 import QuantLib as ql 2 3 faceAmount = 100.0 4 redemption = 100.0 5 issueDate = ql.Date(20,
2023-01-30

在 Python 中使用 Elastic

在这篇文章中,我将讨论 Elasticsearch 以及如何将其整合到不同的 Python 应用程序中。什么是 ElasticSearch?ElasticSearch(ES)是一个建立在 Apache Lucene 之上的高度可用的分布式开
2023-01-31

在Python中使用Elasticsea

在这篇文章中,我将讨论Elasticsearch以及如何将其整合到不同的Python应用程序中。什么是ElasticSearch?ElasticSearch(ES)是一个建立在Apache Lucene之上的高度可用的分布式开源搜索引擎。它
2023-01-31

在Python中使用MySQL-

PyMySQL的使用安装sudo pip3 install pymysql基本使用from pymysql import connect# 1.创建链接coon = connect()""" * 参数host:连接的mysql主机,如果本机是"localhos
2015-07-26

在Python中使用regionprops

在Python中,可以使用`regionprops`函数从二进制图像的连通区域中提取属性。下面是一个示例代码:```pythonimport matplotlib.pyplot as pltfrom skimage.measure impo
2023-09-26

在Python中使用protocol b

本教程提供了一个Python程序员使用protocol buffers的基本的入门教程。通过创建一个简单的示例应用程序,它向您展示了如何*在一个.proto文件中定义Message的格式。*使用protocol buffer compile
2023-01-31

怎么在Python中使用中文

这篇文章主要讲解了“怎么在Python中使用中文”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么在Python中使用中文”吧!在Python中使用中文 它有两种默认的字符串:str和uni
2023-06-17

linspace如何在Python中使用

linspace如何在Python中使用?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。linspace生成有序列表,重点在数据范围与数据个数上linspace(
2023-06-14

怎么在Python中使用OpenCV

这篇文章给大家介绍怎么在Python中使用OpenCV,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。OpenCVOpenCV是计算机视觉中最受欢迎的库,最初由intel使用C和C ++进行开发的,现在也可以在pytho
2023-06-14

popitem怎么在python中使用

popitem怎么在python中使用?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1、说明用于返回并删除字典中的一个键值对,一般删除字典末尾的键值对。2、语法dict.p
2023-06-15

如何在python中使用pygame

如何在python中使用pygame?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一、安装在 cmd 命令中输入: pip install pygame即可安装成功了二、第一个
2023-06-15

如何在Python中使用EasyGUI

这篇文章给大家介绍如何在Python中使用EasyGUI,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。python是什么意思Python是一种跨平台的、具有解释性、编译性、互动性和面向对象的脚本语言,其最初的设计是用于
2023-06-14

如何在Python中使用类

如何在Python中使用类?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一、类的定义和使用在C++中,类是“结构体”的衍生。在Python中,类作为一个完全独立
2023-06-15

如何在Python中使用DataFrame

如何在Python中使用DataFrame?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1、方法说明df.values:返回一个 ndarray 类型的对象,包涵 DataFr
2023-06-15

怎么在Python中使用Appium

怎么在Python中使用Appium?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。python勾选Add Python x.x to PATH(没有勾选的安装成功后可手动在
2023-06-14

sympy如何在python中使用

sympy如何在python中使用?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Python的优点有哪些1、简单易用,与C/C++、Java、C# 等传统语言相比,Pyth
2023-06-14

deque怎么在Python中使用

这篇文章给大家介绍deque怎么在Python中使用,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。python是什么意思Python是一种跨平台的、具有解释性、编译性、互动性和面向对象的脚本语言,其最初的设计是用于编写
2023-06-14

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录