Advertisement
Guest User

InvestingSimulation

a guest
Jul 18th, 2015
255
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.79 KB | None | 0 0
  1. clc; clear all;
  2. %% Init params
  3. opt = {'il','us','lin'};
  4.  
  5. annualYield.il = 4 / 100; % [pct]
  6. annualYield.us = 4 / 100; % [pct]
  7. annualYield.lin = 0; % [pct]
  8. annualInflation.il = 0; % [pct]
  9. annualInflation.us = 0; % [pct]
  10. annualInflation.lin = 1.5 / 100; % [pct]
  11. tax.il = 25 / 100; % [pct]
  12. tax.us = 25 / 100; % [pct]
  13. tax.lin = 0; % [pct]
  14. dividendTax.il = 0; % [pct]
  15. dividendTax.us = 25 / 100; % [pct]
  16. dividendTax.lin = 0; % [pct]
  17. annualDividend.il = 2 / 100; % [pct]
  18. annualDividend.us = 2 / 100; % [pct]
  19. annualDividend.lin = 0; % [pct]
  20. annualfundExpense.us = 0.1 / 100; % [pct]
  21. annualfundExpense.il = 0.4 / 100; % [pct]
  22. annualfundExpense.lin = 0; % [pct]
  23. for iOpt=1:numel(opt)
  24. monthlyYield.(opt{iOpt}) = (1+annualYield.(opt{iOpt}))^(1/12)-1;% [pct]
  25. monthlyInflation.(opt{iOpt}) = (1+annualInflation.(opt{iOpt}))^(1/12)-1;% [pct];
  26. monthlyFundExpense.(opt{iOpt}) = (1+annualfundExpense.(opt{iOpt}))^(1/12)-1; % [pct]
  27. end
  28. actionType.il = 'pctg';
  29. actionType.us = 'fixed';
  30. actionType.lin = 'fixed';
  31. actionCost.il = 0.07 / 100; %[pct]
  32. actionCost.us = 28; % [nis]
  33. actionCost.lin = 0; % [nis]
  34. initialCapital = 1e5; % [nis]
  35. monthlyDeposit = 1e4; % [nis]
  36. currencyChangeCost.us = 0.5 / 100; % [nis]
  37. currencyChangeCost.il = 0; % [nis]
  38. currencyChangeCost.lin = 0; % [nis]
  39. years = 20;
  40. monthsPerDeposit = 1;
  41. line.il = 'b+';
  42. line.us = 'r+';
  43. line.lin = 'g+';
  44.  
  45. %% Simulate investment
  46. optOn = 1:3;
  47. capital = zeros(years*12, numel(optOn));
  48. gain = zeros(years*12+1, numel(optOn));
  49.  
  50. for iOpt = optOn
  51. % Initial buyout
  52. capital(1,iOpt) = initialCapital;
  53. capital(1,iOpt) = capital(1,iOpt) * ( 1-currencyChangeCost.(opt{iOpt}) ); % currency change
  54. switch actionType.(opt{iOpt}) % Initial action cost
  55. case 'pctg'
  56. capital(1,iOpt) = capital(1,iOpt) * ( 1-actionCost.(opt{iOpt}) );
  57. case 'fixed'
  58. capital(1,iOpt) = capital(1,iOpt) - actionCost.(opt{iOpt});
  59. end
  60.  
  61. % Continuous progress
  62. for iMonth = 2:(years*12-1)
  63. % Gain yield - continuously
  64. gain(iMonth-1,iOpt) = capital(iMonth-1,iOpt) * ( monthlyYield.(opt{iOpt}) - ...
  65. monthlyFundExpense.(opt{iOpt}) - monthlyInflation.(opt{iOpt}) );
  66. capital(iMonth,iOpt) = capital(iMonth-1,iOpt) + gain(iMonth-1,iOpt);
  67.  
  68. % Gain dividends every 12 months
  69. if mod(iMonth, 12) == 0 % Every end of year
  70. dividend = capital(iMonth,iOpt) * annualDividend.(opt{iOpt}); % get dividend
  71. capital(iMonth,iOpt) = capital(iMonth,iOpt) - dividend; % reinvest dividend
  72. taxedDividend = dividend * ( 1-dividendTax.(opt{iOpt}) ); % tax dividend
  73. capital(iMonth,iOpt) = capital(iMonth,iOpt) + taxedDividend; % reinvest dividend
  74. end
  75.  
  76. % Timely deposit
  77. if mod( iMonth, monthsPerDeposit ) == 0 % deposit every monthsPerDeposit
  78. deposit = monthlyDeposit * monthsPerDeposit;
  79. deposit = deposit * ( 1-currencyChangeCost.(opt{iOpt}) ); % currency change
  80. switch actionType.(opt{iOpt}) % action cost
  81. case 'pctg'
  82. deposit = deposit * ( 1-actionCost.(opt{iOpt}) );
  83. case 'fixed'
  84. deposit = deposit - actionCost.(opt{iOpt});
  85. end
  86. capital(iMonth,iOpt) = capital(iMonth,iOpt) + deposit;
  87. end
  88. end
  89.  
  90. % Final buyout (tax event)
  91. totalGain = sum(gain(:,iOpt));
  92. capital(iMonth+1,iOpt) = capital(iMonth,iOpt) - totalGain * tax.(opt{iOpt});
  93. end
  94.  
  95. % Plot results
  96. fig = figure(); hold on;
  97. xlabel('Months'); ylabel('Capital');
  98. msg = sprintf('%d%% annual yield, %d%% annual dividend, commisions like in IBI.', ...
  99. 4, 2);
  100. title(msg);
  101. for iOpt = optOn
  102. plot(1:size(capital,1), capital(:,iOpt), line.(opt{iOpt}))
  103. end
  104. legend(opt, 'Location','northwest');
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement