Overall Statistics |
Total Trades 1610 Average Win 0.15% Average Loss -0.25% Compounding Annual Return -19.712% Drawdown 31.800% Expectancy 0.048 Net Profit -6.630% Sharpe Ratio -0.039 Probabilistic Sharpe Ratio 24.409% Loss Rate 35% Win Rate 65% Profit-Loss Ratio 0.60 Alpha 0.016 Beta 1.006 Annual Standard Deviation 0.509 Annual Variance 0.259 Information Ratio 0.033 Tracking Error 0.462 Treynor Ratio -0.02 Total Fees $0.00 Estimated Strategy Capacity $240000.00 Lowest Capacity Asset BTCUSD XJ |
from QuantConnect.Indicators import * from AlgorithmImports import * class BollingerMomentum(QCAlgorithm): def Initialize(self): self.SetStartDate(2022, 9, 1) self.SetCash("BTC",100) self.ticker="BTCUSD" self.symbol=self.AddCrypto(self.ticker, Resolution.Minute).Symbol self.per_order_proportion=0.5 period_BB = 50 std=2 n_MinuteConsolidator = TradeBarConsolidator(timedelta(minutes=5)) n_MinuteConsolidator.DataConsolidated += self.N_MinuteBarHandler self.SubscriptionManager.AddConsolidator(self.ticker, n_MinuteConsolidator) self.Bolband = self.BB(self.ticker, period_BB, std, MovingAverageType.Simple) self.RegisterIndicator(self.ticker, self.Bolband, timedelta(minutes=5)) self.SetRiskManagement(MaximumDrawdownPercentPerSecurity(0.1)) self.SetWarmUp(period_BB) def N_MinuteBarHandler(self, sender, bar): self.Debug(str(self.Time) + " " + str(bar)) if self.IsWarmingUp != False: return holdings = self.Portfolio[self.ticker].Quantity price = self.Securities[self.ticker].Close quantity = self.CalculateOrderQuantity(self.ticker,self.per_order_proportion) if holdings <= 0: if price <= self.Bolband.LowerBand.Current.Value: self.MarketOrder(self.ticker, quantity*1) if holdings > 0: if price >= self.Bolband.UpperBand.Current.Value: self.LiquidateAll() def OnData(self, data): pass def LiquidateAll(self): self.Liquidate() self.Transactions.CancelOpenOrders(self.ticker)