QuantLib 金融計算——基本組件之 ExchangeRateManager 類

若是未作特別說明,文中的程序都是 python3 代碼。函數

QuantLib 金融計算——基本組件之 ExchangeRateManager 類

載入 QuantLib:lua

import QuantLib as ql

print(ql.__version__)
1.15

概述

QuantLib 中管理貨幣之間匯率信息的類是 ExchangeRateManager,配合 Money 類中的相應配置能夠實如今貨幣的代數計算中自動轉換匯率。code

Money 類中的匯率轉換配置

Money 類中的匯率轉換配置經過靜態函數 setConversionType 實現,可用的配置由三個內置整數表示,分別爲:對象

配置類型 含義
NoConversion 不進行轉換
BaseCurrencyConversion 統一轉換成一種基準貨幣(base currency)
AutomatedConversion 轉換成計算表達式中出現的第一種貨幣

若是使用 BaseCurrencyConversion,還須要在 Money 類調用靜態函數 setBaseCurrency 配置基準貨幣。get

ExchangeRateManager

ExchangeRateManager 是一個單體(Singleton),通常不直接顯式實例化,須要經過調用靜態函數 instance 得到惟一的一個 ExchangeRateManager 實例。it

ExchangeRateManager.instance()

函數

ExchangeRateManager 成員函數有三個。io

  • 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():清空記錄的匯率。

示例,table

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)那天沒有可用匯率時,系統會報錯。class

相關文章
相關標籤/搜索