Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
courses:a4b33opt:cviceni10 [2009/11/25 23:33] kucerad1 |
courses:a4b33opt:cviceni10 [2025/01/03 18:28] (aktuální) |
||
---|---|---|---|
Řádek 1: | Řádek 1: | ||
- | ===== Cvičení 7 ===== | + | ===== Cvičení 10 ===== |
[[https://cw.felk.cvut.cz/lib/exe/fetch.php/courses/a4b33opt/cviceni/markowitz.pdf?id=courses%3Aa4b33opt%3Acviceni%3Astart&cache=cache|Zadání (Markowitzův model)]] | [[https://cw.felk.cvut.cz/lib/exe/fetch.php/courses/a4b33opt/cviceni/markowitz.pdf?id=courses%3Aa4b33opt%3Acviceni%3Astart&cache=cache|Zadání (Markowitzův model)]] | ||
Řádek 6: | Řádek 6: | ||
Ke spolecnemu vypracovani: | Ke spolecnemu vypracovani: | ||
- | <code> | + | <code matlab> |
clc; | clc; | ||
clear; | clear; | ||
Řádek 24: | Řádek 24: | ||
r(i,t)= (AkcieOdhad(t,i) - AkcieOdhad(t-1,i))/(AkcieOdhad(t-1,i)); | r(i,t)= (AkcieOdhad(t,i) - AkcieOdhad(t-1,i))/(AkcieOdhad(t-1,i)); | ||
end; | end; | ||
- | vyberR(i) = p*sum(r(i,:)); | + | vyberR(i) = p*sum(r(i,[2:T])); |
end; | end; | ||
Řádek 82: | Řádek 82: | ||
plot(riziko, vynos); | plot(riziko, vynos); | ||
</code> | </code> | ||
- | Neni to jeste spravne... Prosim editujte a komentujte... | + | Prosim editujte a komentujte... |
+ | |||
+ | Tak moje řešení včetně šestky. Ale ta se asi počítá poněkud špatně. Každopádně u nás na cviku to prošlo. Zřejmě je tam naopak to rovnoměrné rozložení a váhové rozložení, které by mělo být úplně nahoře (nejlepší výsledky). --- //[[zacham3@fel.cvut.cz|Martin Zachar]] 2009/11/26 18:38// | ||
+ | <code matlab> | ||
+ | clear vars; | ||
+ | close all; | ||
+ | clear all; | ||
+ | clc; | ||
+ | load akcie.mat; | ||
+ | |||
+ | %% 1 Vypocet parametru Markowitzova modelu | ||
+ | |||
+ | [aoH, aoW] = size(AkcieOdhad); | ||
+ | |||
+ | r = (AkcieOdhad((aoH - 1) : -1: 1, :) - AkcieOdhad(aoH : -1 : 2, :)) ./ AkcieOdhad(aoH : -1 : 2, :); | ||
+ | rprum = 1 / (aoH - 1) * sum (r); | ||
+ | |||
+ | r = r'; | ||
+ | rprum = rprum'; | ||
+ | |||
+ | V = zeros(aoW); | ||
+ | |||
+ | for i = 1 : aoW | ||
+ | for j = 1 : aoW | ||
+ | V(i,j) = 1 / (aoH - 2) * sum ((r(i, :) - rprum(i)) * (r(j,:) - rprum(j))'); | ||
+ | end; | ||
+ | end; | ||
+ | |||
+ | %% 5 Vypocet, kolik koupit akcii od ktere spolecnosti | ||
+ | |||
+ | r_p = min(rprum) : (max(rprum) - min(rprum)) / 50 : max(rprum); | ||
+ | |||
+ | Aeq = ones(1, aoW); | ||
+ | beq = 1; | ||
+ | |||
+ | lb = zeros(1, aoW); | ||
+ | A = -rprum'; | ||
+ | b = - r_p; | ||
+ | f = zeros(1, aoW); | ||
+ | |||
+ | rx = zeros(size(r_p)); | ||
+ | sigma = zeros(size(r_p)); | ||
+ | |||
+ | for i = 1 : size(r_p,2) | ||
+ | [x, fval] = quadprog(V, f, A, b(1,i), Aeq, beq, lb, []); | ||
+ | rx(i) = x' * rprum; | ||
+ | sigma(i) = 2*fval; | ||
+ | end; | ||
+ | |||
+ | |||
+ | figure; | ||
+ | hold on; | ||
+ | title('Zavislost r(x) na sigma'); | ||
+ | xlabel('risk \sigma^2(x)'); | ||
+ | ylabel('r(x)'); | ||
+ | plot(sigma, rx, '-'); | ||
+ | hold off; | ||
+ | |||
+ | |||
+ | %% 6 a) Od kazde spolecnosti nakoupim stejne akcii | ||
+ | clc; %close all; | ||
+ | x = ones(1,aoW) / aoW; | ||
+ | vklad = AkcieOdhad(1, :) .* x; | ||
+ | |||
+ | vynos = zeros(size(AkcieTest)); | ||
+ | |||
+ | for i = size(AkcieTest,1) : -1 : 1 | ||
+ | vynos(i, :) = AkcieTest(i, :).*x - vklad; | ||
+ | end; | ||
+ | |||
+ | vynos = flipud(vynos); | ||
+ | |||
+ | figure; | ||
+ | hold on; | ||
+ | title('Celkovy vynos za jednotlive mesice'); | ||
+ | xlabel('Mesice'); | ||
+ | ylabel('Vynos'); | ||
+ | plot(sum(vynos, 2), '-ro'); | ||
+ | |||
+ | %% 6 quadprog - vypoctu vahy jako v uloze 5 a podle toho nakoupim akcie | ||
+ | |||
+ | r_p = 0.037; | ||
+ | b = - r_p; | ||
+ | |||
+ | x = quadprog(V, f, A, b, Aeq, beq, lb, []); | ||
+ | vklad = AkcieOdhad(1, :) .* x'; | ||
+ | vynos = zeros(size(AkcieTest)); | ||
+ | |||
+ | for i = size(AkcieTest,1) : -1 : 1 | ||
+ | vynos(i, :) = AkcieTest(i, :).*x' - vklad; | ||
+ | end; | ||
+ | |||
+ | vynos = flipud(vynos); | ||
+ | |||
+ | xlabel('Mesice'); | ||
+ | ylabel('Vynos'); | ||
+ | plot(sum(vynos, 2), '-go'); | ||
+ | |||
+ | |||
+ | %% 6 b) Najdu nejsilnejsi spolecnot a do te dam vsechno | ||
+ | |||
+ | maximum = max(x); | ||
+ | for i = 1 : size(x, 1) | ||
+ | if x(i) == maximum | ||
+ | x(i) = 1; | ||
+ | else | ||
+ | x(i) = 0; | ||
+ | end; | ||
+ | end; | ||
+ | |||
+ | vklad = AkcieOdhad(1, :) .* x'; | ||
+ | vynos = zeros(size(AkcieTest)); | ||
+ | |||
+ | for i = size(AkcieTest,1) : -1 : 1 | ||
+ | vynos(i, :) = AkcieTest(i, :).*x' - vklad; | ||
+ | end; | ||
+ | |||
+ | vynos = flipud(vynos); | ||
+ | |||
+ | plot(sum(vynos, 2), '-bo'); | ||
+ | |||
+ | h = legend('rovnomerne rozlozeni', 'investice podle vah', 'investovani do nejocekavanejsiho', 'Location', 'Best'); | ||
+ | set(h,'Interpreter', 'none'); | ||
+ | hold off; | ||
+ | </code> | ||
~~DISCUSSION~~ | ~~DISCUSSION~~ | ||