
The strategy takes long equity positions via CFDs, ETFs, or futures on economic announcement days (CPI, PPI, employment, FOMC) and holds cash on non-announcement days, targeting event-driven opportunities.
ASSET CLASS: CFDs, ETFs, futures | REGION: Global | FREQUENCY:
Daily | MARKET: equities | KEYWORD: Scheduled, Economic, Announcements, Effect, Stocks
I. STRATEGY IN A NUTSHELL
The strategy invests in equities via CFDs, ETFs, or futures only on major economic announcement days (CPI, PPI, jobs data, FOMC decisions). On other days, positions are closed and capital stays in cash, targeting gains from heightened market activity while minimizing exposure to low-information periods.
II. ECONOMIC RATIONALE
Research shows markets demand a risk premium on announcement days due to heightened uncertainty. As risk-averse investors require higher compensation, stock returns rise predictably around these events, making such days attractive for targeted equity exposure.
III. SOURCE PAPER
How Much Do Investors Care About Macroeconomic Risk? Evidence from Scheduled Economic Announcements [Click to Open PDF]
Savor, Wison, DePaul University – Kellstadt Graduate School of Business, University of Oxford – Said Business School
<Abstract>
Stock market average returns and Sharpe ratios are significantly higher on days when important macroeconomic news about inflation, unemployment, or interest rates is scheduled for announcement. The average announcement day excess return from 1958 to 2009 is 11.4 basis points versus 1.1 basis points for all the other days, suggesting that over 60% of the cumulative annual equity risk premium is earned on announcement days. The Sharpe ratio is ten times higher. In contrast, the risk-free rate is detectably lower on announcement days, consistent with a precautionary saving motive. Our results demonstrate a trade-off between macroeconomic risk and asset returns, and provide an estimate of the premium investors demand to bear this risk.

IV. BACKTEST PERFORMANCE
| Annualised Return | 7.2% |
| Volatility | N/A |
| Beta | 0.093 |
| Sharpe Ratio | N/A |
| Sortino Ratio | -0.104 |
| Maximum Drawdown | N/A |
| Win Rate | 54% |
V. FULL PYTHON CODE
from AlgorithmImports import *
from pandas.tseries.offsets import BDay
#endregion
class ScheduledAnnouncementsAnomaly(QCAlgorithm):
def initialize(self):
self.set_start_date(2000, 1, 1)
self.set_cash(100_000)
self.symbol: Symbol = self.add_equity("SPY", Resolution.MINUTE).symbol
csv_string_file: str = self.download('data.quantpedia.com/backtesting_data/economic/economic_announcements.csv')
dates: List[str] = csv_string_file.split('\r\n')
self.announcement_dates_t_minus_one: List[datetime.date] = [(datetime.strptime(x, "%Y-%m-%d") - BDay(1)).date() for x in dates]
def on_data(self, data: Slice) -> None:
if self.time.hour == 15 and self.time.minute == 44:
if self.time.date() in self.announcement_dates_t_minus_one:
if not self.portfolio[self.symbol].is_long:
self.market_on_close_order(self.symbol, self.calculate_order_quantity(self.symbol, 1.))
else:
if self.portfolio[self.symbol].is_long:
self.market_on_close_order(self.symbol, -self.portfolio[self.symbol].quantity)
VI. Backtest Performance