joellewis/finance_skills

fixed-income-corporate

Analyze corporate bonds and credit instruments including investment grade and high yield debt.

Vedi sorgente
Documento Skill originale

Contenuto dal repository con titoli, esempi, codice, tabelle, link e immagini preservati.

Fixed Income — Corporate

Core Concepts

Credit Spreads

Compensation for default risk, liquidity risk, and downgrade risk above the risk-free rate. Multiple spread measures exist with increasing precision:

G-spread (Government Spread): Bond yield minus interpolated Treasury yield of the same maturity. Simple but assumes a flat term structure between benchmark maturities.

Z-spread (Zero-Volatility Spread): The constant spread added to each point on the risk-free spot rate curve such that the sum of discounted cash flows equals the bond's market price. Superior to G-spread because it accounts for the full shape of the term structure.

OAS (Option-Adjusted Spread): For bonds with embedded options, OAS = Z-spread minus the value of the embedded option. OAS represents the "true" credit compensation after removing the option component. Requires an interest rate model to compute.

Credit Ratings

AAA/AA/A/BBB are investment grade. BB/B/CCC/CC/C/D are high yield (speculative grade). The BBB/BB boundary is the most consequential threshold — many institutional mandates prohibit sub-investment-grade holdings. A downgrade across this boundary ("fallen angel") forces selling by constrained investors.

Migration Matrix

A transition matrix shows the probability of moving from one rating to another over a 1-year horizon. A BBB-rated issuer has roughly 85-90% probability of remaining BBB, 4-5% chance of upgrade, 4-5% chance of downgrade, and a small probability (~0.2%) of default. Migration matrices are published annually by rating agencies.

Default Probability, Loss Given Default, and Recovery Rate

  • PD = Probability of Default over a given horizon
  • LGD = Loss Given Default (percentage of exposure lost)
  • Recovery Rate (RR) = 1 - LGD
  • Expected Loss: EL = PD × LGD × EAD (Exposure at Default)

Recovery rates vary by seniority: senior secured (60-65%), senior unsecured (40-50%), subordinated (20-30%).

Callable Bonds

The issuer can redeem the bond early. Call schedules specify prices and dates. Yield-to-call (YTC) is calculated using the call date and call price. Yield-to-worst (YTW) is the minimum of YTM and all possible YTCs. For callable bonds, OAS is the appropriate spread measure (not G-spread or Z-spread).

Covenants

Maintenance covenants: Tested periodically (e.g., quarterly). Issuer must maintain financial ratios at all times. Common in bank loans.

Incurrence covenants: Tested only when the issuer takes a specific action (e.g., issues new debt). Common in bond indentures. Key covenants include leverage ratio (Debt/EBITDA), interest coverage (EBITDA/Interest), and restricted payments.

Private Credit

Direct lending by non-bank lenders to middle-market companies. Offers an illiquidity premium of 150-400bp over comparable syndicated loans. Typically features stronger covenant protection than public market deals. Valuations are mark-based (quarterly), which smooths reported volatility.

CDS (Credit Default Swaps)

A derivative where the protection buyer pays a periodic spread and receives payment upon a credit event. CDS spreads can be used to derive market-implied default probabilities. CDS spreads are often more responsive to credit deterioration than bond spreads.

Key Formulas

FormulaExpressionUse Case
G-spreadBond Yield - Interpolated Treasury YieldSimple spread measure
Z-spreadConstant spread s: P = sum CFt / (1+st+s)^tFull curve spread
OASZ-spread - Option CostSpread for callable bonds
Expected LossEL = PD × LGD × EADCredit loss estimation
Recovery RateRR = 1 - LGDRecovery from default
Yield-to-Worstmin(YTM, YTC1, YTC2, ...)Conservative yield measure

Worked Examples

Example 1: Compare Z-spread vs G-spread

Given: A 7-year corporate bond yields 5.8%. The 7-year interpolated Treasury yield is 4.5%. The Z-spread (computed using the full spot curve) is 118bp. Calculate: G-spread and compare to Z-spread Solution: G-spread = 5.8% - 4.5% = 1.30% = 130bp Z-spread = 118bp The G-spread (130bp) exceeds the Z-spread (118bp) by 12bp. This difference arises because the G-spread uses a single interpolated benchmark point while the Z-spread properly accounts for the shape of the entire yield curve. In a steep curve environment, G-spread tends to overstate the true spread.

Example 2: Expected Loss Calculation

Given: PD = 2% (annual), LGD = 60%, EAD = $1,000,000 Calculate: Expected annual loss Solution: EL = PD × LGD × EAD EL = 0.02 × 0.60 × $1,000,000 EL = $12,000

The expected annual credit loss is $12,000, or 1.2% of the exposure. This represents the actuarial cost of credit risk — the spread must at least cover this expected loss, with additional compensation for unexpected losses and risk aversion.

Common Pitfalls

  • Using G-spread for callable bonds — use OAS instead, which removes the option component
  • Ignoring liquidity premium in spread analysis — part of the spread compensates for illiquidity, not just default risk
  • Rating agency lag vs market-implied credit quality — CDS spreads often move before rating actions
  • Assuming recovery rates are constant — they vary significantly by seniority and economic cycle (lower in recessions)

Cross-References

  • fixed-income-sovereign (wealth-management plugin): the Treasury curve used as the risk-free benchmark
  • fixed-income-structured (wealth-management plugin): CLOs and structured credit products
  • alternatives (wealth-management plugin): private credit as an alternative investment
  • asset-allocation (wealth-management plugin): credit allocation in multi-asset portfolios

Running the Script

bash
uv run scripts/fixed_income_corporate.py            # run the demo (uses PEP 723 inline deps)
uv run scripts/fixed_income_corporate.py --verify   # check demo outputs against the worked examples (exit 1 on mismatch)
python3 scripts/fixed_income_corporate.py            # alternative (requires: pip install numpy scipy)

The demo prints the calculations covered above; its values match the worked examples in this skill. Run --help for a list of the classes and functions. For programmatic use, import the module rather than running it — the demo only executes under python fixed_income_corporate.py.

dallo stesso repository

Altri Skills

Tutti gli Skills
joellewis
Community

investment-policy

Construct comprehensive Investment Policy Statements governing return objectives, risk tolerance, and portfolio constraints. Use when the user asks about building an IPS, setting return objectives, assessing risk tolerance, defining investment constraints, or establishing rebalancing and benchmark policies. Also trigger when users mention 'investment plan', 'policy portfolio', 'risk capacity vs willingness', 'spending rate for an endowment', 'foundation payout', 'manager selection criteria', or ask how to document their investment strategy.

installazioni
1
GitHub Stars
184
Aggiornato
18 lug
joellewis
Community

account-maintenance

Process account maintenance requests across the account lifecycle. Use when changing a client address or contact info with identity verification, updating beneficiary designations after marriage, divorce, birth, or death, re-registering or re-titling an account to a trust or new entity, selecting tax lot methods or fixing cost basis records, applying legal or compliance holds or Reg T freezes, setting up systematic withdrawals or standing instructions, processing a death notification and estate account setup, handling a QDRO, power of attorney, or guardianship, closing accounts and managing escheatment, or designing data quality review programs.

installazioni
1
GitHub Stars
179
Aggiornato
18 lug
joellewis
Community

account-transfers

Process and manage account transfers between and within financial institutions. Use when handling full or partial ACAT transfers between broker-dealers, troubleshooting ACAT rejection codes or FINRA Rule 11870 timelines, setting up non-ACAT transfers (Fund/SERV, DTC free delivery, physical certificates), processing internal journal entries, handling retirement rollovers or Roth conversions with proper tax reporting, transferring cost basis under IRC Section 6045A, moving decedent assets to beneficiaries with date-of-death step-up, or reconciling residual credits and fractional shares after transfer completion.

installazioni
1
GitHub Stars
179
Aggiornato
18 lug
joellewis
Community

bet-sizing

Determine how much capital to allocate to individual positions within a portfolio. Use when the user asks about position sizing, the Kelly criterion, fractional Kelly, risk budgeting, or conviction weighting. Also trigger when users mention 'how much to put in one stock', 'maximum position size', 'how concentrated should my portfolio be', 'number of holdings', 'VaR budget per position', 'how big a bet', or ask about scaling position sizes with volatility.

installazioni
1
GitHub Stars
179
Aggiornato
18 lug