Scheduled Economic Announcements Effect in Bonds
Log in to collectAcademic 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)