MF project 2: Pricing -- Monte Carlo framwork

1. Payoff 的建立 有三张图,一张是instrument,然后是simpeproperyset,然后是payoff了。

a. Instrument 里面只有打印和构造析构。

b. 这个propertyset其实就是key-value,用来保存必要信息。昨晚看的blog也自己实现了dict包装数据后重写__getattr__(self)来玩的。

一句话,用加强版的map来实现自己的功能。

 

c. payoff 主要参数有个double discount 和 vector<double> spot 

(感觉这个dicount应该传个yield curve进来)

spot是传进来的,mc.calcST()中得到path,不同的SDE决定了不同的path

 

  这个typedef真心玩得我头大:

typedef PayOff<D, T>* (*CreatePayOffFunction)(SimplePropertySet<string,AnyType*>);

      两步1. factory的instance.createPayOff();

          asianptr = PayOffFactory<double, Vector<double> >::Instance().CreatePayOff(mc_name, mc_myset_asian);

        2. 重载operater(),逻辑是:

asian option, 多定义一个average,然后根据propertyset里面传进来的type,算数还是几何,滚动一下spot算出来。

然后payoff直接是spot最后来判断,当然还是根据propertyset里面的call还是put。

          payoff = (*PayOffPtr)(discount, mcpath[i]);

 

 

2. Monte carlo也是三个部分 Model, Scheme, Simulation

a. model部分,这个部分主要是套公式

 

b. scheme ,把spots的弄出来,vector<double>

3. simulation:

mc_path_asian = MCPC.calcST(rangen, MCBS,NoOfPaths,1,Timesteps);                // sample paths
 //mc_path_asian = MCE.calcST(rangen, MCBS,NoOfPaths,1,Timesteps);                // sample paths
mc.setpath(mc_path_asian);                                                        // set paths
mc.mcprice2(1.0, asianptr,mcvalue);        // if discounting outside payoff        // evaluate paths
mc.mcprice2_cv(1.0, asianptr, asianptr_cv, KE[ptype * timestep],mcvalue_cv);    // evaluate due to control variate

先搞出spots的path, 然后把path弄进mc的object里面,然后算价格;

算价格有两个,这个asianptr根据path算出payoff。然后一个循环直接average 所有的path。

这里面还可以把偏差直接算出来。

 

=============华丽的分割线===========

1. greeks 和 regression的明天再看看。

2. FDM的实现。

2. 整理一下fixed income里面的逻辑。

posted on 2013-10-10 23:41  surghost  阅读(314)  评论(0编辑  收藏  举报

导航