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

时间:2013-10-30 17:12:21

标签: matlab genetic-algorithm portfolio

我想在投资组合管理中尝试遗传算法,但我现在不知道主要功能和约束应该如何。

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

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.

我需要找到最佳权重组合,因此port_performance具有最大价值。 GA函数应如何显示,sum(w) = 1;w >= 0的每个元素?

谢谢

1 个答案:

答案 0 :(得分:1)

这是一个非常开放的问题。将遗传算法应用于投资组合优化没有一种完美的方法。一般来说,你会做的事情如下:

  1. 随机生成大量候选组合,以满足您的约束。
  2. 根据您的“健康指标”(可能是风险/回报率)评估每个投资组合。
  3. 选择您的投资组合的一个子集来“复制”并杀死其余部分。一般来说,你会选择按性能选择前50%。
  4. “品种”一些新的投资组合。你可以通过无性繁殖(即克隆旧的投资组合)或有性生殖(成对挑选旧的投资组合并以某种方式将它们组合起来以产生新的投资组合)来实现这一点。
  5. 将突变引入投资组合,但突变率较小(比如p = 0.01)。例如,您可以向上/向下随机移动一些权重,或者随机交换几个不同股票的权重。
  6. 您现在有了新的投资组合,您可以重新开始。
  7. 要开始生成随机投资组合,以便每个w(i) >= 0sum(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);
    

    您也可以考虑查看this paper