2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

使用 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:042401
用户头像

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

关注

评论

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

Golang中的runtime包

liuzhen007

28天写作 12月日更

利用 Github Pages 和 Hugo 快速搭建免费的个人网站

xcbeyond

GitHub Pages Hugo 28天写作 12月日更

Timsort - 混合、稳定、高效的排序算法

Geek漫游指南

算法 排序 插入排序 归并排序 Timosrt

介绍一些拉新的具体方案

石云升

AARRR 28天写作 产品增长 12月日更

我在《Effective STL》中的找到的知识点

SkyFire

c++ stl

设计千万级学生管理系统的考试试卷存储方案

ren

#架构实战营

Tinder系统架构

俞凡

架构 大厂实践 Tinder

56 K8S之Kubernetes监控

穿过生命散发芬芳

k8s 28天写作 12月日更

写博客的感想

为自己带盐

28天写作 12月日更

模块三作业

浮生若梦

「架构实战营」

盘点 2021|海军的 2021年终总结, 跳槽后,我收获了什么

程序员海军

年终总结 2021年度技术盘点与展望

人生的意义要不断探索实现

mtfelix

28天写作

Springboot国际化消息和源码解读

DoneSpeak

Java spring springboot

.NET6新东西---TryGetNonEnumeratedCount

喵叔

28天写作 12月日更

GraphQL与REST:两种API架构

devpoint

graphql REST API 12月日更

【CSS 学习总结】第六篇 - CSS 布局概述

Brave

CSS 12月日更

没事-2022继续做梦

将军-技术演讲力教练

Dubbo 框架学习笔记十三

风翱

dubbo 12月日更

画饼,是领导者的基本技能

搬砖的周狮傅

管理 管理经

HarmonyOS(鸿蒙)——滑动事件

李子捌

28天写作 21天挑战 12月日更

25《重学JAVA》--多线程(二)

杨鹏Geek

Java25周年 28天写作 12月日更

重载(overload) 和重写(override) 的区别?重载的方法能否根据返回类型进行区分?

海拥(haiyong.site)

28天写作 12月日更

跟着动画学 Go 数据结构之Go 实现栈

宇宙之一粟

Go 语言 12月日更

Docker Rootless 在非特权模式下运行 Docker

Se7en

大公司生存的几把斧

圣迪

人才 组织 战略 大公司 技术委员会

前端开发:自定义时间轴的使用

三掌柜

28t 28天写作 12月日更

如何命名指标和标签

耳东@Erdong

Prometheus label Metric Naming

架构实战营模块七作业

spark99

架构实战营

发射、加速与着陆:一群科学家的奥林帕斯探索之旅

脑极体

代码实验01:main 方法可以继承吗?

Seven的代码实验室

阿里二面 main方法

追热点

张老蔫

28天写作

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