Overall Statistics |
Total Trades 99 Average Win 0% Average Loss 0% Compounding Annual Return 465.270% Drawdown 83.500% Expectancy 0 Net Profit 106349.071% Sharpe Ratio 4.113 Probabilistic Sharpe Ratio 98.573% Loss Rate 0% Win Rate 0% Profit-Loss Ratio 0 Alpha 2.114 Beta 1.068 Annual Standard Deviation 0.883 Annual Variance 0.78 Information Ratio 3.243 Tracking Error 0.682 Treynor Ratio 3.401 Total Fees $0.00 |
class ModulatedNadionProcessor(QCAlgorithm): def Initialize(self): self.SetStartDate(2017, 1, 1) # Set Start Date self.SetCash(10) # Set Strategy Cash self.SetWarmup(52*7) self.btc = self.AddCrypto("BTCUSD", Resolution.Daily).Symbol self.high = self.MAX("BTCUSD", 52*7) # 52 week high indicator self.dca_period = 26*7 # DCA for 6 months self.dca_interval = 7 # Invest each week self.countdown = 0 # Countdown to end of DCA period self.investment_amount = 10 # Investment amount self.invested_amount = 0 # Keep track of invested amount self.SetBenchmark(lambda x: self.invested_amount) # Benchmark is invested amount def OnData(self, data): if self.IsWarmingUp: return if self.invested_amount: self.Plot("Active Performance", self.Portfolio.TotalPortfolioValue - self.invested_amount) # Plot active performance if self.countdown: # Check if in DCA period if not self.countdown % self.dca_interval: # Invest each week only self.invest() self.countdown -= 1 return # Ignore 52 week highs during DCA period if data.Bars[self.btc].High == self.high.Current.Value: # Hit 52 week high self.countdown = self.dca_period - 1 # Start DCA self.invest() def invest(self): self.invested_amount += self.investment_amount self.Portfolio.SetCash(self.investment_amount) # Set amount of cash available to be able to buy extra BTC self.SetHoldings(self.btc, 1) # Invest wholly in BTC, will leave no cash left over