标签: quantlib

QuantLib OpenOffice/Excel YIELD/PRICE功能

有人可以提供一个如何使用QuantLib复制Excel/OpenOffice YIELDPRICE函数的示例吗?

我有一些例子,但我还不太清楚所有的设置.当我尝试更改某些值时,我会得到零或一些荒谬的值.理想情况下,我想创建与YIELD/PRICE函数等效的c ++.

在我的第一步中,我不需要在Excel日期建模中复制缺陷.我可以等到以后才能生成完全相同的副本.虽然如果你知道这也很棒.


PRICE 例如,在OpenOffice中:

PRICE("2008-02-15","2010-11-15",5%,7%,100,2,1) = 95.068419616675
Run Code Online (Sandbox Code Playgroud)

我的QuantLib代码能够获得95.066759有点偏差.至少我有基本的价格函数,我想现在得到一个完全匹配的结果.


我不能轻易包含所有包装代码,但基本代码如下.

#include <ql/time/calendar.hpp>
#include <ql/time/daycounters/actualactual.hpp>
#include <ql/time/daycounters/actual365fixed.hpp>
#include <ql/time/schedule.hpp>
#include <ql/time/calendars/unitedstates.hpp>
#include <ql/time/calendars/nullcalendar.hpp>

#include <ql/settings.hpp>
#include <ql/handle.hpp>
#include <ql/termstructures/yield/flatforward.hpp>
#include <ql/instruments/bonds/fixedratebond.hpp>

#include <ql/pricingengines/bond/discountingbondengine.hpp>
#include <ql/utilities/dataformatters.hpp>

#include <iostream>
#include <iomanip>

#include "boost/date_time/gregorian/gregorian.hpp"
using namespace QuantLib;

Date convert_date( boost::gregorian::date const & date )
{
    unsigned mon = date.month();
    return Date( date.day(), Month(mon), date.year() );
}

shared_ptr<Bond> create_bond( boost::gregorian::date const & settlement_, boost::gregorian::date const & …
Run Code Online (Sandbox Code Playgroud)

c++ finance quantlib

16
推荐指数
1
解决办法
2309
查看次数

Python quantlib示例?

有谁知道Python的任何好的quantlib示例?我似乎无法找到任何地方......

python quantlib

13
推荐指数
2
解决办法
6375
查看次数

使用Python在quantlib中定价浮动债券

我试图使用Quantlib(v1.2)SWIG包装器在python中为一个非常基本的浮动利率债券定价.我修改了文档中包含的示例.

我的债券有4年的到期期限.libor设定为10%,债券的差价为0.我的问题是,如果我以10%的比率打折,为什么债券的PV不是100?我的值为99.54.

谢谢!

from QuantLib import *

frequency_enum, settle_date = 4, Date(5, 1, 2010)
maturity_date = Date(5, 1, 2014)
face_amount = 100.0
settlement_days = 0
fixing_days = 0

calendar = NullCalendar()
settle_date = calendar.adjust(settle_date)
todays_date = calendar.advance(settle_date, -fixing_days, Days)
Settings.instance().evaluationDate = todays_date

rate = 10.0 / 100.0

flat_forward = FlatForward(settle_date,
                           rate,
                           Thirty360(),
                           Compounded,
                           frequency_enum)

discounting_term_structure = RelinkableYieldTermStructureHandle(flat_forward)
index_term_structure = RelinkableYieldTermStructureHandle(flat_forward)

index = USDLibor(Period(3, Months), index_term_structure)

schedule = Schedule(settle_date,
                    maturity_date, Period(frequency_enum),
                    NullCalendar(),
                    Unadjusted, Unadjusted,
                    DateGeneration.Forward, False)

floating_bond = FloatingRateBond(settlement_days,
                                 face_amount,
                                 schedule, …
Run Code Online (Sandbox Code Playgroud)

python quantlib quantlib-swig

9
推荐指数
1
解决办法
3519
查看次数

在quantlib-python中计算EuropeanOptionImpliedVolatility

我有使用RQuantlib库的R代码.为了从python运行它我使用RPy2.我知道python有自己的quantlib绑定(quantlib-python).我想完全从R切换到python.

请告诉我如何使用quantlib-python运行以下命令

import rpy2.robjects as robjects

robjects.r('library(RQuantLib)')
x = robjects.r('x<-EuropeanOptionImpliedVolatility(type="call", value=11.10, underlying=100,strike=100, dividendYield=0.01, riskFreeRate=0.03,maturity=0.5, volatility=0.4)')
print x
Run Code Online (Sandbox Code Playgroud)

样品运行:

$ python vol.py 
Loading required package: Rcpp
Implied Volatility for EuropeanOptionImpliedVolatility is 0.381
Run Code Online (Sandbox Code Playgroud)

python r rpy2 quantlib

8
推荐指数
1
解决办法
3693
查看次数

OSX 上的 RQuantLib 安装无法检测 QuantLib 安装

我正在尝试在具有最新版本的 R (3.2.2) 的 MAC (OSX 10.10) 上安装 RQuantLib。我了解 RQuantLib 需要 QuantLib 并已编译并安装它,显然成功了。至少当我打字时

\n\n
quantlib-config --version\n
Run Code Online (Sandbox Code Playgroud)\n\n

在命令提示符下,我回来了

\n\n
1.6.2\n
Run Code Online (Sandbox Code Playgroud)\n\n

但是,当我尝试通过 GUI(包安装程序)安装 RQuantLib 时,我得到以下信息:

\n\n
* installing *source* package \xe2\x80\x98RQuantLib\xe2\x80\x99 ...\n** package \xe2\x80\x98RQuantLib\xe2\x80\x99 successfully unpacked and MD5 sums checked\nchecking for g++... g++\nchecking whether the C++ compiler works... yes\nchecking for C++ compiler default output file name... a.out\nchecking for suffix of executables... checking whether we are cross compiling... no\nchecking for suffix of object files... o\nchecking whether we are using the GNU …
Run Code Online (Sandbox Code Playgroud)

r quantlib osx-yosemite

8
推荐指数
0
解决办法
826
查看次数

为什么QuantLib会引入Handle类?

我检查这张幻灯片,但仍然没有得到:

1) what problem does Handle sovled?

2) what is the benefit to add the Handle class?
Run Code Online (Sandbox Code Playgroud)

从它的源代码,我无法得到任何线索:

   template <class Type>
    class Handle {
      protected:
        class Link : public Observable, public Observer {
          public:
            explicit Link(const shared_ptr<Type>& h =
                                         shared_ptr<Type>());
            void linkTo(const shared_ptr<Type>&);
            bool empty() const;
            void update() { notifyObservers(); }
          private:
            shared_ptr<Type> h_;
        };
        boost::shared_ptr<Link<Type> > link_;
      public:
        explicit Handle(const shared_ptr<Type>& h =
                                         shared_ptr<Type>());
        const shared_ptr<Type>& operator->() const;
        const shared_ptr<Type>& operator*() const;
        bool empty() const;
        operator boost::shared_ptr<Observable>() …
Run Code Online (Sandbox Code Playgroud)

quantlib

7
推荐指数
1
解决办法
1018
查看次数

R 中的 QuantLib:键设置

我正在尝试使用指数样条拟合函数通过 QuantLib 构建美国财政部曲线样条。但是,我得到了非常奇怪的结果,无法弄清楚原因。即,生成的贴现曲线的负利率,其中输入都是正收益率,前端收益率存在巨大差异(下图)。

我正在为整个债券领域提供函数 > 1Y,这会导致一些重复的到期日(对于在不同时间发行并沿曲线向下滚动的债券),所以我不确定这是否会导致一些拟合问题。我正在使用的整个数据框(在代码中命名为 df)显示在底部。

这是我的代码来拟合曲线和下面的相应数据。(所述“YrsToMat”列由产生YrsToMat<- sapply(maturities, yearFraction, startDates = Sys.Date(), dayCounters = 9) #9 = ActualActual.Bond,其中maturities是所有的键期限的列表)。

谢谢你的帮助!

library(RQuantLib)

YrsToMat <- df$YrsToMat
marketQuotes <- df$Prices
cpn_rates <- df$Coupons

dateparams <- list(settlementDays=1, period="Semiannual", 
                   dayCounter="ActualActual.Bond", 
                   businessDayConvention ="ModifiedFollowing")

curveparams <- list(method="ExponentialSplinesFitting", 
                    origDate = Sys.Date())

curve <- FittedBondCurve(curveparams, YrsToMat, cpn_rates, marketQuotes, dateparams)

Run Code Online (Sandbox Code Playgroud)

输出图

structure(list(ISIN = structure(1:261, .Label = c("US912810EM63", 
"US912810EN47", "US912810EP94", "US912810EQ77", "US912810ES34", 
"US912810ET17", "US912810EV62", "US912810EW46", "US912810EX29", 
"US912810EY02", "US912810EZ76", "US912810FA17", "US912810FB99", 
"US912810FE39", "US912810FF04", "US912810FG86", "US912810FJ26", 
"US912810FM54", "US912810FP85", "US912810FT08", "US912810PT97", …
Run Code Online (Sandbox Code Playgroud)

r quantlib

7
推荐指数
1
解决办法
191
查看次数

通过SWIG为C#编译Quantlib

任何人都有使用SWIG的经验吗?我目前正在研究QuantLib,并发现可以使用SWIG生成C#代码.我们正在探索使用QuantLib和专有的闭源库(可能以.Net dlls的形式提供)来创建财务功能组合库的选项.我们的想法是将这两者结合起来创建一个统一的超级库.我已经看到了QuantLib.Net端口,但它似乎没有被主动维护(并且不完全确定实际移植了多少),所以我避免使用它.

第一步是评估生成可以在任何地方使用的库的难度,即MS Office应用程序(通过VBA),控制台应用程序以及服务器端(例如Web应用程序).我认为这涉及COM Interop,但我不知道从哪里开始,或者我是否在正确的轨道上.

我没有使用C++的经验; 和COM是我(我现在的一个流行语),我已经釉面了.我知道与此主题相关的相关MSDN文章.

我正在寻找以下几行的帮助:

  1. 是否有在C#中使用QuantLib的替代方案?
  2. 关于我的开发环境,我需要什么?
  3. 有没有人知道通过SWIG编译的即用型QuantLib C#库?(一等奖=对我来说工作少)

任何帮助表示赞赏

编辑:我已经接受了我的答案作为正确的答案,除非提供更好的答案.

c# c++ swig com-interop quantlib

6
推荐指数
1
解决办法
5326
查看次数

QuantLib C++库 - FixedRateBond优惠券

使用QuantLib C++库,我试图评估在其生命周期内具有不同优惠券的债券(例如前三年为6%,其余三年为4%).

我注意到FixedRateBond该类的构造函数接受了优惠券向量const std::vector< Rate > &coupons:

FixedRateBond (Natural settlementDays,
Real faceAmount,
const Schedule &schedule,
const std::vector< Rate > &coupons,
const DayCounter &accrualDayCounter,
BusinessDayConvention paymentConvention=Following,
Real redemption=100.0,
const Date &issueDate=Date(),
const Calendar &paymentCalendar=Calendar())
Run Code Online (Sandbox Code Playgroud)

这似乎对我的目的有用,但我如何指定每张优惠券开始适用的日期?

c++ quantlib

5
推荐指数
1
解决办法
490
查看次数

从多个线程使用 QuantLib 的正确方法是什么?

我找不到任何明确描述 QuantLib 线程安全属性的文档(或没有它们!)。QuantLib配置文档列出了许多与线程安全相关的编译时选项,从中我推断,默认情况下,QuantLib 并不完全是线程安全的。

特别是,有:

  • QL_ENABLE_SESSIONS - “如果定义,单例将为不同的会话返回不同的实例。您必须在命名空间 QuantLib 中提供一个 sessionId() 函数并将其与库链接,为每个会话返回不同的会话 ID。默认情况下未定义。”

  • QL_ENABLE_THREAD_SAFE_OBSERVER_PATTERN - “如果定义,将使用观察者模式的线程安全(但性能较低)版本。如果您想通过 JVM 或 .NET 生态系统或任何环境中的 SWIG 层使用 QuantLib,您应该定义它异步垃圾收集器。默认情况下未定义。”

  • QL_ENABLE_SINGLETON_THREAD_SAFE_INIT - “定义它以使单例初始化线程安全。默认情况下未定义。与多个会话不兼容。”

如果我想使用 QuantLib,我应该使用哪些选项,以及我应该采取哪些其他步骤:

  1. 来自多个线程,但永远不会同时(例如,仅在持有全局锁时)?

  2. 同时来自多个线程,但不在它们之间共享任何对象?

  3. 同时来自多个线程,在它们之间共享对象?

我的应用程序的自然结构是一个有向无环图,在一端输入一个恒定的市场数据流,用于计算和更新各种对象,并在另一端生成一个估计价格流。我非常希望能够让多个内核并行工作,因为有些计算需要很长时间。

该应用程序将主要用 Java 编写,与 QuantLib 接口的 C++ 部分最少。我不打算使用 SWIG 包装器。我很高兴在没有 Java 垃圾收集器帮助的情况下对 QuantLib 对象进行内存管理。


编辑!如果您决定设置这些选项中的任何一个,那么在 unix 上,将相应的标志设置为 ./configure:

--enable-sessions
--enable-thread-safe-observer-pattern
--enable-thread-safe-singleton-init
Run Code Online (Sandbox Code Playgroud)

c++ concurrency multithreading thread-safety quantlib

5
推荐指数
1
解决办法
1360
查看次数