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里面的逻辑。