Overall Statistics |
Total Trades 318 Average Win 1.60% Average Loss -1.13% Compounding Annual Return 13.803% Drawdown 25.600% Expectancy 0.557 Net Profit 170.670% Sharpe Ratio 0.762 Probabilistic Sharpe Ratio 20.565% Loss Rate 36% Win Rate 64% Profit-Loss Ratio 1.42 Alpha 0.07 Beta 0.346 Annual Standard Deviation 0.136 Annual Variance 0.019 Information Ratio 0.033 Tracking Error 0.161 Treynor Ratio 0.3 Total Fees $3618.57 Estimated Strategy Capacity $1900000.00 Lowest Capacity Asset BIL TT1EBZ21QWKL Portfolio Turnover 3.33% |
from AlgorithmImports import * from datetime import datetime, timedelta class CustomDataWeighAlgorithm(QCAlgorithm): def Initialize(self): self.SetStartDate(2016,1, 1) # self.SetEndDate(2020,5, 1) self.SetCash(100000) self.symbols = "SPY", "SPXL", "UVXY", "SSO","BIL","TQQQ","QLD","USD","SOXL" self.rsi = {} self.bil_holdings = 0 self.uvxy_holdings = 0 self.sso_holdings = 0 self.qld_holdings = 0 self.usd_holdings = 0 for symbol in self.symbols: equity = self.AddEquity(symbol, Resolution.Daily) self.rsi[symbol] = self.RSI(equity.Symbol, 10) def OnData(self, data): if not self.rsi["SPXL"].IsReady: return if self.rsi["SPXL"].Current.Value > 80: if self.uvxy_holdings == 0: self.uvxy_holdings += 0.30 self.SetHoldings("UVXY", self.uvxy_holdings) elif self.rsi["SPXL"].Current.Value < 30: if self.sso_holdings == 0: self.sso_holdings += 0.30 self.SetHoldings("SSO", self.sso_holdings) else: if self.uvxy_holdings > 0: self.Liquidate("UVXY") self.uvxy_holdings = 0 if self.sso_holdings > 0: self.Liquidate("SSO") self.sso_holdings = 0 self.bil_holdings += 0.30 self.SetHoldings("BIL", self.bil_holdings) if not self.rsi["TQQQ"].IsReady: return if self.rsi["TQQQ"].Current.Value > 80: if self.uvxy_holdings == 0: self.uvxy_holdings += 0.30 self.SetHoldings("UVXY", self.uvxy_holdings) elif self.rsi["TQQQ"].Current.Value < 30: if self.qld_holdings == 0: self.qld_holdings += 0.30 self.SetHoldings("QLD", self.qld_holdings ) else: if self.uvxy_holdings > 0: self.Liquidate("UVXY") self.uvxy_holdings = 0 if self.qld_holdings > 0: self.Liquidate("QLD") self.qld_holdings = 0 self.bil_holdings += 0.30 self.SetHoldings("BIL", self.bil_holdings) if not self.rsi["SOXL"].IsReady: return if self.rsi["SOXL"].Current.Value < 30: if self.usd_holdings == 0: self.usd_holdings += 0.30 self.SetHoldings("USD", self.usd_holdings) else: if self.usd_holdings > 0: self.Liquidate("USD") self.usd_holdings = 0 self.bil_holdings += 0.30 self.SetHoldings("BIL", self.bil_holdings)