Overall Statistics |
Total Trades 9 Average Win 0% Average Loss -0.09% Compounding Annual Return -21.792% Drawdown 8.300% Expectancy -1 Net Profit -4.003% Sharpe Ratio -1.228 Probabilistic Sharpe Ratio 12.657% Loss Rate 100% Win Rate 0% Profit-Loss Ratio 0 Alpha -0.189 Beta -0.536 Annual Standard Deviation 0.123 Annual Variance 0.015 Information Ratio -0.446 Tracking Error 0.181 Treynor Ratio 0.282 Total Fees $9.00 Estimated Strategy Capacity $1000.00 Lowest Capacity Asset BTC TLQHZ0DZBGPX |
from System import * from QuantConnect import * from QuantConnect.Algorithm import * from QuantConnect.Indicators import * from QuantConnect.Data.Market import TradeBar import numpy BO = 20 SO = 10 take_profit = 5 stop_loss = 0 budget = 6000 class RollingWindowAlgorithm(QCAlgorithm): def Initialize(self): self.SetStartDate(2021, 8, 1) #Set Start Date self.SetEndDate(2021, 9, 30) #Set End Date self.SetCash(budget) #Set Strategy Cash self.eurusd = self.AddEquity("BTC", Resolution.Minute) #self.SetTimeZone("Europe/Rome") self.rsi = self.RSI("BTC", 7) # set warmup period self.SetWarmUp(7) def OnData(self, data): if not (self.rsi.IsReady): return # Current price price = self.Securities["BTC"].Price # Calculate lower = self.Securities["BTC"].Price * 1 #take_profit at 5% higher = self.Securities["BTC"].Price * (1 + (take_profit/100)) # Calculate quantity holdings = self.Portfolio["BTC"].Quantity if not self.Portfolio.Invested: if self.rsi.Current.Value < 30: self.SetHoldings("BTC", (BO/100)) holdings = self.Portfolio["BTC"].Quantity self.LimitOrder("BTC", -holdings, lower) self.Debug("BO order was placed") self.StopMarketOrder("BTC", -holdings, higher) self.Debug("Take Profit") if self.rsi.Current.Value < 20: self.SetHoldings("BTC", (SO/100)) holdings = self.Portfolio["BTC"].Quantity self.LimitOrder("BTC", -holdings, lower) self.Debug("SO order was placed") self.StopMarketOrder("BTC", -holdings, higher) self.Debug("Take Profit") ### Cancel remaining order if limit order or stop loss order is executed def OnOrderEvent(self, orderEvent): order = self.Transactions.GetOrderById(orderEvent.OrderId) if order.Status == OrderStatus.Filled: if order.Type == OrderType.Limit or order.Type == OrderType.Limit: self.Transactions.CancelOpenOrders(order.Symbol) if order.Status == OrderStatus.Canceled: self.Log(str(orderEvent))