Quant BuffetRelax, Not Over Thinking

Scheduled Economic Announcements Effect in Bonds

Log in to collect

Academic paper

Strategy in a nutshell

The strategy trades 30-year Treasury futures around major inflation-related macroeconomic announcements, such as CPI, PPI, Housing Starts, and Personal Income reports. The investor takes long positions on announcement days and remains in cash otherwise.

Economic rationale

Macroeconomic announcements increase uncertainty and non-diversifiable risk. Investors demand higher compensation for holding assets during these periods, generating additional returns as a premium for bearing elevated economic risk.

Backtest performance

Annualised return7.3%
Volatility4.98%
Beta-0.036
Sharpe ratio0.66
Win rate55%

Full Python code

from AlgorithmImports import *
#endregion
class ScheduledEconomicAnnouncementsEffectBonds(QCAlgorithm):
def Initialize(self):
self.SetStartDate(2002, 1, 1)
self.SetCash(100000)

self.symbol = "TLT"
data = self.AddEquity(self.symbol, Resolution.Minute)
csv_string_file = self.Download('data.quantpedia.com/backtesting_data/economic/scheduled_economic_announcements_bonds.csv')
dates = csv_string_file.split('\r\n')
dates = [datetime.strptime(x, "%Y-%m-%d") for x in dates]
self.liquidate_next_day = False
self.Schedule.On(self.DateRules.On(dates), self.TimeRules.BeforeMarketClose(self.symbol, 1), self.DayBeforeAnnouncement)
self.Schedule.On(self.DateRules.EveryDay(self.symbol), self.TimeRules.BeforeMarketClose(self.symbol, 1), self.Rebalance)

def DayBeforeAnnouncement(self):
if not self.Portfolio[self.symbol].IsLong:
    self.SetHoldings(self.symbol, 1)
    self.liquidate_next_day = True
def Rebalance(self):
if self.liquidate_next_day:
    self.liquidate_next_day = False
    return

if self.Portfolio[self.symbol].IsLong:
    self.Liquidate(self.symbol)