Overall Statistics
Total Trades
21
Average Win
6.40%
Average Loss
-0.31%
Compounding Annual Return
10.717%
Drawdown
14.200%
Expectancy
16.441
Net Profit
82.988%
Sharpe Ratio
0.886
Probabilistic Sharpe Ratio
39.193%
Loss Rate
20%
Win Rate
80%
Profit-Loss Ratio
20.80
Alpha
0.006
Beta
0.914
Annual Standard Deviation
0.122
Annual Variance
0.015
Information Ratio
-0.116
Tracking Error
0.03
Treynor Ratio
0.119
Total Fees
$56.61
from QuantConnect.Data.Custom.TradingEconomics import *

class TradingEconomicsInterestRateAlgorithm(QCAlgorithm):
    
    def Initialize(self):
        self.SetStartDate(2013, 11, 1)
        self.SetEndDate(2019, 10, 3);

        self.SetCash(100000)
        
        self.AddEquity("AGG", Resolution.Hour)
        self.AddEquity("SPY", Resolution.Hour)
        self.interestRate = self.AddData(TradingEconomicsCalendar, TradingEconomics.Calendar.UnitedStates.InterestRate).Symbol
        
        # Request 365 days of interest rate history with the TradingEconomicsCalendar custom data Symbol.
        history = self.History(TradingEconomicsCalendar, self.interestRate, 365, Resolution.Daily)
        
        # Count the number of items we get from our history request (should be five)
        self.Debug(f"We got {len(history)} items from our history request")
 
    def OnData(self, data): 
        
        # Make sure we have an interest rate calendar event
        if not data.ContainsKey(self.interestRate):
            return
        
        announcement = data[self.interestRate] 
        
        # Confirm its a FED Rate Decision
        if announcement.Event != TradingEconomics.Event.UnitedStates.FedInterestRateDecision:
            return
        
        # In the event of a rate increase, rebalance 50% to Bonds.
        interestRateDecreased = announcement.Actual <= announcement.Previous

        if interestRateDecreased:
            self.SetHoldings("SPY", 1)
            self.SetHoldings("AGG", 0)
        else:
            self.SetHoldings("SPY", 0.5)
            self.SetHoldings("AGG", 0.5)