我想在投资组合管理中尝试遗传算法,但我现在不知道主要功能和约束应该如何。
我有一个矩阵与股票价格,矢量与权重和脚本,计算投资组合价格和投资组合回报/风险(标准)比率。我想在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
的每个元素?
谢谢
答案 0 :(得分:1)
这是一个非常开放的问题。将遗传算法应用于投资组合优化没有一种完美的方法。一般来说,你会做的事情如下:
要开始生成随机投资组合,以便每个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);
您也可以考虑查看this paper。