数量金融学(5):CPPI策略

来源:互联网 发布:汉朝皇帝知乎 编辑:程序博客网 时间:2024/05/17 04:44

保本基金于20世纪80年代中期起源于美国,其核心是用投资组合保险策略进行基金的操作。保本基金是本金100%的保证(或者本金的一定比例的保证)。如果最终的收益大于等于保本金额,则担保人无需赔偿,否则,损失由担保人承担。

国际上比较流行的投资组合保险策略主要有对冲保险策略和固定比例投资组合保险策略(constant proportion portfolio insurance,CPPI)。

对冲保险策略主要依赖金融衍生品,实现投资组合价值的保本与增值。国际成熟市场的保本策略目前较多使用金融衍生品进行操作。目前国内缺乏这些金融工具,所以国内的保本基金主采取CPPI策略作为投资的保本策略。

Black and Jones (1987)提出了固定比例投资组合保险策略,让投资者根据个人对资产报酬的要求和对风险的承受能力设定适合于自己的投资组合保险。整个投资组合包括主动性资产(Active Asset)和保留性资产(Reserved Asset)。两类资产中较高风险并且预期回报较高的为主动性资产,较低风险低回报的则为保留性资产,因此一种资产可能在某些情况下是主动性资产,但在某些情况下则变成保留性资产。在股票和无风险资产的例子中,主动性资产指的就是股票,而保留性资产则是无风险资产。

  CPPI策略,全称为恒定比例组合保本策略(Constant Proportion Portfolio Insurance),该策略以数量化的分析模型为基础,通过动态调整基金在安全资产和风险资产的投资比例,确保基金投资组合的风险暴露水平不超过基金可承担的损失(该损失限额又称为安全垫),以实现保本周期到期时投资本金安全的目标。该策略在控制一定的下限风险的同时,通过投资风险资产增厚投资收益,实现资产增值的效果。

%% CPPIclear;close all;clc%% 定义市场参数,生成随机价格曲线trading_year = 1;trading_day_per_year = 252;days_per_calendar_year = 360;rf = 0.05;rf_daily = rf / days_per_calendar_year;trading_day_sim = trading_year * trading_day_per_year;exp_total_ret = 0.2; % 预期年化收益exp_yearly_std = 0.3; % 预期年化标准差exp_daily_ret = (1+exp_total_ret)^(1/trading_day_per_year) - 1;exp_daily_std = exp_yearly_std / sqrt(trading_day_per_year);mu = exp_daily_ret;sigma = exp_daily_std;% seed = 1;% rng(seed);random_ret = normrnd(mu,sigma,trading_day_sim,1); % 随机收益曲线random_idx = cumprod(1+random_ret);random_idx = [1 ; random_idx]; % idx的初始为1figure(1)subplot(211);plot(random_idx,'b');grid on;text(trading_day_sim,1,['收益' num2str((random_idx(end)-1)*100) '%'])title('标的')%% 定义CPPI参数init_nav = 1e4; % 初始本金adj_period = 30; % 调整周期guarantee_rate = 1; % 保本比例risk_multipler = 5; % 风险乘数risk_trading_fee_rate = 6 / 1000; % 风险资产交易费率risk_asset = zeros(trading_day_sim+1,1); % 风险资产rf_asset = zeros(trading_day_sim+1,1); % 无风险资产min_pv_asset = zeros(trading_day_sim+1,1); % 价值底线nav = zeros(trading_day_sim+1,1); % 总资产nav(1) = init_nav;%% CPPI策略% 第1天min_pv_asset(1) = guarantee_rate * init_nav / (1+rf_daily*trading_day_sim); % 第1天的价值底线risk_asset(1) = max(0,risk_multipler * (nav(1) - min_pv_asset(1))); % 风险资产 w/o feerf_asset(1) = (nav(1) - risk_asset(1)); % 无风险资产risk_asset(1) = risk_asset(1) * (1 - risk_trading_fee_rate);  % 扣去手续费% 第2天到最后1天for t = (2:trading_day_sim+1)        min_pv_asset(t) = guarantee_rate * init_nav / (1+rf_daily*(trading_day_sim-t+1)); % 价值底线    risk_asset(t) = (1+random_ret(t-1)) * risk_asset(t-1);    rf_asset(t) = (1+rf_daily) * rf_asset(t-1);    nav(t) = risk_asset(t) + rf_asset(t);    % 定期调整    if mod(t-1, adj_period) == 0        risk_asset_b4_adj = risk_asset(t);        risk_asset(t) = max(0,risk_multipler * (nav(t) - min_pv_asset(t))); % 风险资产        rf_asset(t) = nav(t) - risk_asset(t); % 无风险资产        risk_asset(t) = risk_asset(t) - abs(risk_asset_b4_adj - risk_asset(t)) * risk_trading_fee_rate; % 手续费    end            % 检查是否被强制平仓    if risk_asset(t) <= 0        rf_asset(t) = nav(t) - risk_asset(t) * risk_trading_fee_rate;        risk_asset(t) = 0;    end    end%%figure(1)subplot(212);plot(nav/init_nav,'b');hold on;grid on;% plot(rf_asset,'r');% plot(risk_asset,'g');% legend('nav','rf','risk');% % title([num2str((nav(end)/init_nav-1)*100)])text(trading_day_sim,1,['收益 ' num2str((nav(end)/init_nav-1)*100) '%'])title('净值')



熊市基本能保本,甚至有些收益。牛市收益不高。

这和经济周期有关。经济大环境不好,CPPI也许比较行销。

当然,在实际中,CPPI也不会像仿真的曲线这样这么神,还要考虑到更多的因素。

比如,rf是否可以达到这么多,流动性是否可以满足,资金量较小时是否能达到预期的目标仓位等。

另外,有人在算PV的时候,用的是 exp(-rt) 这种算法,即把时间连续化了……

然而目前我并不是很清楚为什么要这样做……



2017年8月13日23:43:05发现了一个错误。

检查强制平仓的动作,应该每天都进行。

但是,强制平仓的条件,应该不是risk资产<=0才平仓。

可以算一个target_risk_asset,如果target_risk_asset==0就平仓。

target_risk_asset = max(nav(t) - pv(t), 0)


第75行后面,应该加上 target_risk_asset = max(nav(t) - pv(t), 0)

然后如果target_risk_asset==0,就强平了。