-2

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

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

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

谢谢

4

1 回答 1

1

这是一个非常开放的问题。没有一种完美的方法可以将遗传算法应用于投资组合优化。通常,您会执行以下操作:

  1. 随机生成大量满足您的约束的候选投资组合。
  2. 根据您的“适合度指标”评估每个投资组合,这可能是风险/回报率。
  3. 选择你的投资组合的一个子集来“复制”并杀死其余的。通常你会做一些事情,比如按性能选择前 50%。
  4. “培育”一些新的投资组合。您可以通过无性繁殖(即克隆您的旧投资组合)或有性繁殖(成对挑选旧投资组合并以某种方式将它们组合以生成新投资组合)来做到这一点。
  5. 以一些小的突变率(例如 p = 0.01)将突变引入投资组合。例如,您可以随机上下移动一些权重,或者随机交换几个不同股票的权重。
  6. 您现在拥有一批新的投资组合,您可以重新开始。

开始生成你的随机投资组合,这样你每个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);

你也可以考虑看看这篇论文

于 2013-10-30T18:09:23.427 回答