搜档网
当前位置:搜档网 › quantlib入门(5)

quantlib入门(5)

quantlib入门(5)
quantlib入门(5)

2009-12-20 22:16

QuantLib入门(五)金融工具(Instrument)框架

前面已经说过,QuantLib将所有的金融工具抽象出一个基类"Instrument",这在面向对象的设计里是一个很自然的想法:设计一个通用的接口,通过对这接口的调用,就可以实现对其任何子类的动态调用,这就是多态。但是现实中的金融工具非常繁杂,能抽象出来的公共接口非常有限,因此将接口限于其现值的返回和工具是否到期的判断,如下:

class Instrument

{

public:

virtual ~Instrument;

virutal Real NPV() const=0;

virtual Real errorEstimate() const=0;

virtual bool isExpired() const=0;

void setPricingEngine(const boost::shared_ptr&);

};

这是Instrument的一个简单的描述代码,而非真实代码。由此Instrument类就派生出诸如债券、股票、互换、期权等等具体的金融工具。如下图:

图中我们可以看到由Instrument派生出了option,bond,swap等等具体的金融工具子类。同时,我们注意到,Instrument类也是LazyObject类的子类。这个LazyObject类是什么呢?简单地说,LazyObject是一个模板类,作用是定义对缓存中的数据进行重新计算的框架,而将具体的计算细节留给了Instrument类(注意,这与engine不同)。这样的实现方式是使用了设计模式"template method",本文末尾将进行简单地介绍,现在只给出一个简单的描述代码(同样并非真实代码)。class LazyObject:public virtual Observer, public virtual Observable

{

protected:

mutable bool calculated_;

virtual void performCalculations() const=0;

public:

void update(){ calculated_=false;}

virtual void calculate() const

{

if(!calculated_)

{

calculated_=true;

try

{

performCalculation();

}

catch(...)

{

calculated_=false;

throw;

}

}

}

};

LazyObject中,两个虚函数 performCalculations和 calculate都可以在子类中实现,以进行具体的计算工作。

由于这不是QuantLib结构相关的文章(但我确实参考并借鉴了文档Implementing QuantLib),在此就不深入了。在此提一下Observer和Observerable类。因为要对一个金融工具进行计算,需要有数据和计算数据的方法。LazyObject方法可以在诸如LazyObject中定义,那么数据呢?数据自然也要分离。在这分离出去的数据改变时,就需要通知定义了计算方法的类进行重新计算。这种通知机制,正是通过设计模式"Observer"来进行的。LazyObject 继承自Observer和Observerable类,正是这种机制的实现。本文后面将会对这一设计模式进行简单的介绍。

有了LazyObject类之后,Instrument的实现就变成下面的样子:class Instrument:public LazyObject

{

...

...

...

};

下面看一个实例,是swap的定义代码,大家可以在

ql/instruments/swap.hpp中找到(我已经把注释去掉)。

class Swap : public Instrument {

public:

class arguments;

class results;

class engine;

Swap(const Leg& firstLeg,

const Leg& secondLeg);

Swap(const std::vector& legs,

const std::vector& payer);

bool isExpired() const;

void setupArguments(PricingEngine::arguments*) const;

void fetchResults(const PricingEngine::results*) const;

Date startDate() const;

Date maturityDate() const;

Real legBPS(Size j) const {

QL_REQUIRE(j

return legBPS_[j];

}

Real legNPV(Size j) const {

QL_REQUIRE(j

return legNPV_[j];

}

const Leg& leg(Size j) const {

QL_REQUIRE(j

}

protected:

Swap(Size legs);

void setupExpired() const;

std::vector legs_;

std::vector payer_;

mutable std::vector legNPV_;

mutable std::vector legBPS_;

};

大家可以看到,在类定义的开头,有三个公共类声明:class arguments; class results;

class engine;

这是类的嵌套定义。利用这三个类,就可以实现向swap的计算传递参数、取得计算结果、传递计算引擎等功能。

至此,我们大概知道Instrument是如何工作的了:所有的金融工具都由Instruemnt类派生而来,Instrument类是LazyObject类的子类,LazyObject

负责定义对缓存中的数据重新计算的框架,同时,LazyObject是

Observer,Observable的子类,这使LazyObject及其子类具有“观察”数据源

数据变化的能力。那么,要自己实现一个新的金融工具,该如何做呢?大致有以下三个步骤:(1)将自身注册为数据源的Observer。这一步可以在构

造函数内通过父类Observer的成员函数registerWith进行。一般来说数据源会作为构造函数的参数传入。比如Swap的构造函数就传入了CashFlow对象作为参数。

(2)实现Instrument类的接口,如NPV,isExpired等。

(3)如果新的金融工具类需要有其它的计算,则也要将这些计算方法实现。

自己实现新的金融工具并不复杂,具体的方法大家可以去读QuantLib的源代码。

虽然到目前为止,还没给大家介绍过一句实用的代码。因为我认为,只有深入了解一个事物的本质,才能更更好的将其加以利用。知其然,还要知其所以然。所以大家不要着急写出一个Hello world!程序。不过,如果你看过了前面

几篇文章,现在去看QuantLib网站上那些example,应该都能看懂了。

===============================================

相关设计模式。

1、observer

这种模式定义对象间一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。之所以不将这些相互依赖的对象设计成紧耦合的方式来维护一致性,是因为紧耦合的方式降低了对象的可重用性。

比如,一个文档编辑器,对一个数据序列可以用柱状图、饼状图来表示,当数据序列改变时,这两种图都要刷新,即两种图依赖于数据序列。并且,不只有柱状图、饼状图,还有曲线图、散点图等等,如果将图与数据设计成紧耦合的方式就很难再添加新的图形表现形式。而使用observer模式,则可使图与数据很好地分离,也很容易添加新的数据表现形式。

在这种设计模式中涉及以下的参与者: subject(目标):相当于上面提到的数据序列(更准确地说为数据序列对象提供一个公共接口),subject 知道它有哪些观察者,当它改变时可以通知那些观察者。因此它要提供注册和删

除观察者对象的接口。 observer(观察者):相当于上面提到的柱状、饼状图等数据表现形式。它为需要获得通知的对象定义一个更新接口(比如叫update等)。 ConcreteSubject(具体目标):subject子类的实例化,当它的状态改变时,它向各观察者实例发出通知。 ConcreteObserver(具体观察者):observer子类的实例化,它维护着指向ConcreteSubject的引用并存储其状态,实现了observer的更新接口。

在更复杂的模式中,在subject和observer之间有一个ChangeManager,其作用是尽量减少观察者反映其目标的状态变化所需的工作量,它有三个职责:维护观察者和目标之间的映射关系;定义一个特定的更新策略;更新所有依赖于某个目标的观察者。这只是一个很简单的介绍,更多的内容请参考《设计模式》一书。

2、template method

这一设计模式的目的是定义一个算法的框架,而将一些具体的步骤延迟到子类中实现,它使得可以不改变一个算法的结构就可以重定义其某些细节。其参与者包括:

AbstractClass(抽象类):它定义一个算法的框架,或者说“原语操作”。 ConcreteClass(具体类):实现抽象类中定义的“原语”。这一模式很简单,同样更多的内容请参考《设计模式》一书。

=========================================

参考资料:

Implementing QuantLib

设计模式

HTML5基础入门教程(小编搜集辛苦啊,必看)

HTML5教程 什么是HTML5? HTML5 将成为HTML、XHTML 以及HTML DOM 的新标准。 HTML 的上一个版本诞生于1999 年。自从那以后,Web 世界已经经历了巨变。HTML5 仍处于完善之中。然而,大部分现代浏览器已经具备了某些HTML5 支持。 你是不是多少有了解一点,但是你却对这个不精啊!可以进群交流,⑤①④①⑥⑦⑥⑦⑧。HTML5 是如何起步的? HTML5 是W3C 与WHATWG 合作的结果。 编者注:W3C 指World Wide Web Consortium,万维网联盟。 编者注:WHATWG 指Web Hypertext Application Technology Working Group。WHATWG 致力于web 表单和应用程序,而W3C 专注于XHTML 2.0。在2006 年,双方决定进行合作,来创建一个新版本的HTML。 为HTML5 建立的一些规则: ?新特性应该基于HTML、CSS、DOM 以及JavaScript。 ?减少对外部插件的需求(比如Flash) ?更优秀的错误处理 ?更多取代脚本的标记 ?HTML5 应该独立于设备 ?开发进程应对公众透明 新特性 HTML5 中的一些有趣的新特性: ?用于绘画的canvas 元素

?用于媒介回放的video 和audio 元素 ?对本地离线存储的更好的支持 ?新的特殊内容元素,比如article、footer、header、nav、section ?新的表单控件,比如calendar、date、time、email、url、search 浏览器支持 最新版本的Safari、Chrome、Firefox 以及Opera 支持某些HTML5 特性。Internet Explorer 9 将支持某些HTML5 特性。 HTML 5 视频 许多时髦的网站都提供视频。HTML5 提供了展示视频的标准。 Web 上的视频 直到现在,仍然不存在一项旨在网页上显示视频的标准。 今天,大多数视频是通过插件(比如Flash)来显示的。然而,并非所有浏览器都拥有同样的插件。 HTML5 规定了一种通过video 元素来包含视频的标准方法。 视频格式 当前,video 元素支持两种视频格式: Internet Explorer Firefox 3.5 Opera 10.5 Chrome 3.0 Safari 3.0 Ogg X X X MPEG 4 X X Ogg = 带有Thedora 视频编码和Vorbis 音频编码的Ogg 文件 MPEG4 = 带有H.264 视频编码和AAC 音频编码的MPEG 4 文件

html5入门视频教程百度网盘

html5入门视频教程百度网盘 近几年html5前端开发相当火爆,可以说引领了IT培训行业的新的潮流,越来越多人加入到了html5前端开发的行列中来。想要学好web前端,你需要一份较新且完善的学习资料,现在就给大家千锋教html5入门视频教程百度网盘云分享,希望对所有想学习html5前端的同学有所帮助。 千锋教程第1部分:课程体系解读 https://www.sodocs.net/doc/746046340.html,/s/1o7B9OYA 千锋教程第2部分:微案例讲解 https://https://www.sodocs.net/doc/746046340.html,/s/1nwyNFg1 千锋教程第3部分:知识点讲解 https://www.sodocs.net/doc/746046340.html,/s/1jICHs9o 千锋Vue组件之手机通讯录实战课程

https://www.sodocs.net/doc/746046340.html,/s/1c1FrXLY 千锋微信小程序基础与实战 https://https://www.sodocs.net/doc/746046340.html,/s/1xE35SQcvW0sCF2NoR_ONiw 目前前端工程师人员的缺口很大,而2年工作经验的html5前端开发工资10K~15K左右。如果你会一些后台技术,并且前端技术很厉害,到20K也是可能的。工资的多少主要取决于你的技术情况,所以工资是不确定的。前景不错,选择现在学习前端技术,也更容易高薪就业。 前端开发主要是做什么?是利用HTML/CSS/JavaScript/DOM/Flash等各种Web技能结合产品的界面开发。制作标准化纯手工代码,并增加交互功能,开拓JavaScript和Flash模块,同时结合后端开拓技能仿照全部效果,结束丰富互联网的Web开拓,致力于经过进程技能改进用户体验。而其所需技能则是学习html,这个是简单的,也是基础的;学习css;js;jquery;那样就业面试时更有优势。 千锋教育html5前端全栈课程培训,致力于培养覆盖前端+后台+全栈开

千锋html5开发教学视频网盘下载

千锋html5开发教学视频网盘下载 html5移动开发技术可以说是web开发世界一次重大变革,无论你喜不喜欢,它都代表了未来发展趋势,如今h5更是广为流传,各类媒体炒的如火如荼,很多文章都在不遗余力的介绍h5技术,h5就业前景这么广,很多的年轻人都选择学习html5,那培训机构就成了快速到达的一个捷径了,培训机构html5开发教学视频都学哪些内容呢? 如果你是想自己找视频自学的话,可以去千锋的官网免费下载观看,千锋的视频都是专业的老师随堂录制,看视频就像老师在亲自授课一样,而且千锋的学习视频都是免费的哦。 千锋的教学课程完善,2018年更新升级了课程大纲:全栈html5+课程大纲V10.0 html5课程升级后优势 课程大纲升级后,覆盖热门大数据可视化内容,深度贯穿前端后端开发,紧贴

主流企业一线需求,注重项目和实战能力,真正做到项目制教学,业内罕见。课程特色:注重全栈思维培养 全栈html5工程师不止是技术层面,千锋着力培养学员的大前端视角与全栈思维,就业后不仅有能力解决工作中的疑难问题,更有实力胜任项目leader! html5课程升级内容 1.新增时下大热的大数据可视化内容 2.深化PHP+MySQL开发内容 3.20大项目驱动教学 千锋教育讲求“渗透式教学,项目带动理论”,时刻洞悉行业前沿人才需求。用理论武装头脑,用项目带动实操。其次就是讲师的能力和水平,有些机构为了减少成本,降低教师聘用门槛或者采用视频教学,对学生的学习效果不闻不问,而千锋教育秉承用良心做教育的原则,html5全日制课程全部采用讲师面授,以实战项目做指导,手把手纯面授,面对面现场教学。同时论坛辅导,上课资料录制,方便学生课后复习。严格保障教学质量。 值得一提的是,千锋教育的html5培训课程无论在学员中的评价和还是用人单位的口碑都是首屈一指,这是千锋教育一直以“不塑庸才,只造精英”为企业追求。口碑的好坏是验证一个html5培训机构直接的方法。每个培训机构都会

全套千锋html5学习视频网盘下载

全套千锋html5学习视频网盘下载 自W3C于1999年发布HTML4后,Web世界快速发展,一片繁荣。人们一度认为HTML标准不需要升级了。一些致力于发展Web App的公司另行成立了WHATWG组织,直到2007年,W3C从WHATWG接手相关工作,重新开始发展HTML5。HTML5的发展史,有用户的需求在推动,有技术开发者的需求在推动,更有巨大的商业利益在推动。下面千锋小编给大家分享一些全套千锋html5学习视频网盘下载地址:html5教程第一部分:课程体系解读 https://www.sodocs.net/doc/746046340.html,/s/1o7B9OYA Vue组件之手机通讯录实战课程 https://www.sodocs.net/doc/746046340.html,/s/1c1FrXLY html5教程第二部分:微案例讲解 https://www.sodocs.net/doc/746046340.html,/s/1ctZ3Ls HTML5吸引这么多前端开发人员的原因究竟是什么呢?HTML3培训,又是哪个更好呢?我这有一些见解,有说的不好的大家可以留言交流沟通。

HTML5是WEB的未来,不仅在电脑端,而且在移动端也一定会得到广泛的应用。据统计2013年全球将有10亿手机浏览器支持HTML5,同时HTML Web开发者数量将达到200万。毫无疑问,HTML5将成为未来5-10年内,移动互联网领域的主宰者。据IDC的调查报告统计,截至2012年5月,有79%的移动开发商已经决定要在其应有程序中整合HTML5技术。 目前,HTML5前端的应用范围广阔,从平面到3d,从应用到开发,html 5的快速发展,HTML5前端人才的需求也是持续增长的趋势。 从先要的水平来看,HTML5前端的人才需求已成为IT职场的紧缺型人才。现在是互联网公司的春天,很多公司如雨后春笋般发展,对H5前端开发的需求很旺盛,都是处在供小于求的情况。前端的代码都是直面用户的,用户即是公司的上帝,重要程度不言自明,要求很高、不容闪失。团队再精简也不能精简了前端开发力量。需要H5前端人才的单位太多、而且呈现越来越多的势头。现在公司个个都要做网站或App来宣传,都需一堆H5前端人才。 由于时代的快速发展,物联网技术不断地更新,使IT业业迅速上升。IT工作针对企业对技术要求的不断提高,大家对HTML5的态度一直受到关注。未来是HTML5的天下,我相信未来对HTML5的需求还会持续。 2018,我相信HTML5的发展趋势是我们不能小觑的。作为过来人或者正在学习HTML5的大家,你们做好迎接困难的挑战了吗?

html5教程视频教程网盘下载

html5教程入门视频网盘下载 学习HTML、CSS基础知识,实现PC端静态页面制作(例如京东商城),响应式网页布局的制作(微软中国官网)、及WebApp页面布局(淘宝、美团等)。 html5前端人才已成为IT职场的紧缺型人才,如何自学html5?如何短时间内迅速提升html5开发能力?千锋教育html5教程入门视频网盘下载(https://www.sodocs.net/doc/746046340.html,/video/html5_download.html),助力大家成为企业不可多得的贤才。 实现这些需要的知识有 1、学习HTML基本语法:双标签、单标签语法结构。 2、常用标签:标题标签、段落标签、布局标签、表格、列表、标签标签。 3、学习CSS基本语法:选择器声明。 4、学习CSS的三种样式表:内联、内部、外部 5、学习CSS的各种常用选择器 6、学习CSS的选择器、样式表的优先级和权重问题。 7、学习CSS的核心属性及属性值 8、学习CSS的元素类型的转换

9、学习CSS的定位锚地的应用 10、学习CSS中的图片整合技术的应用 11、学习CSS中常见的浏览器的兼容及解决方法 12、学习HTML5新增元素及属性 13、学习CSS3新增选择器的应用 14、学习CSS3的2D、3D、关键帧动画的相关应用 15、学习CSS3中弹性盒的应用 16、学习CSS3中媒体查询响应式的设计应用 学习JavaScript和jQuery及掌握一门后台程序语言的简单基础和一个数据库,实现PC端项目交互开发(做一个电商类型的网站开发) 需要的知识有 1、学习JavaScript的基本语法 2、学习JavaScript的循环语句 3、学习JavaScript的函数与数组 4、学习JavaScript的String和Data 5、学习JavaScript的BOM与DOM 6、学习JavaScript的相关事件 7、学习JavaScript的拖拽效果 8、学习JavaScript的cookie存储 9、学习JavaScript的正则表达式 10、学习JavaScript的Ajax的应用 11、学习JavaScript的面相对象基础

千锋html5全套教程视频分享

千锋html5全套教程视频分享 Html5近几年迅速崛起,愈加火爆,行业用途范围越来越广,更多的年轻人看到了这一市场前景。很多人也纷纷着手学习html5技术,很多没有经验的同学首先都会选择找一些书籍和视频资料来学习,但是网络上的教学视频多而杂,想要找到合适的且靠谱的学习资料不是一件容易的事情,如果你还在为学习资料烦恼,小编给你发福利啦,分享千锋html5全套教程视频: 千锋html5教程第一部分: 课程体系解读:https://www.sodocs.net/doc/746046340.html,/s/1o7B9OYA 千锋html5教程第二部分: 微案例讲解:https://https://www.sodocs.net/doc/746046340.html,/s/1nwyNFg1 千锋html5视频教程第三部分: 知识点讲解:https://www.sodocs.net/doc/746046340.html,/s/1jICHs9o

千锋教育html5培训师资力量强大,教学经验丰富,始终坚持让教育回归本质的教学理念。“我们不生产技术,而是教育的传授者,更是it技术的搬运工”。在当今就业形势越发严峻的残酷现实下,掌握一款应用广泛的编程语言是非常重要的一件事。同样,如果掌握了html5这门技术,就业面也是很广的。 千锋教育专业的IT培训机构,如果觉得自学不能满足你的学习需求的话,欢迎你来千锋教育报名学习,千锋坚持用良心做教育的理论为理念,让每一位加入千锋的学子找到人生新方向,发现人生新目标,并通过自身的努力去实现。 千锋的良心教育体现在点点滴滴,呵护并关心每一位在学习过程中的班主任老师,解答并带领大家掌握知识的授课老师;就业路上告诉你走上实际工作时了解注意事项的就业老师,每一位千锋人的付出也都贯穿着良心这一宗旨,教人,育人,以良心为先! 只有正规、资质齐全、有实力、够权威、口碑好的html5培训机构,才能保障培训效果。而html5学习上忌讳的就是问题的堆积,问题越来越多就会累积成一座大山,从而阻碍你的学习之路。所以,想要更好地学习html5,欢迎你来千锋教育试听学习!

《HTML5+CSS3网站设计基础教程》_教学大纲

《HTML5+CSS3网站设计基础教程》课程教学大纲 (课程英文名称) 课程编号:201601210011 学分:5学分 学时:76学时(其中:讲课学时:47 一、课程的性质与目标 《HTML5+CSS3网站设计基础教程》是面向计算机相关专业的一门专业基础课,涉及网页基础、HTML标记、CSS样式、网页布局、变形与动画等内容,通过本课程的学习,学生能够了解网页web发展历史及其未来方向,熟悉网页设计流程、掌握网络中常见的网页布局效果及变形和动画效果,学会制作各种企业、门户、电商类网站。

二、课程设计理念与思路 课程设计理念:高职教育的集中实践教学环节需明确必要的理论知识的生化与知识层面的拓展,不能局限 于单纯的技能训练。单纯的技能训练不是提高高等职业教育的理想课程。以能力的培养为重点,以就业为导向,培养学生具备职业岗位所需的职业能力,职业生涯发展所需的能力和终身学习的能力,实现一站式教学理念。 课程设计思路:基于工作过程开发课程内容,以行动为导向进行教学内容设计,以学生为主体,以案例 (项目)实训为手段,设计除理论学习与技能掌握相融合的课程内容体系。教学整体设计“以职业技能培养为 目标,以案例(项目)任务实现为载体、理论学习与时间操作相结合”。 开发工具:DreamweaverCS6 第一章初识HTML5

第二章HTML5页面元素及属性

第四章CSS3选择器

e g o o d f o 背景与图片不透明度的设置 √ 设置背景图像平铺√ 设置背景图像的位置√ 设置背景图像固定√设置背景图像的大小√设置背景的显示区域√设置背景图像的裁剪区域√设置多重背景图像√背景复合属性√线性渐变√径向渐变√重复渐变 √ 第七章表单的应用

Html5程序设计基础教程

第1章HTML 5概述 一、选择题 1.A 2.D 3.C 4.C 二、填空题 1.HyperText Markup Language 2. 3.HTML 4.UTF-8 5.

6.contextmenu 7.async 8.
9.Geolocation API 10.Web Workers 三、简答题 1.答:
标签用于定义文档中的区段。
标签用于定义文档的页眉(介绍信息)。
标签用于定义区段(section)或文档的页脚。通常,该元素包含作者的姓名、文档的创作日期或者联系方式等信息。