| Overall Statistics |
|
Total Trades 5 Average Win 7.97% Average Loss -11.27% Compounding Annual Return -0.353% Drawdown 19.500% Expectancy -0.146 Net Profit -6.677% Sharpe Ratio -0.059 Probabilistic Sharpe Ratio 0.000% Loss Rate 50% Win Rate 50% Profit-Loss Ratio 0.71 Alpha -0.002 Beta 0.001 Annual Standard Deviation 0.037 Annual Variance 0.001 Information Ratio -0.375 Tracking Error 0.174 Treynor Ratio -1.883 Total Fees $11.89 |
from QuantConnect.Data.Custom.USTreasury import *
from datetime import datetime, timedelta
class USTreasuryYieldCurveAlgorithm(QCAlgorithm):
def Initialize(self):
self.SetStartDate(2000, 3, 1)
self.SetEndDate(2019, 9, 15)
self.SetCash(100000)
self.spy = self.AddEquity("SPY", Resolution.Hour).Symbol
self.yieldCurve = self.AddData(USTreasuryYieldCurveRate, "USTYCR").Symbol
self.lastInversion = datetime(1, 1, 1)
# Request 60 days of history with the USTreasuryYieldCurveRate custom data Symbol.
history = self.History(USTreasuryYieldCurveRate, self.yieldCurve, 60, Resolution.Daily)
# Count the number of items we get from our history request
self.Debug(f"We got {len(history)} items from our history request")
def OnData(self, data):
if not data.ContainsKey(self.yieldCurve):
return
rates = data[self.yieldCurve]
# Check for None before using the values
if rates.TenYear is None or rates.TwoYear is None:
return
# Only advance if a year has gone by
if (self.Time - self.lastInversion) < timedelta(days=365):
return
# if there is a yield curve inversion after not having one for a year, short SPY for two years
if not self.Portfolio.Invested and rates.TwoYear > rates.TenYear:
self.Debug(f"{self.Time} - Yield curve inversion! Shorting the market for two years")
self.SetHoldings(self.spy, -0.5)
self.lastInversion = self.Time
return
# If two years have passed, liquidate our position in SPY
if self.Time - self.lastInversion >= timedelta(days=365 * 2):
self.Liquidate(self.spy)