How collateral margaining works
This version: 2024-03-29
First version: 2023-03-29
We explain how the mechanics of collateral call between two counterparties works, taking into account CSA parameters.
1 Collateral margaining
The derivative financial market heavily relies on collateralization. If two parties B and C trade (OTC) derivatives, they typically exchange collateral to reduce the risk of losing money should the counterparty default at the time when the derivatives valuation \(V\) is positive. The exact details of the collateral exchange are defined in credit support annex (CSA) – which is a document that is part of ISDA agreement.
There essentially exist two types of CSA:
-
• unilateral (or one–way): in this CSA, collateral can only travel one way. For example, party B may request collateral from party C but party C can’t request collateral from B even when valuation \(V\) goes in favor of B (and hence has exposure towards B). This is commonly the case when party B is ’much stronger’ than party C (e.g. B is a bank, C is a small corporate),
-
• billateral (or two–way): in this CSA, collateral is exchanged both ways. Party B can request collateral from C but also C may request collateral from B if the valuation \(V\) goes in favor of C.
In this article we focus on the mechanics of billateral CSA. Unilateral CSA is essentially just a special case of billateral.
2 CSA parameters
To understand the meaning of the CSA parameters, it is first good to mention two types of collateral margin amounts:
-
• variation margin. This margin is posted to cover the observed valuation \(V\),
-
• independent / initial margin. This margin is posted to provide an additional buffer on top of that for \(V\); and is independent on \(V\).
The parameters defined in the CSA determine, if and under what circumstances these margin amounts should be posted. The key parameters are three: IA, THR, MTA and in a billateral CSA these are defined for each counterparty:
-
• \(\text {IA}_\text {B}\): independent amount of party B. This amount of collateral party B needs to deposit for the benefit of party C, irrespective of \(V\),
-
• \(\text {IA}_\text {C}\): independent amount of party C: This amount of collateral party C needs to deposit for the benefit of party B, irrespective of \(V\),
-
• \(\text {THR}_\text {B}\) threshold of party B. Threshold value until which party B doesn’t need to post collateral to party C. Therefore, only amounts exceeding the threshold are subject to collateral exchange. The higher the threshold, the less collateral balance will party B need to maintain at the counterparty C,
-
• \(\text {THR}_\text {C}\) threshold of party C. Threshold value until which party C doesn’t need to post collateral to party B. Therefore, only amounts exceeding the threshold are subject to collateral exchange. The higher the threshold, the less collateral balance will party C need to maintain at the counterparty B,
-
• \(\text {MTA}_\text {B}\) minimum transfer amount of party B. Party B only posts collateral to C when the collateral call amount exceeds \(\text {MTA}_\text {B}\),
-
• \(\text {MTA}_\text {C}\) minimum transfer amount of party C. Party C only posts collateral to B when the collateral call amount exceeds \(\text {MTA}_\text {C}\).
Another supportive parameter is a so called rounding parameter which is used for practicality. No one wants to exchange collateral amounts such as $17 842.92. The rounding (which is often defined as rounding to multiples of $10 000) would round this figure to $20 000.
In practice, often some of the above IA, THR, MTA parameters are 0. For example, if \(\text {IA}_\text {B}\) is non-zero, \(\text {THR}_\text {B}\) might be zero because these parameters act against each other and it would not make much sense to have both parameters non-zero.
3 CSA formula
Now that we know the meaning of each CSA parameter, the key question is how to combine them to compute what collateral balance shall be held at either party and what should be the potential collateral call?
To get there, it is best position ’us’ into one of these parties. So we accept the following convention:
-
• we are party ’B’ (=Bank),
-
• ’C’ stands for our Counterparty.
Mathematically, there is just one overall collateral balance \(c\) and one valuation \(V\), so what is positive from our point of view, becomes negative from counterparty’s point of view. We again accept the following convention:
-
• \(c>0\) means we (party B) have received collateral from counterparty C. \(c<0\) means we (party B) have have posted collateral to our counterparty C. In a similar way,
-
• \(V>0\) means the valuation of derivatives is positive from our (party B’s) perspective (and thus negative from party C’s perspective. \(V<0\) the valuation of derivatives is negative from our point of view, and it is positive from that of our counterparty.
The request to post (or send back excessive collateral) is called a collateral call. Collateral call takes into account reporting date \(t\) amount of collateral \(c(t)\), valuation of derivatives \(V(t)\) and CSA parameters.
To compute the collateral call amount, we three key steps are taken:
-
• compute what should be the collateral amount at \(t\), based on \(V(t)\) and CSA parameters. Let’s label this ideal amount of collateral \(c^*(t)\),
-
• compare this ideal collateral amount \(c^*(t)\) with observed collateral balance \(c(t)\). The difference \(c^*(t)-c(t)\) is gross collateral call amount.
-
• check if the gross collateral amount exceeds the MTA. If yes, then round gross amount and issue a collateral call.
We start with the first step, which we break down in two sub steps 1a (IA part), and 1b (threshold part).
Step 1a: IA
In this step, we compute \(c^*(t)\) in the absence of thresholds. It is the amount of collateral that should be held if thresholds didn’t exist (i.e. they were set to 0).
\(\seteqnumber{0}{3.}{0}\)\begin{equation} \label {eq:c_no_thr} c_{\text {noTHR}}^*(t) = V(t) + \text {IA} = V + \text {IA}_\text {C} - \text {IA}_\text {B}. \end{equation}
Clearly the collateral balance in the absence of thresholds is just determined by \(V(t)\) (as this part is entirely collateralized) and then by net IA amount. In what follows we will use IA to denote the net IA amount.
For example, when \(V=100\), \(\text {IA}_\text {B}=0, \text {IA}_\text {C}=50\) (=counterparty needs to deposit additional 50 units of collateral on top of for \(V(t)\)), then the \(c_{\text {noTHR}}^*(t)=100+50-0=150\). The \(V(t)\) in the absence of threshold is fully collateralized, plus we want a buffer of 50 over 100.
We read:
-
• \(V(t) + \text {IA}>0\): counterparty should deposit collateral with Bank,
-
• \(V(t) + \text {IA}<0\): Bank should deposit collateral with counterparty.
However, this deposit should only happen if a threshold is exceeded. Which takes us to the next point.
Step 1b: Threshold
Generally, thresholds reduce the collateral amount (in the absolute sense), only amounts exceeding thresholds impact \(c^*(t)\). They can be though of as expressing tolerance to the exposure.
Let’s consider two scenarios.
Scenario 1: \(V(t)+\text {IA}\ge 0\) (Bank shall have collateral from Counterparty), we need to check to what extent this exceeds Counterparty’s threshold \(\text {THR}_C\), otherwise the counterparty doesn’t need to post anything. Thus, this excess amount is \(\max (V(t) + \text {IA} - \text {THR}_\text {C},0)\).
Scenario 2: \(V(t)+\text {IA}<0\) (Counterparty shall have collateral from Bank), we need to check to what extent this exceeds Bank’s threshold \(\text {THR}_C\), otherwise the Bank doesn’t need to post anything. Thus, this excess amount is \(\min (V(t) + \text {IA} + \text {THR}_\text {B},0)\). The formula is similar to Scenario 1 only that \(\min (.)\) and ’\(+\)’ sign in the formula take into account the ’negative’ values.
Collecting both scenarios into a single expression gives us the expected collateral balance
\(\seteqnumber{0}{3.}{1}\)\begin{equation} \label {eq:c_with_thr} c^*(t) = \begin{cases} \max (V(t) + \text {IA} - \text {THR}_\text {C},0), & \text { if } V(t)+\text {IA}\ge 0 \\ \min (V(t) + \text {IA} + \text {THR}_\text {B},0). & \text { if } V(t)+\text {IA}<0 \end {cases}. \end{equation}
Step 2: gross collateral call
Now that we know what should be the expected collateral balance \(c^*(t)\), we can compute a collateral call in the absence of MTA. This is called a gross collateral call amount.
Gross collateral call is simply the difference between the optimal amount of collateral \(c^*(t)\) and the observed amount of collateral \(c(t)\), so
\(\seteqnumber{0}{3.}{2}\)\begin{equation} \label {eq:gross_call} \text {callNoMTA}(t) = {c^*}(t) - c(t). \end{equation}
Step 3: collateral call with MTA
Now that we know how much collateral shall be exchanged should MTA not exist, we shall check if this exceeds MTA for such exchange to happen. Which MTA (\(\text {MTA}_\text {B}\) or \(\text {MTA}_\text {C}\)) to use depends on who shall post the collateral. If Bank posts, then \(\text {MTA}_\text {B}\) applies, if Counterparty posts, then \(\text {MTA}_\text {C}\) matters.
\(\seteqnumber{0}{3.}{3}\)\begin{equation} \label {eq:net_call} \text {call}(t) = \begin{cases} \text {callNoMTA}(t) \cdot {{\bf {1}}_{\left \{ {|\text {callNoMTA}(t)| \ge \text {MTA}_\text {C}} \right \}}}, & \text { if } \text {callNoMTA}(t) \ge 0 \\ \text {callNoMTA}(t) \cdot {{\bf {1}}_{\left \{ {|\text {callNoMTA}(t)| \ge \text {MTA}_\text {B}} \right \}}}, & \text { if } \text {callNoMTA}(t) < 0. \end {cases}. \end{equation}
Following our sign convention, \(\text {call}(t)>0\) means Bank asks for collateral from the Counterparty. \(\text {call}(t) < 0\) means Counterparty asks for collateral from Bank.
Final, but a rather cosmetic step would be rounding of the call amount.
Formulas (3.1)–(3.4) give the correct collateral call figure.
4 Sample python code
Below we show a simple python code that implements the above steps.
def csa_formula(V, c, IA_B, IA_C, THR_B, THR_C, MTA_B, MTA_C): """ Implementation of collateral formula INPUTS: V = valuation of trades from B's perspective c = current collateral balance from B's perspective IA_B = B's IA. Extra buffer B needs to provide to C on top of V IA_C = C's IA. Extra buffer C needs to provide to B on top of V THR_B = B's threshold. Exposures exceeding this threshold will impact B's obligation to post collateral to C THR_C = C's threshold. Exposures exceeding this threshold will impact C's obligation to post collateral to B MTA_B = B's minimum transfer amount. B transfers collateral to C only if the call amount exceeds MTA_B MTA_C = C's minimum transfer amount. C transfers collateral to B only if the call amount exceeds MTA_C RETURNS: call = collateral call amount call > 0 means B asks C for collateral call < 0 means C asks B for collateral c_star = target collateral balance (no MTA) c_final = target collateral balance (after call is settled) """ # net IA IA = IA_C - IA_B # step 1A: target collateral balance with no thresholds c_no_THR = V + IA # step 1B: target collateral balance after thresholds c_star = max(V+IA-THR_C,0) if (V + IA) >= 0 else min(V+IA+THR_B, 0) # step 2: gross collateral call callNoMTA = c_star - c # step 3: collateral call with MTA call = callNoMTA*(abs(callNoMTA)>=MTA_C) if callNoMTA>=0 else callNoMTA * (abs(callNoMTA)>=MTA_B) # this will be the col balance after the call amount is settled c_final = c + call return call, c_star, c_final # example call, c_star, c_final = csa_formula(V = -40, c = 5, IA_B = 10, IA_C = 0, THR_B = 25, THR_C = 35, MTA_B = 5, MTA_C = 10) print(f'call amount: {call}, collateral balance after call amount settles: {c_final}') # prints 'call amount: -30, collateral balance after call amount settles: -25'