若是未作特別說明,文中的程序都是 python3 代碼。函數
載入 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