注册 登录
编程论坛 C++教室

【泡泡的project说明书】

xixifans 发布于 2012-11-25 16:47, 1239 次点击
周六就说了自己要写project的说明书啦,不过一直没有动笔。我懒了,今天还在寝室做干煸肉吃。我都把我的头像换成我炒的肉了。哈哈。我现在就开始写吧。。不过说不定没办法一次性写完。估计又只有续集了。见谅啊!

title:分级基金套利模拟模型
一、背景概述
    在基金(fund)中,分级基金是一种开放式基金(openend fund),又被称为机构式基金。它的主要特点是将基金产品分为两类份额,并分别给予不同的收益分配。从目前已经成立和正在发行的分级基金来看,通过“申购”购买和“赎回”卖出的母基金(motherfund),以及在证券交易所直接买卖的分为低风险收益端(约定收益份额)子基金A(umbrellafund)和高风险收益端(杠杆份额)子基金B(umbrellafund)两类份额。理论上来说,母基金的净值应该等于子基金净值的加权平均。例如。母基金净值(netvalue)为1元/份,子基金按照1:1拆分,子基金净值(netvalue)为a元/份和b元/份,则a+b=2*1。
    注:所谓净值,可以理解为此基金结构中所有投资产品实时价格的加权平均。

二、模型理论基础
    1.由于子基金可以在证券交易所交易,故除了净值以外,还有着交易价格,及股价(stockprice)。若市场是无套利的,则子基金的股价和净值应该相等,但实际情况下,子基金的股价和净值会有很大的偏离,所以理论上,在两只子基金以1:1的比例拆分时,若母基金的净值小于两只子基金的股价之和,则可以申购母基金,再将其拆分成两个子基金并在交易所市场抛售出,获利(stockprice of A+stockprice of B -netvalue of motherfund*2)。当母基金的净值大于两只子基金的股价之和时,则可以买两只子基金,再将其合并并赎回,获利(netvalue of motherfund*2-stockprice of A-stockprice of B)。
    2.以上为理论情况,在实际中,在T日申购基金,T+3日才可以赎回。在交易所T日购买基金,T+1日才能卖出基金。以上两个获得必须通过预测模拟为
(stockprice of A+stockprice of B -预测T+3时netvalue of motherfund*2)
(netvalue of motherfund*2-预测T+1时stockprice of A-预测T+1时stockprice of B)
  。
    3.另外,我国基金申购手续费率(Purchase rate)Pr=1.5%赎回手续费率(Redemption rate)Rr=0.5%;股票交易佣金(brokerage charges)  Br=0.05%。
    则获利修正为
(stockprice of A*(1-Br)+stockprice of B*(1-Br) -预测T+3时netvalue of motherfund*2*(1-Pr)
(netvalue of motherfund*2*(1-Rr)-预测T+1时stockprice of A*(1-Br)-预测T+1时stockprice of B*(1-Br))
    4.此模型使用蒙特卡洛方法来模拟未来的股价。这里不再解释此方法的原理。(在模型程序中将直接调用。)


29 回复
#2
xixifans2012-11-25 16:53
由于某些原因,我不能在交以前帖它了

[ 本帖最后由 xixifans 于 2012-11-26 00:39 编辑 ]
#3
xixifans2012-11-25 16:59
2.蒙特卡洛模拟程序。包括四个文件MCmodel1.h和MCmodel1.cpp(用来模拟T+1的股价stockprice)以及MCmodel2.h和MCmodel2.cpp(用来模拟T+3的母基金净值netvalue)。方便起见。这里只贴出.cpp文件中的MCmodel1.cpp。
程序代码:
/*考虑到在实际中的套利,基金在申购后需要在T+2才可以卖出,
故我们考虑在模型中使用蒙特卡洛方法来模拟三天后的基金价格,
并以此作为套利的依据
*/

//this CPP用来模拟stockprice

#include "MCmodel1.h"
#include <cmath>
#include "fund.h"

// the basic math functions should be in namespace std but aren't in VCPP6
#if !defined(_MSC_VER)
using namespace std;
#endif


//此处定义生成随机数的方法
double GetOneGaussianBySummation()
{
    double result=0;

    for (unsigned long j=0; j < 12; j++)
        result += rand()/static_cast<double>(RAND_MAX);

    result -= 6.0;

    return result;

}


double GetOneGaussianByBoxMuller()
{
    double result;

    double x;
    double y;

    double sizeSquared;
    do
    {
        x = 2.0*rand()/static_cast<double>(RAND_MAX)-1;
        y = 2.0*rand()/static_cast<double>(RAND_MAX)-1;
        sizeSquared = x*x + y*y;
    }
    while
        ( sizeSquared >= 1.0);

    result = x*sqrt(-2*log(sizeSquared)/sizeSquared);

    return result;

}

//以下为蒙特卡洛方法的函数定义
double MonteCarlo_s(const fund& thefund,
                         double Expiry,
                         double Vol,
                         double r,
                         unsigned long NumberOfPaths)
{//首先从fund的派生来获得其现价
    double present_price=thefund.get_stockprice();


    double variance = Vol*Vol*Expiry;
    double rootVariance = sqrt(variance);
    double itoCorrection = -0.5*variance;

    double movedSpot = present_price*exp(r*Expiry +itoCorrection);
    double thisfutureprice;
    double runningSum=0;

    for (unsigned long i=0; i < NumberOfPaths; i++)
    {
        double thisGaussian = GetOneGaussianByBoxMuller();
        thisfutureprice = movedSpot*exp( rootVariance*thisGaussian);
        runningSum += thisfutureprice;
    }

    double mean = runningSum / NumberOfPaths;
    mean *= exp(-r*Expiry);
        double future_price= mean;
    return future_price;
}


#4
xixifans2012-11-25 17:08
同上

[ 本帖最后由 xixifans 于 2012-11-26 00:39 编辑 ]
#5
xixifans2012-11-25 17:11
同上

[ 本帖最后由 xixifans 于 2012-11-26 00:40 编辑 ]
#6
xixifans2012-11-25 17:15
本来想贴一个运行窗口图的,可惜不知道怎么粘上图来。

最后说一句:版权所有,翻冒必究!!!
#7
xixifans2012-11-25 17:33
同上

[ 本帖最后由 xixifans 于 2012-11-26 00:41 编辑 ]
#8
xixifans2012-11-25 17:39
最后德赛一下吧。。我done了!恩。。我要闭嘴了。。不然要被删号。。。
#9
zklhp2012-11-25 17:41
蒙特卡罗 神马的 有没有公式啊 看代码好迷糊啊

顺便膜拜大作 我也想学C++了 可惜我这个gcc编译C++咋有问题啊。。
#10
xixifans2012-11-25 17:59
回复 9楼 zklhp
谢谢。。。抬举我了~你的编译不了?我的可以哎~~~不知道神马问题。。其实我不知道GCC是什么。。
#11
xixifans2012-11-25 23:29
睡觉去了。晚安晚安!
#12
lz10919149992012-11-26 09:23
不好意思,这几天没时间来帮你解决问题,不过看样子你都自己解决了吧?
天朝的东西就是讲的很专业,但是代码看起来也并没用何种高深的算法,你那段介绍我确实没看懂,从小学到高中我语文一直都是个硬伤。而且也不懂证券啥的。所以我以后很担心能不能单纯的当个程序猿。
对于LZ对C++的问题大部分都是语法问题,记住谭老前辈那本用来帮助初学者入门是很好的,但是相要学好C++还得看看其它一些更专业的书籍,我比较喜欢C++ Primer,当然你可以到图书馆选本好点的,作者最好别是天朝的。
哦,对于设计的问题呢,大部分来自于自己的经验。不过也可以去研究一下设计模式。
#13
lz10919149992012-11-26 09:32
回复 6楼 xixifans
贴图可以用添加附件,不过浏览器得是IE,IE9的话要开兼容模式。
#14
lz10919149992012-11-26 09:36
回复 9楼 zklhp
懂汇编的都是大神。
#15
lz10919149992012-11-26 09:38
回复 10楼 xixifans
GCC是一个编译器的套件,简单易用,我的代码基本上都是用它编译的。
#16
TonyDeng2012-11-26 15:46
泡泡已经解决了,就不用我们费神了吧?
#17
我菜1192012-11-26 21:09
回复 楼主 xixifans
你们的寝室真是太可怕了,还能做饭?敢问这是大学吗?可怕的寝室里面住着一个可怕的小萝莉!
#18
xixifans2012-11-27 10:30
回复 12楼 lz1091914999
严重同意!!!!思路模式太重要了,像我很有胡子眉毛一把抓的感觉。。我觉得还是要有点儿除了编程外的兴趣或者专长吧,老师总在和我们说要复合一点儿,成为金融界编程很厉害或者懂金融的计算机大牛、这样很受欢迎吧。。z
#19
xixifans2012-11-27 10:32
回复 16楼 TonyDeng
其实不懂的地方我都乱改改乱猜猜改的能运行了。。问问题我觉得大家都木有耐心理解了再研究代码吧!555我这几天还在看看,问问老师!hoho!说不定再写续集。嘿嘿
#20
xixifans2012-11-27 10:34
回复 17楼 我菜119
你猜对了!是大学!线路改造过了,空调也装了的。还有!我是御姐!!
#21
信箱有效2012-11-27 17:49
泡泡
#22
TonyDeng2012-11-27 19:47
以下是引用xixifans在2012-11-27 10:32:48的发言:

其实不懂的地方我都乱改改乱猜猜改的能运行了。。问问题我觉得大家都木有耐心理解了再研究代码吧!555我这几天还在看看,问问老师!hoho!说不定再写续集。嘿嘿

不是没有耐心,而是这几天在忙别的事。主要是不懂你那个专业,要知道那些类之间有什么关系和各种方法的功能之后,才能设计好程序。光把程序搞成没有报错是不够的。
#23
zklhp2012-11-27 20:03
以下是引用lz1091914999在2012-11-26 09:36:02的发言:

懂汇编的都是大神。

我汇编其实很一般的。。
#24
zklhp2012-11-27 20:04
以下是引用xixifans在2012-11-27 10:30:47的发言:

严重同意!!!!思路模式太重要了,像我很有胡子眉毛一把抓的感觉。。我觉得还是要有点儿除了编程外的兴趣或者专长吧,老师总在和我们说要复合一点儿,成为金融界编程很厉害或者懂金融的计算机大牛、这样很受欢迎吧。。z

我是医药圈计算机玩的比较好的 嘻嘻 共勉
#25
xixifans2012-11-27 20:44
回复 22楼 TonyDeng
同意!我觉得我也不是真的懂了那些地方为什么可以不报错了。我准备下周考了试之后再把程序完善一下。本来想的要能够让他自动输入数据的,也没有实现。还想在建立一个parameter类把需要的参数都搞进去!


T版我们来日方长!哈哈哈
#26
xixifans2012-11-27 20:44
回复 21楼 信箱有效
吓死爹了
#27
xixifans2012-12-03 23:10
好久没有过来啦。。今天才考完一门考试。周五考C++笔试!
#28
TonyDeng2012-12-03 23:22
祝你好运!
#29
xixifans2012-12-03 23:42
回复 28楼 TonyDeng
求周五T版附体!
#30
西岸阳光2012-12-04 00:16
不错啊,谢谢,美女。
1