Entries Tagged '金融计算' ↓
数量金融基本书目(Classic Books for Quantitative Finance Available in China)
August 22nd, 2008 — 金融计算
在Visual C++ 2008配置QuantLib
August 13th, 2008 — 金融计算
稍微了解了下quantlib。它是一个开源的C++库,在数量金融社区(quant)里名气最大。 这些日子在学习C++和金融计算的活计,正好有用。今在机器里配置了一个quantlib的环境,配置boost时参考了quantnet论坛的一个帖子(Boost 1.35.0 + Quantlib 0.9.0 with Visual Studio 2008),记录先:
QuantLib-0.9.6
boost_1_35_0
Microsoft Visual C++ 2008 Express Edition
Microsoft Windows XP Professional Version 2002, Service Pack 2
Intel(R) Core(TM)2 Duo CPU, 1.95GB of RAM
1. 去微软主页下载并安装Microsoft Visual C++ 2008 Express Edition
2-1.去sourceforge下载boost_1_35_0.zip,并解压到C盘。最后,新出现C:\boost_1_35_0
2-2.打开一个Command Prompt(Ctrl+R->cmd),把盘符指向C:\boost_1_35_0\tools\jam\src,运行build.bat,这将产生以下要用的bjam.exe
2-3. 把盘符指向C:\boost_1_35_0,运行以下命令
tools\jam\src\bin.ntx86\bjam.exe --build-type=complete
这将花n多时间。没有计时,我是先忙活其他的事,一个小时后看到运行成功。
2-4.接着运行以下命令:
tools\jam\src\bin.ntx86\bjam.exe --build-type=complete install
这又将花掉大概n的一半的时间。成功后,你将看到一个新的文件夹C:\Boost
3.去sourceforge下载QuantLib-0.9.6.zip,并解压到C盘。最后,新出现C:\QuantLib-0.9.6
4-1. 打开Microsoft Visual C++ 2008 Express Edition ->Tools->Options->Projects and Solutions->
VC++ Directories->Show directories for:->Include files,新添一行C:\Boost\include\boost-1_35
同样,在Library files中新添一行C:\Boost\lib
4-2. 打开VC2008->File->Open->Project/Solution,打开C:\QuantLib-0.9.6\QuantLib_vc9.sln,导入QuantLib后,你就将看到,
5-1. 选中上图中的QuantLib,右键选中Set As Startup Project,然后右键选中build,……漫长等待……直到成功。
(注:在build的过程中,老冒出一行警告:
The file contains a character that cannot be represented in the
current code page (936).Save the file in Unicode format to prevent data loss
大概跟我机器的local有关,后来证明对功能没有影响。)
5-2. 重复以上动作(先Set As Startup Project再build),对其余的项目如BermudanSwaption等做同样的操作,
build成功后,可以按Ctrl+F5查看程序运行结果。That's all and have fun!
Hull书上的一个小例子
August 1st, 2008 — 金融计算
进来闲些,就想把手头正看着的Hull那册options, futures, and other derivatives (6th ed.)中的模型和例子都拿SAS写一遍。先拿ch4: Interest Rate中的一个小东西练手(p.78 Table 4.1),说复利的计算次数对利息的影响。以下,
/*************************
A:本金
m: 复利计算的次数
n: 年数
R: 年利率
FV: 终值
*************************/
options nodate nonotes nosource;
%macro rate(A=,m=,n=,R=);
data _null_;
format FV 6.2;
FV=&A*(1+&R/&m)**(&m*&n);
%put _user_;
put FV=;
run;
%mend rate;
proc printto log="D:\rate.dat" new;
%rate(A=100,m=1,n=1,R=0.1)
%rate(A=100,m=2,n=1,R=0.1)
%rate(A=100,m=4,n=1,R=0.1)
%rate(A=100,m=12,n=1,R=0.1)
%rate(A=100,m=52,n=1,R=0.1)
%rate(A=100,m=365,n=1,R=0.1)
proc printto;
run;
data rate;
infile "D:\rate.dat";
length m 3.;
input #1 m & 8-10
#2 n 8
#3 A 8-10
#4 R 8-10
#5 FV 4-9;
if _error_=0 then output;
run;
proc print data=rate;
run;
以上为适应书上的例子,很多地方写死(hard coding)了。最后的结果跟书上一样,不过以上展示了更多,由各种复利计算次数求出相应的利息,然后从日志文件读出结果再展示:
Obs m n A R FV
1 1 1 100 0.1 110.00
2 2 1 100 0.1 110.25
3 4 1 100 0.1 110.38
4 12 1 100 0.1 110.47
5 52 1 100 0.1 110.51
6 365 1 100 0.1 110.52
Excel债券计算函数
December 28th, 2007 — 金融计算
26个(参考王小民,2003),见下:
| 计算指标 | 定期付息债券 | 到期付息债券 | 其他债券种类 |
| 价格 | price | priceMat | oddfPrice,oddlPrice, tbillPrice, priceDisc |
| 收益率 | yield | yieldMat | oddfYield, oddlYield, tbillYield, yieldDisc |
| 利息 | accrint | accrintM | |
| 天数 | coupDayBs, coupDaySnc, coupDayS | ||
| 日期 | coupPcd, coupNcd | ||
| 期数 | coupNum | ||
| 其他 | duration, mDuration | intRate, received | disc, tbillEq |
其中,在“其他债券种类”一栏中,
- oddf表示odd (short or long) first period,即首期付息日不固定
- oddl表示odd (short or long) last coupon period,即末期付息日不固定
- tbill是Treasury bill,即国库券
附:关于金融函数的参数(argument),如disc(settlement,maturity,pr,redemption,basis),大致可以分为以下三类:
价格、收益率和利率
- 价格(pr)
- 面值(par)
- 清偿价值(redemption)—债券到期后兑付的价格
- 收益率(yld)
- 利率(rate)
日期
- 发行日(issue)
- 交易日(settlement)
- 到期日(maturity)
- 首期付息日(first_coupon)
- 末期付息日(last_coupon)
日期基准
- 计息次数(frequency)—按年支付,1;半年,2;季度,4
- 日计数基准(basis)—美国基准(默认),30/360,0;每月实际天数/每年实际天数,1;每月实际天数/360,2;每月实际天数/365,3;欧洲基准,30/360,4,它将31日计入下一月
更多可以参考:
- Excel联机帮助:函数参考—财务
- Microsoft Office Online: Microsoft Office Excel—Financial Functions
- 王小民编著《Excel 2002高级应用——金融财务》,机工,2003
金融随机过程:备忘录
December 20th, 2007 — 金融计算
All the stochastic calculus you need to know and no more…
如果有兴趣,你当然可以把Neftci(2000)从头到尾读下来,对金融数学要求的随机微积分了解个通透。这本书会从导数的定义开始,一直讲到我们需要的Itō积分、鞅还有PDE,它是Wilmott(2006)还有Hull(2006)都推荐的书(Wilmott看着就是追随这本)。当然,Hull的相关章节(加上附录)也是我们初步了解随机微积分的极好途径,其他的书大都藏头藏尾,遮遮掩掩。有本中文书,台湾陈松男(2002),不回避大多数学问题,读着也是痛快淋漓,而且提供了大多数教科书不曾见到的数学细节。以下这个读书笔记,参照的就是Hull和陈松男(下面当然不好显示数学符号,你可以在我的Google Page找到下文详细的pdf版本,一个叫FinancialStochasticCalculus.pdf 的文件):
- 马尔科夫过程(Markov Stochastic Process)
- 维纳过程(Wiener Process)
- Delta(z)的概率分布性质
- 把时段的长度放大至T
- 一般化的维纳过程
- 伊藤过程(Itō Process)
- 伊藤引理(Itō’s Lemma)
- 伊藤引理(Itō’s Lemma)的扩展
- 股票价格的变动过程
-
伊藤引理应用于股价的变动过程
参考文献
- Paul Wilmott. Paul Wilmott on Quantitative Finance (Volume One, 2nd Ed.).John Wiley &Sons, 2006
- Salih N. Neftci. An Introduction to the Mathematics of Financial Derivatives (2nd Ed., 2000). 武汉大学出版社影印版,2007
- John C. Hull. Options, Futures and Other Derivatives (6th Ed.). Prentice Hall, 2006
-
陈松男《金融工程学——金融商品创新选择权理论》,复旦大学出版社,2002
Paul Wilmott’s Books on Quantitative Finance
December 5th, 2007 — 金融计算
Paul Wilmott在数量金融(Quantitative Finance)方面的书,跟Fabozzi(发包子)在固定收益(Fixed Income)方面的书一样有名,一样充满重复,不过捡来的声誉要高得多。现在有朋友问,他哪些书值得买(或者复印、打印),其实这个问题Paul写书之前——我看——就给出了答案。他最有名的书,Paul Wilmott on Quantitative Finance,以前是两卷本(2000,1064页),现在是三卷(2006,1500页),手头备一份就可以了。如果还嫌贵,Paul还准备了一册Paul Wilmott Introduces Quantitative Finance(2007,722页),是上面三卷本的精简版。
是已经够了。不过在国内,还偶尔能看到Paul的另一本Derivatives: the Theory and Practice of Financial Engineering(1998,768页),或者一册更薄的,The Mathematics of Financial Derivatives: A Student Introduction(1995,330页),这本小书又是他的Option Pricing: mathematical Methods and Computation(1994,457页)的缩写。
这些书章节惊人的重复,大概看看下面的几个目录就可以决定取舍了:
|
Paul Wilmott on Quantitative Finance三卷本(2006,1500页) 第一卷 1. Products and Markets 第二卷 22. An Introduction to Exotic and Path-dependent Options 第三卷 45. Financial Modeling |
Paul Wilmott Introduces Quantitative Finance 1 Products and Markets: Equities, Commodities, Exchange Rates, Forwards and Futures 2 Derivatives 3 The Binomial Model 4 The Random Behavior of Assets 5 Elementary Stochastic Calculus 6 The Black-Scholes Model 7 Partial Differential Equations 8 The Black-Scholes Formula and the ‘Greeks’ 9 Overview of Volatility Modeling 10 How to Delta Hedge 11 An Introduction to Exotic and Path-dependent Options 12 Multi-asset Options 13 Barrier Options 14 Fixed-income Products and Analysis: Yield, Duration and Convexity 15 Swaps 16 One-factor Interest Rate Modeling 17 Yield Curve Fitting 18 Interest Rate Derivatives 19 The Heath, Jarrow & Morton and Brace, Gatarek & Musiela Models 20 Investment Lessons from Blackjack and Gambling 21 Portfolio Management 22 Value at Risk 23 Credit Risk 24 RiskMetrics and CreditMetrics 25 CrashMetrics 26 Derivatives **** Ups 27 Overview of Numerical Methods 28 Finite-difference Methods for One-factor Models 29 Monte Carlo Simulation 30 Numerical Integration A All the Math You Need. . . and No More (An Executive Summary) B Forecasting the Markets? A Small Digression C A Trading Game D Contents of CD accompanying Paul Wilmott Introduces Quantitative Finance, second edition E What you get if (when) you upgrade to PWOQF2 Bibliography Index
The Mathematics of Financial Derivatives: A Student Introduction PART I: Basic Option Theory |
提升指数、提升表和提升图
September 19th, 2007 — 金融计算
——————–
这篇去年在我的生活博客出现过,题目叫《贴一篇读书报告:Lift,Lift Table, and Lift Chart》。不想年代久远,里面的一个表格不知道怎么没有了,现挪到自己这个(所谓)技术博客,除了补全,也算是回到正确的地方了。从本机文档中直接COPY过来,删掉一些废话。
——————–
Lift, Lift Table, and Lift Chart
提升指数、提升表和提升图(草稿)
胡江堂,北京大学软件与微电子学院
2006-11-5
1. 什么是Lift?
I) Lift(提升指数)是评估一个预测模型是否有效的一个度量;这个比值由运用和不运用这个模型所得来的结果计算而来。
II) 一个简单的数字例子:
i. 比如说你要向选定的1000人邮寄调查问卷。以往的经验告诉你大概20%的人会把填好的问卷寄回给你,即1000人中有200人会对你的问卷作出回应(response),用统计学的术语,我们说baseline response rate是20%;
ii. 如果你现在就邮寄问卷,1000份你期望能收回200份,这可能达不到一次问卷调查所要求的回收率,比如说工作手册规定邮寄问卷回收率要在25%以上;
iii. 通过以前的问卷调查,你收集了关于问卷采访对象的相关资料,比如说年龄、教育程度之类。利用这些数据,你确定了哪类被访问者对问卷反应积极。假设你已经利用这些过去的数据建立了模型,这个模型把这1000人分了类,现在你可以从你的千人名单中挑选出反应最积极的100人来,这10%的人的反应率(response rate)为60%。那么,对这100人的群体(我们称之为Top 10%),通过运用我们的模型,相对的提升(gain or lift value)就为60%/20%=3;换句话说,与不运用模型而随机选择相比,运用模型而挑选有3倍的好处;
iv. 类似地,对占总样本的任何比例的人群,我们都可以计算出相应的提升指数,比如说我们可以计算Top 20%的群体的提升指数。
III) 一个结论就是,提升指数越大,模型的运行效果越好。
2. 建立Lift Table 的步骤(并画出Lift Chart),以验证信用评分模型为例:
I) 利用已经建立的评分模型,对我们要验证的样本进行评分。样本下的每一个个体都将得到一个分数,或者是违约概率,或者是一个分值;
II) 对样本按照上面计算好的分数进行降序排序;
III) 把已经排好序的样本依次分成10个数量相同的群体,我们就建立了一个叫decile的变量,它依次取10个值,1、2、3、4、5、6、7、8、9、10,diclie1包括违约概率值最高的10%的个体,diclie2包括下一个10%的群体,以此类推;
IV) 帐户总数是每个decile下的样本数,它是整个样本数的10%;
V) 边际坏账数是每个decile内违约的人数,就是说,利用我们的评分模型,在decile1,有25个人违约,以此类推;
VI) 累计坏账数,45表明前两个decile内共有45个人违约,以此类推;
VII) 边际坏账率是每个decile内坏账的比率。对decile1,边际坏账率由25/100得来;
VIII) 对每一个加总的decile,都计算一个累计坏账率,比如说,对前两个decile,也就是整个样本的20%,累计坏账率等于(25+20)/(100+100);
IX) 在每个decile里,提升指数(Lift)就是相应的累计坏账率与平均坏账率的偏离程度,计算公式是(累计坏账率-平均坏账率)/平均坏账率,习惯上还会乘上一个100。
X) 注:在一些处理中,提升指数直接由每个decile的累计坏账率除以平均坏账率得来,它们之间就相差1,一个是相对偏离,一个是绝对偏离。
XI) 就我们考察的信用评分模型,它的目的就是尽可能把人群区别来开来,比如说“好”的顾客、 “坏”的顾客。提升指数越大,表明模型运作效果越好。
表1:Lift Table
(注:该表内数字纯粹为了演示,没有任何实际背景)
图1:Lift Chart
3. 参考资料
I) Bruce Ratner, Decile Analysis Primer: Cum Lift for Response Model.
http://www.dmstat1.com/res/DecileAnalysisPrimer.html
II) Howard J. Hamilton. Cumulative Gains and Lift Charts
http://www2.cs.uregina.ca/~hamilton/courses/831/notes/lift_chart/lift_chart.html
III) David S. Coppock. Data Modeling and Mining: Why Lift?
http://www.dmreview.com/article_sub.cfm?articleId=5329
IV) Lift Chart. See Thomas Hill, Paul Lewicki. Statistics: Methods and Applications.
http://www.statsoft.com/textbook/glosl.html
V) 冯慧,“信用卡业务与系统”,北京大学软件与微电子学院,2006年秋季学期,课堂笔记
计算股票的贝塔值β
September 13th, 2007 — 金融计算
收益率:一般我们获取的都是股票的价格序列而不是收益序列。收益return的计算很简单,就是先用当期价格p除以它滞后一期的价格p(-1),然后取自然对数,即return=ln[p/p(-1)]。
市场的收益率:教科书一般用标准普尔500指数(S&P500)来近似市场组合。
超额收益率:超额收益率就是超出无风险利率的那部分收益率。教材上一般以3个月期的国库券的收益率来近似表示无风险收益率。
β值:一般说总体风险等于系统风险加上非系统风险。在一个分散的投资组合中,非系统风险可以消除掉。β值就是对股票的系统风险的度量,它等于股票和市场之间的协方差除以市场的方差。如果一只股票的β值大于1,说明该股票的系统风险比市场的平均风险大。
计算β值:用市场的超额收益率回归某只股票的超额收益率(被解释变量:某只股票的超额收益率;解释变量:市场的超额收益率),这个回归方程的系数就是这只股票的β值。
下载yahoo finance和雅虎财经数据
August 5th, 2007 — 金融计算
找股票、基金、期货等实时或历史数据,yahoo finance是一个不错的地方(最好的地方?),更新快,免费,输出格式通用。如果你只想要比如ibm股票的数据,那直接下载就是;但如果想用爬虫程序同时下载ibm、google等数十家股票的数据——气人的是——所有的下载过来的数据都以table.csv命名,想想还是用迅雷加手动省事:
- 打开yahoo finance主页http://finance.yahoo.com/,左上角有个“Enter Symbol(s)”的提示框,填入你想要股票代码,比如ibm。如果没有直接对应的股票,比如你输入google,它就会转到一个搜索界面,再选中goog便是;
- 前面我们填的是ibm,那么我们就进入了http://finance.yahoo.com/q?s=ibm这个页面。在页面的左栏,“Quotes”栏目的第三个,点击"Historical Prices"就进入了ibm股票的历史数据页面http://finance.yahoo.com/q/hp?s=IBM;
- 在这个数据页面,你还可以设定你需要数据的时间刻度(日交易数据还是周、月交易数据)和时间范围(在事件研究项目上有用),默认的时间刻度是天,范围是最早到最近。拉到页面的最低端,找到“Download To Spreadsheet”这个按钮。如果你只需要这个数据,点击保存就是。要注意的是所有下载下来的数据都以table.csv命名,所以一定记得要重命名;
- 如果想利用迅雷同是下载更多只股票的信息,那么我们就要看看以上链接的信息。比如在ibm的页面,在那个“Download To Spreadsheet”上,点右键,找到“Properties性质”,我们看到这个数据文件的URL是
http://ichart.finance.yahoo.com/table.csv?s=IBM&d=7&e=5&f=2007&g=d&a=0&b=2&c=1962&ignore=.csv,同样查到google股票数据的URL是
http://ichart.finance.yahoo.com/table.csv?s=GOOG&d=7&e=5&f=2007&g=d&a=7&b=19&c=2004&ignore=.csv
- 以上差别就是加黑部分股票代码的不同。比如说我们还知道其他感兴趣的股票代码,比如ag等,现在就可以打开迅雷,点“文件”—“新建”,在弹出来的对话框中,“网址(URL)”就填入http://ichart.finance.yahoo.com/table.csv?s=IBM&d=7&e=5&f=2007&g=d&a=0&b=2&c=1962&ignore=.csv并命名为ibm.csv;对ag等股票,把上面的URL中的IBM改为AG就是,接下来重复以上动作,填上所有你感兴趣的股票代码,剩下的就是让机器慢慢下了。
当然,以上手工活还挺多。听说有个专门下yahoo finance的工具,不知其可。中国雅虎的财经频道跟yahoo finance类似的结构,一样可行。