EDIT: Alkuperäisessä oli virheitä, nyt verot yms. otettu huomioon oikein.
Tämä kiinnosti minua sen verran, että loin chatGPT:n avulla Matlab-skriptin, jolla laskin tarkat kynnysrajat tuotolle, jota vaaditaan, jotta SV kannattaa.
Esim. Nordnetin tapauksessa 10v sijoitusaika 100te antaa tulokseksi kynnysrajaksi 7.7%, jos salkku on pääosin myyntivoitoista koostuva salkku. Sen sijaan jos salkku on puhdas osinkosalkku, kynnysraja vuosituotolle on 13.2%, koska ymmärtääkseni SV:stä maksetaan pääomatulon mukaan veroja (30%/34%) ja osingoista maksaisit vain 85%*(30%/34%) SV ulkopuolella. Eli jos vuosituotoissa jäädään keskimäärin näiden alle ei vakuutuskuoresta ole etua muuta kuin pankille.
Alla vielä koodi, ja miten kutsua. Tämän saa väännettyä chatGPT:n avulla eri ohjelmointikielille.
calculate_required_return(100000,0.005,[0.3 0.34],10); % Esimerkiksi Nordea/OP hallinnointipalkkio 0.5%
Tarvittava vuotuinen tuotto: 9.2640%
calculate_required_return(100000,0.0035,[0.3 0.34],10);
Tarvittava vuotuinen tuotto: 7.7302%
calculate_required_return(100000,0.0035,[0.3 0.34]*0.85,10);
Tarvittava vuotuinen tuotto: 13.2356%
% ChatGPT vastauksesta muokattu
function required_return = calculate_required_return(initial_investment,management_fee,tax_rate,years)
if nargin==0,
% Alustetaan parametrit
initial_investment = 100000;
management_fee = 0.005; % Hallinnointipalkkio 0.5%
tax_rate=[0.3 0.34]; % <=30000 ja ylimenevä osuus
years = 10; % Tarkastelujakson pituus vuosina
end;
% Sopimuksen ulkopuolinen sijoitus (verot maksetaan vuosittain)
function final_outside = calculate_outside(p)
x = initial_investment;
for i = 1:years
annual_growth = x * p;
if annual_growth<=30000,
x = x + annual_growth * (1-tax_rate(1)); % Vähennetään vero vuosittaisesta tuotosta
else
x = x + 30000*(1-tax_rate(1))+(annual_growth-30000)*(1-tax_rate(2)); % Vähennetään vero vuosittaisesta tuotosta
end;
end
final_outside = x-initial_investment; % Lopullinen tuotto
end
% Sopimuksen sisäinen sijoitus (hallinnointipalkkio maksetaan vuosittain)
function final_inside = calculate_inside(p)
x = initial_investment;
for i = 1:years
x = x * (1 + p); % Lisätään vuosittainen tuotto
x = x * (1 - management_fee); % Vähennetään hallinnointipalkkio
end
final_inside = x-initial_investment; % Lopullinen tuotto
% Maksetaan verot
if final_inside<=30000,
final_inside=final_inside*(1-tax_rate(1));
else
final_inside=30000*(1-0.3)+(final_inside-30000)*(1-0.34);
end;
end
% Funktion määrittely erojen löytämiseksi
function diff = difference(p)
diff = calculate_inside(p) - calculate_outside(p);
end
% Etsitään tarvittava vuotuinen tuotto, joka saavuttaa saman loppuarvon molemmille
options = optimset(‘TolX’, 1e-10); % Asetetaan toleranssi
required_return = fzero(@difference, 0.05, options); % Aloitetaan arvauksesta 5%
fprintf(‘Tarvittava vuotuinen tuotto: %.4f%%\n’, required_return * 100);
end