- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
谁能提供一个示例,说明如何使用 QuantLib 复制 Excel/OpenOffice YIELD
和 PRICE
函数?
我有几个示例,但我还不太了解所有设置。当我尝试更改某些值时,我要么得到零,要么得到一些无意义的值。理想情况下,我想创建等效于 YIELD/PRICE 函数的 c++。
在我的第一步中,我不需要复制 Excel 日期建模中的缺陷。我可以等到稍后再制作一个完全相同的拷贝。不过如果你知道那也很棒。
PRICE
示例,在 OpenOffice 中:
PRICE("2008-02-15","2010-11-15",5%,7%,100,2,1) = 95.068419616675
我的 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 & maturity_,
double coupon_, double yield_, double redemption_, unsigned frequency_ )
{
// date set up
//Calendar calendar = UnitedStates(UnitedStates::GovernmentBond);
Calendar calendar = NullCalendar(); //small improvement
Date settlementDate( convert_date( settlement_ ) );
// the settlement date must be a business day
settlementDate = calendar.adjust(settlementDate);
Integer fixingDays = 0; //1;
Natural settlementDays = 0; //1
Date evalDate = calendar.advance(settlementDate, -fixingDays, Days);
// Evaluation date (TODO: What should this actually be?)
Settings::instance().evaluationDate() = evalDate;
// bond set up
Real faceAmount = 100;
Real redemption = redemption_;
Date issueDate( 1, January, 2001); //NOTE: shouldn't be relevant for price/yield calculations
Date maturity( convert_date( maturity_ ) );
Real couponRate = coupon_;
Real yield = yield_;
//ActualActual dayCounter( ActualActual::Bond );
ActualActual dayCounter;
//Actual365Fixed dayCounter;
RelinkableHandle<YieldTermStructure> discountingTermStructure;
boost::shared_ptr<YieldTermStructure> flatTermStructure(
new FlatForward(
settlementDate,
yield,
dayCounter,
Compounded,
Frequency( frequency_ ) ));
discountingTermStructure.linkTo(flatTermStructure);
boost::shared_ptr<PricingEngine> bondEngine(
new DiscountingBondEngine(discountingTermStructure));
Schedule fixedBondSchedule(
issueDate,
maturity,
Period( Frequency( frequency_ ) ),
calendar,
Unadjusted,
Unadjusted,
DateGeneration::Backward,
false /*EOM*/); //strangely makes no difference in our calculations
boost::shared_ptr<Bond> fixedRateBond( new FixedRateBond(
settlementDays,
faceAmount,
fixedBondSchedule,
std::vector<Rate>(1, couponRate),
dayCounter,
Unadjusted,
redemption) );
fixedRateBond->setPricingEngine(bondEngine);
return fixedRateBond;
}
//OpenOffice: PRICE("2008-02-15","2010-11-15",5%,7%,100,2,1)
double bond_price( boost::gregorian::date const & settlement_, boost::gregorian::date const & maturity_,
double coupon_, double yield_, double redemption_, unsigned frequency_ )
{
shared_ptr<Bond> bond( create_bond( settlement_, maturity_, coupon_, yield_, redemption_, frequency_ ) );
return bond->cleanPrice();
}
//OpenOffice: PRICE("2008-02-15","2010-11-15",5%,7%,100,2,1)
double bond_yield( boost::gregorian::date const & settlement_, boost::gregorian::date const & maturity_,
double coupon_, double price_, double redemption_, unsigned frequency_ )
{
shared_ptr<Bond> bond( create_bond( settlement_, maturity_, coupon_, 0, redemption_, frequency_ ) );
ActualActual dayCounter;
return bond->yield( price_, dayCounter, Compounded, Frequency(frequency_) );
}
最佳答案
如果你对OpenOffice中PRICE
函数的实现感兴趣,可以看AnalysisAddIn::getPrice的实现中的代码.这是指getPrice_ 分析 helper.cxx
中的函数。也许你会发现那里发生了什么。
请注意,OpenGrok 似乎在这里配置错误,因此单击功能可能不起作用。但我想您可以在目录 /OOO340_m0/scaddins/source/analysis 中的文件中找到所需的一切。 .
关于c++ - QuantLib OpenOffice/Excel YIELD/PRICE 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5221428/
我想在我的 OpenOffice writer-document 中放置一个“签名字段”。 我需要 iOS/gPlay 应用程序 "PDF Forms"在触摸屏上签署 PDF 文档(手写/笔)。 根据
我已经以动态填充的Libre / OpenOffice Base形式获得了表控件。 我想更改其高度以匹配行数。 怎么做? 我已经尝试更改getSize() / setSize()和height属性,但
我在 Calc 电子表格中有几个数据列,每个列有 400 到 500 个条目。对于这些列中的每一列,我只想简单地找到均值和标准差,但不知道如何进行。 有人可以用简单而非技术性的语言逐步指导我如何做到这
我有两列有数字。当另一个有重复时,另一个只有一次数字。这些列中的数字不匹配。我需要在 B 列中找到在 A 列中匹配的所有数字。 这可能更好地解释了它: 甲乙 1 2 2 2 4 5 6 5 7 6 8
我想为 Calc 编写一个返回 #VALUE 的 Basic 函数!可使用 ISERR() 进行测试。 Function foo() foo = #VALUE! End Function 但是
我知道 OpenOffice.org 中的风格 .... 但 我想要与 HTML 样式相同的内联样式, 喜欢 (类似的东西)......这可能吗? 如果你知道这样的例子或文章,请引用我。 最佳答案
我正在尝试将 openOffice 作为 CentOS(非图形)服务器上的服务启动。 soffice -headless -nologo -nofirststartwizard -accept="so
有没有办法像在其他语言中一样在 OpenOffice Basic 中继续循环? For i = 0 To 10 If i = 5 Then Continue For # Not work
我正在尝试使用 OpenOffice 在 WinXP MSVC 2008.NET 上编写一个简单的“Hello World”窗口3.0 API和SDK。 这篇文章对于初学者来说很重要... http:
基本上,我希望 LibreOffice Calc 做我告诉它的,而不是它想要的。 例如: 当我输入 1.1.12 时,我想在那个单元格中有 1.1.12,而不是 01.01.2012 或其他什么。 当
让我们看看这个例子: 我有 HTML 标记的文本: Example text 我有 *.odt(OpenDocument 文本)文档,我想在其中放置此 HTML 文本,其格式取决于 HTML 标签(在
有没有什么方法可以在 linux 上将 odt 文档转换为 doc 或 rtf 而不使用 openoffice 或任何依赖于安装 openoffice 的库? 最佳答案 OpenOffice.org
我想过滤掉特定列上具有特定颜色的行。我尝试几乎到处搜索但找不到答案。希望大家给点好的建议,谢谢。 最佳答案 据我所知,目前没有内置函数允许根据单元格的格式选择单元格。但在 this OOo forum
我需要使用 OpenOffice Java API 复制文档部分并将其粘贴到另一个文档部分。到目前为止,我已经设法复制源文档部分的文本并将其粘贴到目标文档的部分(参见下面的示例)。 但是,问题是非文本
我有一个小问题,我需要计算控制台内的字数才能阅读 doc、docx、pptx、ppt、xls、xlsx、odt、pdf ......所以不要建议我 | wc -w 或 grep 因为它们只适用于文本或
是否可以将单元格的内容放在公式中。我所说的公式是指数学公式编辑器(插入-> 对象-> 公式)。 最佳答案 据我所知,无法从公式中引用单元格。数学公式编辑器对 OO Calc 一无所知。但是,您可以在需
在第一张原始数据和第二张修改数据中,如果 sheet1 和 sheet2 数据不匹配,我想比较两个工作表数据并用颜色标记。 我有两个不同的工作表,数据如下。 工作表 1: --------A-----
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 5年前关闭。 Improve thi
我编辑了一个来自客户的文档,其中有一些亮点,然后决定删除评论中的亮点。 无论出于何种原因,该文档突出显示了许多项目符号和编号列表部分,当我尝试选择整个文档并将突出显示更改为“无填充”时,我无法还原这些
我是 Calc 的新手,但我是 Excel 的老手。不幸的是,我没有后者。我正在尝试使用我需要使用的数据创建一个新的单元格,如下所示 AF Afghanistan AL Albania D
我是一名优秀的程序员,十分优秀!