投资组合管理中的Matlab遗传算法
我想尝试在投资组合管理中使用遗传算法,但我现在不知道主要功能和约束应该是什么样子 我有股票价格矩阵,权重向量和计算投资组合价格和投资组合回报/风险(std)比率的脚本。我想在MATLAB中使用遗传算法,这样可以测试不同的风险组合,并找到最优投资组合(最优-最高回报/风险(std)比率)投资组合管理中的Matlab遗传算法,matlab,genetic-algorithm,portfolio,Matlab,Genetic Algorithm,Portfolio,我想尝试在投资组合管理中使用遗传算法,但我现在不知道主要功能和约束应该是什么样子 我有股票价格矩阵,权重向量和计算投资组合价格和投资组合回报/风险(std)比率的脚本。我想在MATLAB中使用遗传算法,这样可以测试不同的风险组合,并找到最优投资组合(最优-最高回报/风险(std)比率) 价格-矩阵,其中列表示不同的股票,行表示日价格 w-带权重的向量[0.333,0.333,0.333] 计算投资组合绩效的脚本: d = length(prices); n = numel(prices)
价格
-矩阵,其中列表示不同的股票,行表示日价格
w
-带权重的向量[0.333,0.333,0.333]
计算投资组合绩效的脚本:
d = length(prices);
n = numel(prices);
for j = 1:d
temp = 0;
for i = 1:n
temp = temp + prices(j,i) * w(i);
end
ap(j) = temp;
end
port_performance = rr_ratio(ap); %calculates return/risk(std) ratio.
我需要找到权重的最佳组合,这样端口性能将具有最大值。GA函数应该是什么样子的,所以sum(w)=1;
和w>=0的每个元素
谢谢你这是一个非常开放的问题。没有一种完美的方法可以将遗传算法应用于投资组合优化。通常,你会做如下操作:
随机生成大量满足约束条件的候选投资组合
根据你的“适合度指标”评估每个投资组合,该指标可能是风险/回报比率
从你的投资组合中选择一个子集来“复制”并杀死其余的。通常,你会根据表现选择前50%的投资组合
“培育”一些新的投资组合。你可以通过无性繁殖(即克隆你的旧投资组合)或有性繁殖(成对挑选旧投资组合,并以某种方式组合它们以生成新投资组合)来做到这一点
以较小的突变率(比如p=0.01)将突变引入投资组合。例如,你可以随机地将一些权重向上/向下移动,或者随机地将权重交换给两个不同的股票
你现在有了新的投资组合,你可以重新开始
首先生成随机投资组合,使每个w(i)>=0
和sum(w)=1
>> w = rand(numPortfolios, numStocks);
>> w = bsxfun(@rdivide, w, sum(w,2));
现在,w
的每一行都是投资组合权重的候选集
要培育两个投资组合,你可以取平均值
>> wNew = 0.5 * (w1 + w2);
或者您可以从每个投资组合中随机选择元素,然后重新规范化以确保权重总和为1
>> wNew = zeros(1, numStocks);
>> x = rand(1, numStocks) < 0.5;
>> wNew( x) = w1(x);
>> wNew(~x) = w2(x);
>> wNew = wNew / sum(wNew);
>wNew=0(1,numStocks);
>>x=兰特(1,单位)<0.5;
>>wNew(x)=w1(x);
>>wNew(~x)=w2(x);
>>wNew=wNew/总和(wNew);
你也可以考虑看一下。
你可以保存一些代码行,只写<代码> AP =价格*w′/代码>