48 lines
1.1 KiB
Python
48 lines
1.1 KiB
Python
import pandas as pd
|
|
from pathlib import Path
|
|
from datetime import datetime
|
|
|
|
MTM_FILE = Path("storage/mtm_ledger.csv")
|
|
|
|
def log_mtm(
|
|
sp_units,
|
|
gd_units,
|
|
sp_price,
|
|
gd_price,
|
|
total_invested,
|
|
):
|
|
sp_value = sp_units * sp_price
|
|
gd_value = gd_units * gd_price
|
|
portfolio_value = sp_value + gd_value
|
|
pnl = portfolio_value - total_invested
|
|
|
|
row = {
|
|
"timestamp": datetime.utcnow().isoformat(),
|
|
"sp_units": sp_units,
|
|
"gd_units": gd_units,
|
|
"sp_price": sp_price,
|
|
"gd_price": gd_price,
|
|
"sp_value": sp_value,
|
|
"gd_value": gd_value,
|
|
"portfolio_value": portfolio_value,
|
|
"total_invested": total_invested,
|
|
"pnl": pnl,
|
|
}
|
|
|
|
df = pd.DataFrame([row])
|
|
|
|
MTM_FILE.parent.mkdir(exist_ok=True)
|
|
|
|
if MTM_FILE.exists():
|
|
df.to_csv(MTM_FILE, mode="a", header=False, index=False)
|
|
else:
|
|
df.to_csv(MTM_FILE, index=False)
|
|
|
|
return portfolio_value, pnl
|
|
|
|
def should_log_mtm(df, current_ts):
|
|
if df.empty:
|
|
return True
|
|
last_ts = pd.to_datetime(df.iloc[-1]["timestamp"])
|
|
return current_ts.minute != last_ts.minute
|