-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathInvestment Portfolio Simulation
More file actions
47 lines (35 loc) · 1.34 KB
/
Investment Portfolio Simulation
File metadata and controls
47 lines (35 loc) · 1.34 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
import random
# Initial portfolio distribution
initial_value = 100.0
equity = initial_value / 3
cash = initial_value / 3
property = initial_value / 3
# Number of trials and steps
num_trials = 40
num_steps = 30
# Lists to store results
values_list = []
low_count = 0
for trial in range(num_trials): # 40 trials
for step in range(num_steps): # 30 steps per trial
equity *= 1.13 * (random.randint(1, 200) / 100) # Introducing randomness
cash *= 0.95
property *= 1.064
value = equity + cash + property
# Rebalancing
equity = cash = property = value / 3
print(f"Step {step + 1}: Total Value = {value:.2f}, Cash = {cash:.2f}, Equity = {equity:.2f}, Property = {property:.2f}")
if value < 50: # Tracking trials that more than halve in value
low_count += 1
values_list.append(value)
# Resetting global starting points for the next trial
equity = cash = property = initial_value / 3
# Results
mean_value = sum(values_list) / num_trials
range_value = max(values_list) - min(values_list)
print(f"Values List: {values_list}")
print(f"Number of trials with value below 50: {low_count}")
print(f"Mean Value: {mean_value:.2f}")
print(f"Range: {range_value:.2f}")
print(f"Max Value: {max(values_list):.2f}")
print(f"Min Value: {min(values_list):.2f}")