aboutsummaryrefslogtreecommitdiffstats
path: root/python/collateral/gs_fcm.py
blob: 87ab09a2acb489414b5d16b8684feebc1007d2a6 (plain)
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
import pandas as pd

from . import DAILY_DIR, SftpClient
from .common import compare_notionals, STRATEGY_CASH_MAPPING


def collateral(d, positions, *, engine, **kwargs):
    df = pd.read_csv(
        DAILY_DIR
        / "BowdSt"
        / "GS_fcm_reports"
        / f"Open _Trades_Report_LMCG_51341_{d:%Y%m%d}.csv",
        usecols=[
            "Notional",
            "Direction",
            "NPV (local)",
            "Maturity Date",
            "COB Date",
            "Red Code",
        ],
        parse_dates=["COB Date", "Maturity Date"],
        index_col=["Red Code", "Maturity Date"],
        thousands=",",
    )
    df.Notional = df.Notional.where(df.Direction == "Buy", -df.Notional)
    df.index.names = ["security_id", "maturity"]
    df = df.groupby(level=["security_id", "maturity"])[
        ["Notional", "NPV (local)"]
    ].sum()
    df = df.rename(columns={"Notional": "NOTIONAL"})
    compare_notionals(df, positions, "GS")
    positions["Amount"] = df.reindex(positions.index)["NPV (local)"]
    positions.folder = positions.folder.replace(STRATEGY_CASH_MAPPING)

    def aux(row):
        if row.folder == "XCURVE":
            return "SER_IGCVECSH" if row.currency == "USD" else "SER_ITRXCVCSH"
        else:
            return row.folder

    positions.folder = positions.apply(aux, axis=1)
    df = (
        positions.groupby(["folder", "currency"])
        .agg({"Amount": "sum"})
        .reset_index(["folder", "currency"])
    )
    df = df.rename(columns={"folder": "Strategy", "currency": "Currency"})
    df_margin = pd.read_csv(
        DAILY_DIR
        / "BowdSt"
        / "GS_fcm_reports"
        / f"Account_Balances_and_Margin_Report_LMCG_51338_{d:%Y%m%d}.csv",
        parse_dates=["COB Date"],
        thousands=",",
    )

    df_margin = df_margin.rename(
        columns={
            "Opening Balance (local)": "beginning_balance",
            "Ending Balance (local)": "ending_balance",
            "PAI (local)": "pai",
            "Account Value (local)": "account_value_market",
            "Initial Margin Requirement (local)": "current_im",
            "Excess/Deficit (local)": "current_excess_deficit",
            "Currency": "currency",
            "GS Account Number": "account",
            "COB Date": "date",
        }
    )
    cols = [
        "date",
        "account",
        "beginning_balance",
        "ending_balance",
        "pai",
        "account_value_market",
        "current_im",
        "current_excess_deficit",
        "currency",
    ]
    place_holders = ",".join(["%s"] * len(cols))
    engine.execute(
        f"INSERT INTO fcm_moneyline({','.join(cols)}) VALUES({place_holders})",
        list(df_margin[cols].itertuples(index=False)),
    )
    df["date"] = d
    return df.set_index("Strategy")