| Overall Statistics |
|
Total Orders 5 Average Win 7.96% Average Loss -11.26% Compounding Annual Return -1.570% Drawdown 38.300% Expectancy -0.146 Start Equity 100000 End Equity 71425.38 Net Profit -28.575% Sharpe Ratio -0.631 Sortino Ratio -0.42 Probabilistic Sharpe Ratio 0.000% Loss Rate 50% Win Rate 50% Profit-Loss Ratio 0.71 Alpha -0.023 Beta -0.159 Annual Standard Deviation 0.047 Annual Variance 0.002 Information Ratio -0.385 Tracking Error 0.191 Treynor Ratio 0.188 Total Fees $12.68 Estimated Strategy Capacity $130000000.00 Lowest Capacity Asset SPY R735QTJ8XC9X Portfolio Turnover 0.03% |
from AlgorithmImports import *
from QuantConnect.DataSource import *
class USTreasuryDataAlgorithm(QCAlgorithm):
def initialize(self) -> None:
self.set_start_date(2000, 3, 1)
self.set_end_date(2021, 6, 1)
self.set_cash(100000)
self.spy_symbol = self.add_equity("SPY", Resolution.HOUR).symbol
# Requesting data
self.yield_curve_symbol = self.add_data(USTreasuryYieldCurveRate, "USTYCR").symbol
# Historical data
history = self.history(USTreasuryYieldCurveRate, self.yield_curve_symbol, 60, Resolution.DAILY)
self.debug(f"We got {len(history)} items from our history request")
self.last_inversion = datetime.min
def on_data(self, slice: Slice) -> None:
if not slice.contains_key(self.yield_curve_symbol):
return
rates = slice[self.yield_curve_symbol]
# Check for null before using the values
if not (rates.ten_year is not None and rates.two_year is not None):
return
# Only advance if a year has gone by
if (self.time - self.last_inversion < timedelta(days=365)):
return
# if there is a yield curve inversion after not having one for a year, short sell SPY for two years
if (not self.portfolio.invested and rates.two_year > rates.ten_year):
self.debug(f"{self.time} - Yield curve inversion! Shorting the market for two years")
self.set_holdings(self.spy_symbol, -0.5)
self.last_inversion = self.time
return
# If two years have passed, liquidate our position in SPY
if (self.time - self.last_inversion >= timedelta(days=365 * 2)):
self.liquidate(self.spy_symbol)