
The strategy trades the high-yield CDS index CDX.NA.HY, rebalancing weekly based on FOMC schedules, opening short positions on odd weeks and long positions on even weeks.
ASSET CLASS: CDS | REGION: United States | FREQUENCY:
Weekly | MARKET: bonds | KEYWORD: Idiosyncratic, FOMC, Credit Risk
I. STRATEGY IN A NUTSHELL
Trades the high-yield CDS index CDX.NA.HY around FOMC announcements. Positions open the day before each FOMC meeting (or second day for two-day meetings). Weekly rebalancing: short in odd weeks, long in even weeks.
II. ECONOMIC RATIONALE
CDS returns follow a biweekly FOMC cycle. FOMC and Board meetings reduce macro uncertainty, lowering equity risk premiums and boosting CDS returns. Even-week returns are stronger after accommodative surprises or poor prior stock performance.
III. SOURCE PAPER
Does the FOMC Cycle Affect Credit Risk? [Click to Open PDF]
Difang Huang, Monash University; Yubin Li, Harbin Institute of Technology, Shenzhen; Xinjie Wang, Southern University of Science and Technology; Zhaodong Zhong, Rutgers University
<Abstract>
This paper studies the returns of CDS indices over the Federal Open Market Committee (FOMC) cycle. We document that the CDS return is significantly higher in even weeks than in odd weeks of the FOMC cycle. The biweekly pattern in the CDS market is not a mere reflection of that in the stock market. A simple trading strategy based on the biweekly pattern yields an annual excess return of 8.8%. This pattern is linked to the resolution of macroeconomic uncertainty by the biweekly schedules of the Fed Reserve internal Board of Governors meetings. We provide further evidence that the Fed affects the CDS market via unexpected information signals and monetary policies that lead to reductions in the risk premium.


IV. BACKTEST PERFORMANCE
| Annualised Return | 8.89% |
| Volatility | 14.87% |
| Beta | 0.039 |
| Sharpe Ratio | 0.6 |
| Sortino Ratio | -0.364 |
| Maximum Drawdown | N/A |
| Win Rate | 43% |
V. FULL PYTHON CODE
from AlgorithmImports import *
class FOMCCycleAndCreditRisk(QCAlgorithm):
def Initialize(self):
self.SetStartDate(2012, 1, 1) # HYG price is causing margin call in 2011.
self.SetCash(100000)
self.weights = { "HYG" : 1, 'IEI' : -0.5, 'SHY': -0.5 }
for symbol in self.weights:
data = self.AddEquity(symbol, Resolution.Minute)
data.SetLeverage(5) # leverage can be set according to the strategy
csv_string_file = self.Download('data.quantpedia.com/backtesting_data/economic/fed_days.csv')
dates = csv_string_file.split('\r\n')
dates_before_fed = [datetime.strptime(x, "%Y-%m-%d") for x in dates]
self.trade_flag = False
self.days_to_switch_positions = 5
symbol = [x for x in self.weights.keys()][0]
self.Schedule.On(self.DateRules.On(dates_before_fed), self.TimeRules.AfterMarketOpen(symbol, 1), self.FEDDays)
self.Schedule.On(self.DateRules.EveryDay(symbol), self.TimeRules.AfterMarketOpen(symbol, 1), self.Rebalance)
# At FED day go +1.0HYG - 0.5xIEI - 0.5xSHY
def FEDDays(self):
# At first liquidate portfolio on FED days
self.Liquidate()
self.FedDaysAndOddWeeksInvestment()
self.days_to_switch_positions = 5
self.trade_flag = True
# every odd week go +1.0xHYG - 0.5xIEI - 0.5xSHY
# every even week go -1.0xHYG + 0.5xIEI + 0.5xSHY
def Rebalance(self):
if self.trade_flag:
if self.days_to_switch_positions == 0:
if self.Portfolio["HYG"].IsLong:
self.FedDaysAndEvenWeeksInvestment()
else:
self.FedDaysAndOddWeeksInvestment()
self.days_to_switch_positions = 5
self.days_to_switch_positions -= 1
def FedDaysAndOddWeeksInvestment(self):
for symbol, weight in self.weights.items():
if self.Securities[symbol].Price != 0:
self.SetHoldings(symbol, weight)
def FedDaysAndEvenWeeksInvestment(self):
for symbol, weight in self.weights.items():
if self.Securities[symbol].Price != 0:
self.SetHoldings(symbol, -weight)
VI. Backtest Performance