Overall Statistics |
Total Orders 18 Average Win 2.47% Average Loss -9.71% Compounding Annual Return -3.108% Drawdown 38.000% Expectancy -0.059 Start Equity 100000 End Equity 85376 Net Profit -14.624% Sharpe Ratio -0.176 Sortino Ratio -0.164 Probabilistic Sharpe Ratio 0.129% Loss Rate 25% Win Rate 75% Profit-Loss Ratio 0.25 Alpha -0.026 Beta 0.043 Annual Standard Deviation 0.123 Annual Variance 0.015 Information Ratio -0.722 Tracking Error 0.176 Treynor Ratio -0.5 Total Fees $0.00 Estimated Strategy Capacity $0 Lowest Capacity Asset WGC/GOLD_DAILY_USD.NasdaqDataLink 2S Portfolio Turnover 0.35% |
# region imports from AlgorithmImports import * # endregion class GoldMarketTimingAlgorithm(QCAlgorithm): def initialize(self): self.set_start_date(2010, 1, 1) self.set_end_date(2015, 1, 1) self.set_cash(100000) # United States Government 10-Year Bond Yield self._ten_year_yield = 0 self._bond_yield = self.add_data(USTreasuryYieldCurveRate, "USTYCR").symbol # S&P 500 Earnings Yield. Earnings Yield = trailing 12 month earnings divided by index price self._earnings_yield = self.add_data(NasdaqDataLink, "MULTPL/SP500_EARNINGS_YIELD_MONTH", Resolution.DAILY, TimeZones.UTC, True).symbol # Gold Prices (Daily) - Currency USD (All values are national currency units per troy ounce) self._gold = self.add_data(NasdaqDataLink, "WGC/GOLD_DAILY_USD", Resolution.DAILY, TimeZones.UTC, True).symbol # Monthly rebalance self.add_equity("SPY", Resolution.DAILY) self.schedule.on(self.date_rules.month_start("SPY"), self.time_rules.at(0, 0), self._rebalance) self.set_warm_up(timedelta(30)) def on_data(self, data): if data.contains_key(self._bond_yield) and data[self._bond_yield].ten_year: self._ten_year_yield = data[self._bond_yield].ten_year if data.contains_key(self._earnings_yield): self.plot("Yield Plot", "BondYield", self._ten_year_yield) self.plot("Yield Plot", "EarningsYield", data[self._earnings_yield].price) def _rebalance(self): if self.securities[self._earnings_yield].price == 0 or self._ten_year_yield == 0: return # Buy _gold if E/P is higher than the bond yield and their ratio is at least 2 if self.securities[self._earnings_yield].price > self._ten_year_yield * 2: self.set_holdings(self._gold, 0.9) else: self.liquidate()