class Performance:
@staticmethod
def performance(time_step: int, portfolio_obj: portfolio):
'''save to file'''
equity = portfolio_obj.equity
save_file = InitialConditions.get_save_file()
record = {
"time_step": time_step,
"timestamp": (
InitialConditions.get_initial_time() +
timedelta(seconds = InitialConditions.get_time_step_size() * time_step)
).isoformat(),
"total equity": equity,
"positions": portfolio_obj.positions
}
#append total to savefile, must exist
with open(save_file, "a") as f:
f.write(json.dumps(record) + "\n")
@staticmethod
def summary(portfolio_obj: portfolio):
"""plot equity curve"""
save_file = InitialConditions.get_save_file()
times = []
equities = []
with open(save_file, "r") as f:
for line in f:
record = json.loads(line)
times.append(datetime.fromisoformat(record["timestamp"]))
equities.append(record["total equity"])
png_file = "plot.png"
plt.figure()
plt.plot(times, equities, 'o')
plt.xlabel("Times")
plt.ylabel("Equity")
plt.title("Equity Curve")
plt.grid(True)
plt.savefig(png_file, dpi=150, bbox_inches="tight")
plt.close()