投资组合风险管理策略 Matlab

1. functPortfolioInsurance

function [Wealth,Floor] = functPortfolioInsurance(wealth,multiplier,floor,strategy,returnsStocks,returnsBills,volaStocks)

period = size(returnsStocks,1);
path   = size(returnsStocks,2);

Wealth   = ones(period+1,path) * wealth;
Stocks   = ones(period+1,path);
Bills    = ones(period+1,path);
Cushion  = ones(period+1,path);
Exposure = ones(period+1,path);
Floor    = ones(period+1,path) * floor * wealth;

CPPI

Constant Proportion Portfolio Insurance
固定比例投资组合保险策略

switch strategy
    case 'CPPI'

        for t = 1:period
            % Adjust Asset allocation
            Floor(t,:)    = Floor(end,:)*exp(-returnsBills*(period -(t-1)));% discounted floor
            Cushion(t,:)  = Wealth(t,:) - Floor(t,:);
            Exposure(t,:) = min(multiplier * (Cushion(t,:)),Wealth(t,:));
            Stocks(t,:)   = Exposure(t,:);
            Bills(t,:)    = Wealth(t,:) - Stocks(t,:);
            Wealth(t,:)   = Stocks(t,:) + Bills(t,:);
            %Apply Asset Returns
            Stocks(t+1,:) = Stocks(t,:).* exp(returnsStocks(t,:));
            Bills(t+1,:)  = Bills(t,:).* exp(returnsBills);
            Wealth(t+1,:) = Stocks(t+1,:) + Bills(t+1,:);

        end 

TIPP

Time Invariant Portfolio Protection
时间不变性投资组合保险策略

    case 'TIPP'
        for t = 1:period
            Cushion(t,:)  = Wealth(t,:) - Floor(t,:);
            Exposure(t,:) = min(multiplier * (Cushion(t,:)),Wealth(t,:));
            Stocks(t,:)   = Exposure(t,:);
            Bills(t,:)    = Wealth(t,:) - Stocks(t,:);
            Wealth(t,:)   = Stocks(t,:) + Bills(t,:);
            Stocks(t+1,:) =  Stocks(t,:) .*exp(returnsStocks(t,:)); 
            Bills(t+1,:)  =  Bills(t,:) .*exp(returnsBills);
            Wealth(t+1,:) = Stocks(t+1,:) + Bills(t+1,:);
            Floor(t+1,:)  = max( Wealth(t+1,:).* floor,Floor(t,:));
        end

syntheticPut

复制性卖权策略

    case 'syntheticPut'
        
        StockPrice = ones(period+1,path) * wealth;
        wStock     = ones(period+1,path);
        X          =  floor * wealth;
        sigma = volaStocks;
        T = period;
        for t=1:period
            Floor(t,:)    = Floor(end,:)*exp(-returnsBills*(period -(t-1)));% discounted floor
            Cushion(t,:)  = Wealth(t,:) - Floor(t,:);
            Exposure(t,:) = min(Cushion(t,:),Wealth(t,:));
            d1(t,:)     = (log(StockPrice(t,:)./X)+(returnsBills+0.5*sigma^2).*(T-t))./(sigma.*sqrt(T-t));
            d2(t,:)     = d1(t,:) - sigma.*sqrt(T-t);
            wStock(t,:) = (StockPrice(t,:).* normcdf(d1(t,:)))./(StockPrice(t,:).* normcdf(d1(t,:)) + X.*exp(-returnsBills.*(T-t)).*(1-normcdf(d2(t,:))));
            wStock(t,:) = min(wStock(t,:),1);
            Stocks(t,:)   = wStock(t,:).* Wealth(t,:);
            Bills(t,:)    = Wealth(t,:) - Stocks(t,:);
            Wealth(t,:)   = Stocks(t,:) + Bills(t,:);
            Stocks(t+1,:) = Stocks(t,:) .*exp(returnsStocks(t,:)); 
            Bills(t+1,:)  = Bills(t,:) .*exp(returnsBills);
            Wealth(t+1,:) = Stocks(t+1,:) + Bills(t+1,:);
            StockPrice(t+1,:) = StockPrice(t,:).* exp(returnsStocks(t,:));
            wStock(t+1,:)  =  Stocks(t+1,:)./Wealth(t+1,:);
        end 
    otherwise
        error('provide a portfolio insurance strategy')
end

2. functWienerProcess

function [returns] = functWienerProcess(mu,sigma,periods,paths)

returns = mu + sigma.*randn(periods,paths);

end 

3. scriptPortfolioInsurance

clear all;close all;clc
cd('D:\学习\MMF\Introduction to Computational Finance\project')

rng(2021);

%% 3a load data
[DAX,~,dataRaw] = xlsread('Data.xlsx','Tabelle1');
logReturns = log(DAX(1:end-1)./DAX(2:end)); 
mu = mean(logReturns);
sigma = std(logReturns);
periods = 60;
paths = 100000; 
simureturns = functWienerProcess(mu,sigma,periods,paths);

%% 3b 
%input for 3 PF insuruance strategies
wealth = 100;
m = 5;
floor = 0.9;
returnsB = 0;
returnsS = simureturns;
volaStocks = sigma;

[WealthC,FloorC] = functPortfolioInsurance(wealth,m,floor,'CPPI',returnsS,returnsB,volaStocks);
[WealthT,FloorT] = functPortfolioInsurance(wealth,m,floor,'TIPP',returnsS,returnsB,volaStocks);
[WealthP,FloorP] = functPortfolioInsurance(wealth,m,floor,'syntheticPut',returnsS,returnsB,volaStocks);

% input for buy and hold
mB = 1;
floorB = 0;

[WealthB,FloorB] = functPortfolioInsurance(wealth,mB,floorB,'CPPI',returnsS,returnsB,volaStocks);

%% 3c Plot
%end Wealth of 3 strategies
endWealth = [WealthC(end,:);WealthT(end,:);WealthP(end,:)];

plot(WealthB(end,:),endWealth,'o')
legend('CPPI','TIPP','syntheticPut')
xlabel('Stock investment')
ylabel('Portfolio insurance strategy')
title('Relative Wealth at Maturity')

%% 3d
endWealth = [endWealth;WealthB(end,:)];
expectedW = mean(endWealth,2);
shortfall = endWealth<floor * wealth;
sp = sum(shortfall ,2)/paths;
se = mean(max(floor*wealth - endWealth,0),2);
xlswrite('Data.xlsx',[expectedW sp se],'Shortfall','B2:D5');

在这里插入图片描述

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
【课程简介】 本课程适合所有对金融知识和MATLAB感兴趣的同学,通过本课程,你不仅可以学习到如何应用MATLAB,还可以学习到如何使用MATLAB进行金融数据处理与金融数据分析 【完整课程列表】 基于MATLAB的金融数据分析 金融MATLAB-第01,02章 金融市场与金融产品 MATLAB基础知识(共47页).ppt 基于MATLAB的金融数据分析 金融MATLAB-第03章 MATLAB与Excel文件的数据交换(共41页).ppt 基于MATLAB的金融数据分析 金融MATLAB-第05章 贷款按揭与保险产品 现金流分析案例(共44页).ppt 基于MATLAB的金融数据分析 金融MATLAB-第06章 随机模拟 概率分布与随机数(共33页).ppt 基于MATLAB的金融数据分析 金融MATLAB-第07章 cftool数据拟合 GDP与用电量增速分析(共22页).ppt 基于MATLAB的金融数据分析 金融MATLAB-第08章 策略模拟 组合保险策略分析(共32页).ppt 基于MATLAB的金融数据分析 金融MATLAB-第09章 KMV模型求解 方程与方程组的数值解(共31页).ppt 基于MATLAB的金融数据分析 金融MATLAB-第10章 期权定价模型与数值方法(共23页).ppt 基于MATLAB的金融数据分析 金融MATLAB-第12章 马克维兹均值 方差模型(共19页).ppt 基于MATLAB的金融数据分析 金融MATLAB-第13章 投资组合绩效(共22页).ppt 基于MATLAB的金融数据分析 金融MATLAB-第17章 固定收益证券的久期与凸度(共12页).ppt 基于MATLAB的金融数据分析 金融MATLAB-第18章 利率的期限结构(共7页).ppt 基于MATLAB的金融数据分析 金融MATLAB-第22章 技术分析 指标计算与绘图(共8页).ppt

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值