时隔16年Jeff Barr重返10.23-25 QCon上海站,带你看透AI如何重塑软件开发! 了解详情
写点什么

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

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

关注

评论

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

部署混合云环境的5大挑战

云计算

超级详细!全网独家首发的SpringCloud Alibaba 到底有多强?

Java 程序员 架构 面试

面向WEB开发人员的Docker(五):部署开发WordPress

devpoint

Docker Wordpress 部署 Docker-compose

存储技术入门,这些硬件应该首先有所了解

SunnyZhang的IT世界

服务器 存储 交换机 san

throw与throws的区别学习笔记

风翱

异常 5月日更

SAP CRM WebClient UI里的文件是如何上传到ABAP Netweaver后台的

汪子熙

chrome CRM SAP WebClient UI

玩转直播系列之消息模块演进(3)

vivo互联网技术

Java 服务器 消息系统 直播技术

数据湖vs数据仓库vs数据集市

数据社

数据仓库 数据湖 5月日更

高级软件工程师必备的五大技能

架构精进之路

5月日更

(VMware)ubuntu环境下搭建Swarm+Stack一站式部署容器集群

逸少

Docker Docker Swarm Docker-compose Ubuntu20.04

UI5应用部署到Fiori On-Premise和On-Cloud的Launchpad

汪子熙

Fiori SAP UI5 Launchpad

程序员写好技术文章的几点小技巧

阿里巴巴云原生

程序员 云原生 写作 写作技巧

简单了解 MySQL 中相关的锁

leonsh

MySQL 后端

5分钟速读之Rust权威指南(八)

wzx

rust

双非渣硕也能上岸?痛述阿里Java岗7轮技术面经历,险幸上岸

Java 程序员 架构 面试

redis sentinel架构

王瑞强

推荐计划 | 推荐好友用 CODING,获高额返现奖励

CODING DevOps

团队管理 敏捷开发 研发工具 开发团队

参与 Apache 顶级开源项目的 N 种方式,Apache Dubbo Samples SIG 成立!

阿里巴巴云原生

开源 开发者 云原生 dubbo 中间件

飞猪基于 Serverless 的云+端实践与思考

阿里巴巴云原生

Serverless 容器 运维 云原生 监控

为什么5、6月会空缺出大量技术岗?跳槽注意事项+面试官关心什么

Java架构师迁哥

使用Excel调用ABAP系统的函数

汪子熙

Excel Office SAP abap

科大讯飞语音转文字以及中文分词的Java测试代码

汪子熙

Java 人工智能

阿里云原生开源大家族加入中科院软件所开源软件供应链点亮计 - 暑期 2021

阿里巴巴云原生

开源 容器 微服务 开发者 云原生

☕【JVM 技术之旅】让你完全攻克内存溢出(OOM)这一难题(上)

码界西柚

JVM OOM 异常 Exception 5月日更

华为HMS生态和1+8+N的交叉点,点透棋局的华为帐号

脑极体

C4C和CRM里获取当前登录用户分配的Organization Unit

汪子熙

CRM SAP C4C Cloud for Customer

Kubernetes 普及系列:容器基础入门

CODING DevOps

Kubernetes

仰望天空,脚踏实地 —— CODING OKR 全新上线

CODING DevOps

团队管理 OKR

百度 Serverless 架构揭秘与应用实践

百度开发者中心

百度 开源 Serverless 云原生

IO

ltc

IO流

论:在996的天下,Java程序员该如何高效学习

Java架构师迁哥

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