QuantLib 金融计算——基本组件之 ExchangeRateManager 类
如果未做特别说明,文中的程序都是 python3 代码。
QuantLib 金融计算——基本组件之 ExchangeRateManager 类
载入 QuantLib:
import QuantLib as ql
print(ql.__version__)
1.15
概述
QuantLib 中管理货币之间汇率信息的类是 ExchangeRateManager
,配合 Money
类中的相应配置可以实现在货币的代数计算中自动转换汇率。
Money
类中的汇率转换配置
Money
类中的汇率转换配置通过静态函数 setConversionType
实现,可用的配置由三个内置整数表示,分别为:
配置类型 | 含义 |
---|---|
NoConversion |
不进行转换 |
BaseCurrencyConversion |
统一转换成一种基准货币(base currency) |
AutomatedConversion |
转换成计算表达式中出现的第一种货币 |
如果使用 BaseCurrencyConversion
,还需要在 Money
类调用静态函数 setBaseCurrency
配置基准货币。
ExchangeRateManager
ExchangeRateManager
是一个单体(Singleton),一般不直接显式实例化,需要通过调用静态函数 instance
获得唯一的一个 ExchangeRateManager
实例。
ExchangeRateManager.instance()
函数
ExchangeRateManager
成员函数有三个。
add(ex, start_date, end_date)
:向ExchangeRateManager
实例添加一个ExchangeRate
对象ex
,该汇率的有效期起始时间是start_date
(默认值是Date.minDate()
),该汇率的有效期结束时间是end_date
(默认值是Date.maxDate()
)。lookup(source, target, date, type)
:返回一个汇率对象,源货币为source
,目标货币是target
,日期在date
(默认为当前日期),类型为type
(默认值是ExchangeRate.Derived
)。ExchangeRateManager
实例将首先在所有记录的汇率中寻找想要的汇率;如果找不到,则试图根据汇率串联起来的路径返回最短路径上推算出的汇率(这种情况下type
必须是ExchangeRate.Derived
)。clear()
:清空记录的汇率。
示例,
ql.Money.setConversionType(ql.Money.AutomatedConversion)
usd = ql.USDCurrency()
cny = ql.CNYCurrency()
eur = ql.EURCurrency()
usdXcny = ql.ExchangeRate(usd, cny, 6.912)
usdXeur = ql.ExchangeRate(usd, eur, 0.834)
ql.ExchangeRateManager.instance().add(usdXcny)
ql.ExchangeRateManager.instance().add(
usdXeur,
ql.Date(1, ql.May, 2019),
ql.Date(3, ql.May, 2019))
m_eur = 100 * eur
m_cny = 150 * cny
ql.Settings.instance().evaluationDate = ql.Date(2, ql.May, 2019)
print(m_eur, " + ", m_cny, " = ", m_eur + m_cny)
ql.Settings.instance().evaluationDate = ql.Date(4, ql.May, 2019)
print(m_eur, " + ", m_cny, " = ", m_eur + m_cny)
EUR 100.00 + Y 150.00 = EUR 118.10
RuntimeError: no conversion available from CNY to EUR for May 4th, 2019
结果会根据货币的类型自动四舍五入。注意:欧元与人民币之间的汇率通过美元间接获得,当估值日期(evaluationDate
)那天没有可用汇率时,系统会报错。
QuantLib 金融计算——基本组件之 ExchangeRateManager 类的更多相关文章
- QuantLib 金融计算——基本组件之 Currency 类
目录 QuantLib 金融计算--基本组件之 Currency 类 概述 构造函数 成员函数 如果未做特别说明,文中的程序都是 python3 代码. QuantLib 金融计算--基本组件之 Cu ...
- QuantLib 金融计算——基本组件之 Date 类
目录 QuantLib 金融计算--基本组件之 Date 类 Date 对象的构造 一些常用的成员函数 一些常用的静态函数 为估值计算配置日期 如果未做特别说明,文中的程序都是 Python3 代码. ...
- QuantLib 金融计算——基本组件之 Calendar 类
目录 QuantLib 金融计算--基本组件之 Calendar 类 Calendar 对象的构造 一些常用的成员函数 自定义假期列表 工作日修正 如果未做特别说明,文中的程序都是 Python3 代 ...
- QuantLib 金融计算——基本组件之 DayCounter 类
目录 QuantLib 金融计算--基本组件之 DayCounter 类 DayCounter 对象的构造 一些常用的成员函数 如果未做特别说明,文中的程序都是 Python3 代码. QuantLi ...
- QuantLib 金融计算——基本组件之 DateGeneration 类
目录 QuantLib 金融计算--基本组件之 DateGeneration 类 QuantLib 金融计算--基本组件之 DateGeneration 类 许多产品的估值依赖于对未来现金流的分析,因 ...
- QuantLib 金融计算——基本组件之 Schedule 类
目录 QuantLib 金融计算--基本组件之 Schedule 类 Schedule 对象的构造 作为"容器"的 Schedule 对象 一些常用的成员函数 如果未做特别说明,文 ...
- QuantLib 金融计算——基本组件之 Index 类
目录 QuantLib 金融计算--基本组件之 Index 类 QuantLib 金融计算--基本组件之 Index 类 Index 类用于表示已知的指数或者收益率,例如 Libor 或 Shibor ...
- QuantLib 金融计算——基本组件之 InterestRate 类
目录 QuantLib 金融计算--基本组件之 InterestRate 类 InterestRate 对象的构造 一些常用的成员函数 如果未做特别说明,文中的程序都是 Python3 代码. Qua ...
- QuantLib 金融计算——基本组件之 Money 类
目录 QuantLib 金融计算--基本组件之 Money 类 概述 构造函数 成员函数 如果未做特别说明,文中的程序都是 python3 代码. QuantLib 金融计算--基本组件之 Money ...
随机推荐
- Python: lambda, map, reduce, filter
在学习python的过程中,lambda的语法时常会使人感到困惑,lambda是什么,为什么要使用lambda,是不是必须使用lambda? 下面就上面的问题进行一下解答. 1.lambda是什么? ...
- Java Virtual Machine (JVM) objects 虚拟机实例的产生 退出 两种线程
Apache Spark is built around a distributed collection of immutable Java Virtual Machine (JVM) object ...
- java的多生产者多消费者例子
import java.util.concurrent.locks.*; public class Test9 { public static void main(String[] args) { / ...
- 阿里妈妈-RAP项目的实践(1)
在同事的推荐下,去了解了一下http://thx.github.io/RAP/study.html#,它是发现在前后端分离开发的神器 下面我们来简单上一组代码,来简单了解一下rap <!DOCT ...
- bapi_goodsmvt_create-GR
BAPI_GOODSMVT_CREATE 使用方法 * GMCODE Table T158G - - MB01 - Goods Receipts for Purchase Order * - MB31 ...
- ARM编译器中预定义的宏
arm系列目前支持三大主流的工具链,realview的armcc,iar ewarm的iccarm,gnu的gcc,编译器在编译的时候会预定义一些宏,这些宏在工程中起到不可或缺的作用. 例如 /* d ...
- vue axios拦截器介绍
关于axios的拦截器是一个作用非常大,非常好用的东西.分为请求拦截器和响应拦截器两种.我一般把拦截器写在main.js里. 1. 请求拦截器 请求拦截器的作用是在请求发送前进行一些操作,例如在每个请 ...
- hihocoder #1062 : 最近公共祖先·一(小数据量 map+set模拟+标记检查 *【模板】思路 )
#1062 : 最近公共祖先·一 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho最近发现了一个神奇的网站!虽然还不够像58同城那样神奇,但这个网站仍然让小Ho乐在 ...
- ReentrantReadWriteLock读写锁实现分析
排他锁在同一时刻只允许一个线程进行访问,而读写锁在同一时刻允许多个读线程访问,但是在写线程访问时,所有的读线程和其他的写线程均被阻塞.读写锁内部维护了一对锁,一个读锁和一个写锁,通过分离读锁和写锁,使 ...
- linux下把命令执行的结果输出
我们知道在linux下当我们想把文字用命令输入到一个文本下时可以用echo命令 例:echo "nihao" > /z.txt 同样当我们想把命令执行的结果也输入到一个文 ...