资源描述:
《Excel_VBA_金融工程_v2》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、1AnthonyKong第一章:程序编写应注意的几点我不会说编写程序是容易,但我可以这样说它不是真的太难因为很多人都这样认为。程序编写不是纯理论性的,好似数学或天文学一据;特别是它不需要你有一个高等学位才会做得好。(当然,电脑科学有它的理论,但它不一定需要你完成学位课程学习后,才能够运用它们。在现实生活中,有很多程序编写高手都没有所谓大学学位。)将程序编写和其他工作比较,你会发覚程序编写没有所谓天才、例如特别强壮的运动员或声线特别高亮或低沉的歌唱家。程序编写只需要你细心和工匠之心。如果你有上过一些程序编写的工作坊,
2、你便会发覚有一些同学他们可以不费心力便可完成任务,但有些同学则不然,他们屡屡错,尤其老师强调容易泛错的地方。他们两者的分别在于,成功的学星他们会给予更多注意会发生的事情,同时会更加小心及细心他们做过什庅。成为一个好的程序编写员,你需要注意以下几点(1)注意细节,(2)要够蠢,(3)好的记忆,和(4)要有不同程度上的抽象思维。(1)注意细节编程时,细节就是一切。电脑是十分蠢的,你编写完大部份的程序,然后你对电脑说:「好啦,这就是我要的东西,你跟着完成其他部份!」对不起,这是完全办不到的。你要完全按照它的要求,一字一字
3、的键入电脑,这里要s,那里要t,错一或缺一都不可。假如程序要你先宣告変动词先,那庅,你一定在开始时,先宣告变动词。如不,你便得不到应该得到的结果。(2)要够蠢电脑可以说真的十分蠢,它只会做你叫它做的事,而且不会多亦不会少。当你正进行编程时,你应该时刻告诉自己电脑是十分蠢,那庅你便在一种态度上要将所有特定的东西或细节装进你的程序里,而不是假设它们自己会发生,真的除非你已告欣它们。(3)好的记忆编写程序时会有很多事你要记在心里,例如、那些程序里已有的功能函数、那些你定义的功能及可变数等。你记得越多,成功的机会便越多。(
4、4)要有不同程度上的抽象思维这点可说是最重要的在程序编写时。电脑是人类建做的最复杂的系统,当你编程时,你要将电脑每一层次的功能都要记着,这都会是巨大的工作量,甚至你只编写一个简单的程序。所以以下介绍一个很有用的技巧去管理软件系统,它就是将程序区分为数个或数十个少程序。区分程序为较少的个体是一个十分重要的技巧,试想想在第三点时,记着一个少的程序是可以做到。但在一个非常大的程序,会有不下上百万行的程序源码,看通或明白程序的全部,我想是不可能的。如果将程序区分为数十个不同功能的小程序,那庅是比较容易处理。2Anthony
5、Kong第二章:投资回报及风险前一些时间在坊间买了一本关于金融投资决策书叫“运用EXCELVBA进行高效投资决策”,编着:韩良智,出版社:中国铁道出版社。书中提供一些用EXCELVBA编写的应用程序,例如,证券连续复利收益率分布及其均值的自动计算模型、多个风险资产投资组合的有效边界模型、股票价格的随机模拟模型、美式看跌期权价格计算模型„等,书中所述程序模型有不下七十多个,其中不乏高超之作。但大多数的程序在设计时都不能被之后发展更复杂的金融产品时从新利用,所以本人以另一个角度编写书中的程序达到以下目的:1)更精简,以
6、最少程序项来完成编程2)更快,以程序最快完成为首要目的3)可读性,能使有一定基础的金融或编程人员明白4)遁环性,使某些核心程序能遁环使用为了方便我会将“运用EXCELVBA进行高效投资决策”书,简称为“投资决策”。在书中的第2章是讲解“单一证券的收益与风险”,其中一个程序-证券连续复利收益率分布及其均值的自动计算模型,(P.53-P.56)。其编程原码如下:Sub计算()DimnAsInteger,iAsInteger,ssAsSingleDimmymaxAsSingle,myminAsSingle,mysAsSi
7、nglen=ActiveSheet.UsedRange.Rows.Count-5ss=0mymax=-100000000mymin=100000000'计算连续复利收益率Fori=1TonCells(5+i,3)=Round(Log(Cells(5+i,2)/Cells(4+i,2)),4)ss=ss+Cells(5+i,3)IfCells(5+i,3)>=mymaxThenmymax=Cells(5+i,3)EndIfIfCells(5+i,3)<=myminThenmymin=Cells(5+i,3)EndIf
8、Nextimymin=Abs(Int(mymin*100-2)/100)mymax=Abs(Int(mymax*100+2)/100)mys=IIf(mymin>mymax,mymin,mymax)Range("D5")=Round(ss/n,4)Range(Cells(6,3),Cells(5+n,3)).NumberFormat="0.00%"Range