|
|
|
@ -30,7 +30,7 @@ def get_data(stocks, start, end):
|
|
|
|
def human_readable_size(size, decimal_places=3):
|
|
|
|
def human_readable_size(size, decimal_places=3):
|
|
|
|
for unit in ["$", "K$", "M$", "G$", "T$", "P$"]:
|
|
|
|
for unit in ["$", "K$", "M$", "G$", "T$", "P$"]:
|
|
|
|
if size < 1000.0 or unit == "P$":
|
|
|
|
if size < 1000.0 or unit == "P$":
|
|
|
|
return f"{size:.{decimal_places}f} {unit}"
|
|
|
|
return f"{size:.{decimal_places}f}{unit}"
|
|
|
|
break
|
|
|
|
break
|
|
|
|
size /= 1000.0
|
|
|
|
size /= 1000.0
|
|
|
|
|
|
|
|
|
|
|
|
@ -121,23 +121,25 @@ def simulate(stockData, monthly_params):
|
|
|
|
(actualEnd - actualStart).days / 365,
|
|
|
|
(actualEnd - actualStart).days / 365,
|
|
|
|
)
|
|
|
|
)
|
|
|
|
)
|
|
|
|
)
|
|
|
|
# print(df[["annual%", "froi%", "cost", "total_value", "max_dd%", "max_md"]])
|
|
|
|
with pd.option_context("display.max_rows", None, "display.max_columns", None):
|
|
|
|
print(df)
|
|
|
|
# print(df[["annual%", "froi%", "cost", "total_value", "max_dd%", "max_md"]])
|
|
|
|
|
|
|
|
print(df)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
if __name__ == "__main__":
|
|
|
|
stockList = ["^GSPC"]
|
|
|
|
stockList = ["^GSPC"]
|
|
|
|
monthly_params = dict(sum=1000, coef=1.001)
|
|
|
|
monthly_params = dict(sum=1000, coef=1, t_rate=1 + 0.02 / 12)
|
|
|
|
# startDate = datetime.datetime.fromisoformat("2000-01-01")
|
|
|
|
# startDate = datetime.datetime.fromisoformat("2000-01-01")
|
|
|
|
# endDate = datetime.datetime.fromisoformat("2022-01-01")
|
|
|
|
# endDate = datetime.datetime.fromisoformat("2022-01-01")
|
|
|
|
print(stockList[0])
|
|
|
|
print(stockList[0])
|
|
|
|
for period_years in (1, 2, 5, 10, 20, 50, 100):
|
|
|
|
"""
|
|
|
|
|
|
|
|
for period_years in (10, 20):
|
|
|
|
end_date = datetime.datetime.now()
|
|
|
|
end_date = datetime.datetime.now()
|
|
|
|
start_date = end_date - datetime.timedelta(days=period_years * 365)
|
|
|
|
start_date = end_date - datetime.timedelta(days=period_years * 365)
|
|
|
|
stockData = get_data(stockList[0], start_date, end_date)
|
|
|
|
stockData = get_data(stockList[0], start_date, end_date)
|
|
|
|
simulate(stockData, monthly_params)
|
|
|
|
simulate(stockData, monthly_params)
|
|
|
|
"""
|
|
|
|
"""
|
|
|
|
period_years = 10
|
|
|
|
period_years = 5
|
|
|
|
stockData = get_data(
|
|
|
|
stockData = get_data(
|
|
|
|
stockList[0],
|
|
|
|
stockList[0],
|
|
|
|
datetime.datetime.fromisoformat("1900-01-01"),
|
|
|
|
datetime.datetime.fromisoformat("1900-01-01"),
|
|
|
|
@ -147,9 +149,8 @@ if __name__ == "__main__":
|
|
|
|
end_date = start_date + datetime.timedelta(days=period_years * 365)
|
|
|
|
end_date = start_date + datetime.timedelta(days=period_years * 365)
|
|
|
|
while start_date < datetime.datetime.today():
|
|
|
|
while start_date < datetime.datetime.today():
|
|
|
|
stockData = get_data(stockList[0], start_date, end_date)
|
|
|
|
stockData = get_data(stockList[0], start_date, end_date)
|
|
|
|
simulate(stockData)
|
|
|
|
simulate(stockData, monthly_params)
|
|
|
|
start_date, end_date = (
|
|
|
|
start_date, end_date = (
|
|
|
|
end_date,
|
|
|
|
end_date,
|
|
|
|
end_date + datetime.timedelta(days=period_years * 365),
|
|
|
|
end_date + datetime.timedelta(days=period_years * 365),
|
|
|
|
)
|
|
|
|
)
|
|
|
|
"""
|
|
|
|
|
|
|
|
|