投资组合管理中的Matlab遗传算法

投资组合管理中的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)

我想尝试在投资组合管理中使用遗传算法,但我现在不知道主要功能和约束应该是什么样子

我有股票价格矩阵,权重向量和计算投资组合价格和投资组合回报/风险(std)比率的脚本。我想在MATLAB中使用遗传算法,这样可以测试不同的风险组合,并找到最优投资组合(最优-最高回报/风险(std)比率)

价格
-矩阵,其中列表示不同的股票,行表示日价格

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′/代码>