专栏首页python3在Python中使用QuantLib

在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、股票等)来实现日内对冲,从而真正实现三维立体的交易模式。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • python爬虫入门八:多进程/多线程

    但如果数据量很大,比如要通过访问数百数千个url去爬取数据,单线程必须等待当前url访问完毕并且数据提取保存完成后才可以对下一个url进行操作,一次只能对一个u...

    py3study
  • python使用xmlrunner模块生

    unittest默认的TextTestRunner不能生成xml报告,xml报告可以和jenkins集成,也可以用于统计case通过率,为了生成xml报告,需要...

    py3study
  • 深入 Python 流程控制

    可能会有零到多个 elif 部分,else 是可选的。关键字 ‘elif’ 是 ’else if’ 的缩写,这个可以有效地避免过深的缩进。if … elif …...

    py3study
  • 深入 Python 流程控制

    可能会有零到多个 elif 部分,else 是可选的。关键字 ‘elif’ 是 ’else if’ 的缩写,这个可以有效地避免过深的缩进。if … elif …...

    py3study
  • Python知识点总结篇(四)

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

    村雨遥
  • [职场论道] 谈谈工资奖金期权和股票

    昨天「程序员不该是码农」有点火,我收到的留言都快回不完了。很多赞赏性的留言,各种各样的问题,以及一些没来由的诘难。我发现做人最稳妥的方式是不发表任何意见,否则只...

    tyrchen
  • 腾讯安全DDoS防护获评“领先安全产品”,护航互联网产业发展

    近日,2019中国互联网经济年会在北京召开,此次会议以“绿光”为主题,聚集互联网+、人工智能、物联网、大数据、区块链等行业的“最强大脑”,共同探讨互联网经济新...

    腾讯云安全
  • python序列化:json,pickl

    什么是序列化,把程序中的对象或者变量,从内存中转换为可存储或可传输的过程称为序列化。在 Python 中,这个过程称为 pickling,在其他语言中也被称为 ...

    py3study
  • 函数 | Python内置函数详解—集合操作类

    Python内置的函数及其用法。为了方便记忆,已经有很多开发者将这些内置函数进行了如下分类:

    潘永斌
  • 基于django的视频点播网站开发-step6-个人中心功能

    从本讲起,我们开始个人中心功能的开发。个人中心里面包括个人资料、修改密码、订阅设置、意见反馈这四部分。通过这部分的开发,我们将会接触到更多django的用法。

    山东程序员

扫码关注云+社区

领取腾讯云代金券