Chuck Fang
I am an Assistant Professor of Finance at Drexel University. My research interests are Credit Markets, Monetary Policy, and Financial Innovations. I received PhD in Finance from UPenn Wharton in 2023 and BAs in Econ, Math and Stat from UC Berkeley in 2015. My Chinese name is Chenbo Fang 方辰博.
chuck dot fang at drexel dot edu
Update
New paper: "Dissecting Bond Market Transmission of Monetary Policy" with Kairong Xiao
New paper: "Unrealized Trading Gains"
New paper: "Go with the Flow: Debt Structure Changes and Monetary Policy Transmission" with Greg Nini
Updated Bond-Compustat-CRSP Link
Working Paper
WFA Brattle Group PhD Candidate Award for Outstanding Research
Publication
Restructuring Sovereign Bonds: Holdouts, Haircuts and the Effectiveness of CACs, with Julian Schumacher and Christoph Trebesch, IMF Economic Review (2021)
Data Stuff
This is part of my paper "Monetary Policy Amplification through Bond Fund Flows"
Most bonds are issued through subsidiaries that do not have the same identifiers (e.g. CUSIP6) as ultimate parents. E.g. Shell plc issues bonds through Shell International Finance B.V. Importantly, 19% of issuer CUSIPs change ultimate parents over time. E.g. CUSIP 362338AQ8 changed from Verizon (GVKEY 002136) to Frontier Communications (GVKEY 135484) in 2016. I construct real-time bond-GVKEY link using the bond-ticker mapping in TRACE and the ticker-GVKEY mapping in Compustat Snapshot
Bond ticker can differ from stock ticker. E.g. MIT refers to Massachusetts Institute of Technology in TRACE but Mason Industrial Technology in CRSP, CITI refers to Citigroup Inc in TRACE but Canterbury Consulting Group in CRSP, RBC refers to Royal Bank of Canada in TRACE but RBC Bearings Inc (a manufacturer of bearings) in CRSP
Berkshire Hathaway owns many public subsidiaries, I link bonds to these subsidiaries instead of BRK. Same for Blackstone and MacAndrews & Forbes.
This link covers 29,253 foreign issuers (e.g. BMW) and issuers without public equity (e.g. Sprint under Softbank), which are not covered in CRSP
This link covers 8,862 144A bonds (e.g. CUSIP 36164NFH3), which are currently not covered by WRDS Bond-CRSP Link
I hand check the following violations and make manual corrections (download):
Sum of total bond outstanding from Mergent FISD should be less than total debt outstanding from Compustat (DLC + DLTT)
Sum of total bond outstanding from Mergent FISD should be similar to total bonds and notes from Capital IQ
Mergent FISD
Coverage of foreign bonds is not great. For example, Apple's 2022 EUR bond 037833AU4 and 2026 EUR bond 037833AV2 (both issued in 2014) are not covered.
Many private placements have both 144A CUSIP and RegS CINS. RegS CINS is usually missing. E.g. for ISSUE_ID 771231, CUSIP shows its 144A CUSIP 29878TDD3, not its RegS CINS B3821S3C9.
There are duplicates:
Apple's 2025-05-24 EUR bond shows up three times, twice as ISIN XS1619312173 and once with the wrong CUSIP 037833CW8 (which corresponds to the 2029 EUR bond).
Peabody Energy Corp's 2022-03-31 bond is duplicated, once as CUSIP 704549AR5 and once as CUSIP 70457LAA2. So is its 2025-03-31 bond.
OFFERING_AMT and AMOUNT_OUTSTANDING are often off by 1000 times. E.g. for CUSIP 841504AA1, OFFERING_AMT should be 375 million instead of 375 thousand. Updates to AMOUNT_OUTSTANDING can be missing. E.g. for CUSIP 87264AAP0, the redemption call in March 2021 is missing. This is problematic if the analysis is specifically about (net) amount of bond issuance. The following cases are error prone, and I recommend substitute their values with other databases (e.g. Refinitiv), the logic being that other databases are unlikely to make the same exact mistakes.
OFFERING_AMT is more than 100 times the maximum of AMOUNT_OUTSTANDING or vice versa
ANOUNT_OUTSTANDING is negative
ANOUNT_OUTSTANDING is positive but EFFECTIVE_DATE is beyond MATURITY and there is no default
AMOUNT_OUTSTANDING is positive but there is no trade in TRACE in the neighboring years
AMOUNT_OUTSTANDING is smaller than the combined holdings of mutual funds and insurance companies
CRSP / Morningstar
Some holdings are incomplete. E.g., InvestmentId F000010MGC only reports 10% of its holdings for all non-quarter-end months. In order to filter out incomplete holdings, require the sum of holdings to be similar to total net assets.
nbr_shares / shares can have the wrong scale, e.g. crsp_portno 1032215 report_dt 2015-07-31 security_name Bahamas 6.625% 15-May-2033 cusip 056732AE nbr_shares 12600000000 market_val 744000. The following cases are likely errors. I recommend substitute these with other databases. E.g. if CRSP has error, use Morningstar.
Reported price (market_val / nbr_shares x 100) is >10x or <0.1x the price from TRACE
Loans are frequently reported as zero-coupon bonds, e.g. "CAESARS RESORT COLLECTION LLC 0.000% 22-Dec-2024". My guess is that when coupon is missing, 0.000% is automatically inserted. At the same time, there are bonds with legitimate 0.000%, e.g. "Germany 0.000% 18-Oct-2024".
The definition of a fund can be different in CRSP vs Morningstar. For example, DFA International Value I/II/III/V have the same crsp_portno 1022574 in CRSP but four different FundId/MasterPortfolioId in Morningstar.
Vanguard Total Bond Market Index Inv (VBMFX) and Vanguard Total Bond Market II Idx Inv (VTBIX) are almost identical in terms of style, managers, returns. I don't understand why are they two separate funds...
Capital IQ Debt Structure
Each instance can be associated with multiple collections: one 10K can contain balance sheet, income statement, etc
Each collection can be associated with multiple instances: Apple's 2010Q4 balance sheet can come from press release, S-4, 10K, 10K/A
Some debt structure is heavily abridged and therefore uninformative (e.g. for calculating debt maturity). For example, for companyid 273607, 2010Q3 lumps nearly all debt together under "Other Borrowings", 2012Q2/Q3 lump a couple of long-term bonds together under "Other Borrowings", 2014Q3 (financialcollectionid 1705308346) lumps a couple of long-term bonds together under "Notes Payable". As another example, Apple's debt structure remains the same from 2018Q4 to 2019Q1, but 2018Q4 has all bonds separated out whereas 2019Q1 lumps many bonds together.
componentid can change over time. For example, 923510253 and 926071562 refer to the same bond, 923510253 is used for 2021-09 and 2022-03, and 926071562 is used for 2021-12 and 2022-06. Therefore, we cannot interpolate data for each component.
dataitemvalue is in filing currency, e.g. Apple ¥250.0 billion 0.35% notes
periodenddate can fall on the beginning of next month. For example, the periodenddate for Apple's 2019Q2 10Q is 2019-07-01.
Maximum of credit line amount (including undrawn credit) is reported sometimes, which can be detected by filtering for dataitemname containing the word "Maximum".
interestratetype is not very reliable. For example, componentid 923800215 is shown as fixed rate but it is clear that the rate is changing according to annual reports.
Total debt might not agree with Compustat because of write-down / restructuring / reorganization.
Compustat
There are "duplicates", e.g. American Airlines Group Inc (001045) vs American Airlines Inc (001388). Most of the time this can be addressed by filtering for stock prices. However, sometimes both duplicates are traded, e.g. Plains GP Holdings LP (018468) vs Plains All American Pipeline LP (116029) and Western Midstream Partners LP (016225) vs Western Gas Partners LP (179831). I do not have a good solution on how to filter out these duplicates...
Fiscal date vs calendar date. For example, Walmart Inc's fiscal Q4 is November, December and January (according to DATADATE and FYR). We should map its Q4 financials to end-of-January stock/bond prices.
Cash flow variables (e.g. CAPXY) are cumulative over the fiscal year. Therefore, to calculate CAPX in fiscal Q3, we should use fiscal Q3 CAPXY – fiscal Q2 CAPXY.
Refinitiv
Bids and asks (from RRPS) have expected regularities: bid-ask spreads increase from Treasury to agency MBS to corporate bonds to municipal bonds.