AICon 上海站|日程100%上线,解锁Al未来! 了解详情
写点什么

使用 F#与 QuantLib 开发金融应用

  • 2013-05-06
  • 本文字数:1260 字

    阅读完需:约 4 分钟

QuantLib 是一个适用于 F#语言的开源类库,用于计量金融的建模、交易和风险管理。为调用 QuantLib,开发者需要使用 NQuantLib.dll 和 NQuantLibc.dll,前者是一个.NET 组件,而后者是一个本地组件。

如果以上类库文件不可用,那么开发者可以从.lib 文件、C++ 源代码和头文件创建它们;而要获取.lib 文件和头文件,开发者需要安装 Boost。开发者也可以从 Boost 或 BoostPro 的官方代码库中的源代码来构建这些类库。

下一步是安装 QuantLib,并按照官方文档提供的指南使用微软Visual C++ 构建.lib 和头文件。安装后,下载QuantLib-SWIG 压缩文件和SWIG(注:SWIG 是帮助C/C++ 编写的软件与其它高级编程语言嵌入联接的工具),并运行位于QuantLib-SWIG\CSharp 路径下的swig.cmd 文件,生成C++ 封装文件。接下来开发者可以使用Visual Studio 构建NQuantLibc.dll 和NQuantLib.dll。

如果开发者尝试使用Visual C++ 2012 构建这些类库,则需按如下所示修正 auto_link.hpp

打开 auto_link.hpp 并找到下面几行代码:

#else

# error "unknown Microsoft compiler"

在这两行代码前面插入以下内容:

#elif (_MSC_VER == 1700)

# define QL_LIB_TOOLSET "vc110"

右键点击 QuantLib 项目并选择“属性”选项,在 “配置属性|通用”中,根据当前在构建 QuantLib 的版本是发布版本或者调试版本,将“目标名称”改为 QuantLib-vc110-mt 或 QuantLib-vc110-mt-gd。

上述变通方案由一位昵称为 pmcs 的 F#开发者发表在微软官方博客中,该方案已经通过了产品团队的审核。

完成以上步骤后,将 NQuantLib.dll 和 NQuantLibc.dll 放在 F#脚本路径下面叫做“引用”的目录中。如果使用的是一个项目,那么将 NQuantLibc.dll 作为一个文件添加到该项目,并将“复制到输出”设置为“如果较新则复制”。

为了在 Visual Studio 中使用 F#和 QuantLib 工作,开发者需要将“工具|选项|F#工具|F# 交互|64-bit”关闭。开发者也可以使用 MonoDevelop、Xamarin Studio 或任何自己喜欢的文本编辑器。

#I "references"

#r "NQuantLib.dll"``let date = QuantLib.Date.todaysDate()``printfn "today is: %s" (date.ISO())

以上代码段在 F#交互式控制台中输出日期。我们可以看到,这里引用了 NQuantLib.dll 并调用了 todaysDate() 函数。

在大型项目中,开发者还可以用关键字“use”替代“let”,以便恰当地清理对象。

use date = QuantLib.Date.todaysDate()

Don Syme 与 Alexandre Radicchi 共同领导的 F#产品团队,在 Mono 中检查了编译类库文件所需的步骤,同时还涉及了少量额外的例子,例如计算条式组合的欧式看涨期权的价格,或是日期和日程。

如果开发者有兴趣对 QuantLib 进行细致的探索,Don 推荐阅读《 Implementing QuantLib 》这本书。该书的作者免费提供了全部章节的手稿。

查看英文原文 Develop Financial Applications with F# and QuantLib


感谢康锦龙对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2013-05-06 06:042068
用户头像

发布了 256 篇内容, 共 78.5 次阅读, 收获喜欢 10 次。

关注

评论

发布
暂无评论
发现更多内容

10分钟在 Rainbond 上部署 mall 电商项目

北京好雨科技有限公司

从数据到价值,DataOps精益数据运营概述

阿里技术

数字化 DataOps

Kratos微服务框架实现IoT功能:设备实时地图

golang 微服务 物联网 IoT Kratos

透视华为云云原生数据库的演进,能给行业带来哪些启发?

华为云开发者联盟

数据库 云原生 后端 华为云 企业号 1 月 PK 榜

备份谷歌或其他浏览器插件

Geek_7ubdnf

浏览器 Google

盘点16款跨平台应用程序开发框架

FN0

跨端框架 跨端运行 跨端发展

SpringBoot实例

Geek_7ubdnf

Java springboot

Dubbo3 在同程旅行的实践

阿里巴巴中间件

阿里云 云原生 dubbo

一文搞懂Spring,堪称Spring源码终结者

小小怪下士

Java spring spring源码

华为云发布CodeArts Check代码检查服务 守护软件质量和安全

科技热闻

Java基本语法

Geek_7ubdnf

Java

ModuleNotFoundError No module named 'PIL'问题解决

Geek_7ubdnf

Python

小令观点 | 去中心化可没那么难,古代令牌就已经做到了

令牌云数字身份

身份 Web3.0

WXSS 如何进行编译?

FN0

小程序 微信

Java中Get和Post的使用

Geek_7ubdnf

Java

Linux下OpenCV出现错误:ASSERT false in file qasciikey.cpp, line 501

Geek_7ubdnf

Linux OpenCV

大银行数字化升级之后,火山引擎VeDI这次要把能力带给中小金融机构

字节跳动数据平台

大数据 金融 数字化 金融行业

pip安装报错:Command python setup.py egg_info failed with error code 1

Geek_7ubdnf

Python

测试开发 | 跨平台设备管理方案 Selenium Grid

霍格沃兹测试开发学社

写作的“收益”超乎想象

王中阳Go

深度思考 学习方法 写作 写作技巧 写作感悟

走好这三步,不再掉进云上安全的沟里!

亚马逊云科技 (Amazon Web Services)

亚马逊云科技 Builder 专栏

MegCC 新版本来啦!新增 Benchmark 等工具,性能大幅提升!有奖征文活动同步启动

MegEngineBot

深度学习 benchmark MegEngine MegCC 模型编译器

我理解的金融级数据库

宫博

分布式数据库 金融行业 oceanbase 金融信创 金融科技创新

软件测试/测试开发 | Jenkins 如何参数化job ?

测试人

软件测试 持续集成 jenkins 测试开发 测试开发自动化测试

软件测试/测试开发 | Jenkins 节点该如何管理?

测试人

软件测试 持续集成 jenkins 自动化测试 测试开发

Kratos微服务框架实现权鉴 - Casbin

golang 微服务 鉴权 rbac Kratos

当你输入网址,小手一点,然后发生了什么

华为云开发者联盟

前端 HTTP 华为云 企业号 1 月 PK 榜

使用 DataEase 制作动态轮播仪表板

搞大屏的小北

pip安装后仍有ImportError No module named XX问题解决

Geek_7ubdnf

Python

Kratos微服务框架实现权鉴 - OPA

golang 微服务 鉴权 OPA Kratos

使用F#与QuantLib开发金融应用_语言 & 开发_Anand Narayanaswamy_InfoQ精选文章