Overall Statistics |
Total Trades 396 Average Win 1.01% Average Loss -1.19% Compounding Annual Return -27.590% Drawdown 53.000% Expectancy -0.260 Net Profit -48.120% Sharpe Ratio -1.011 Probabilistic Sharpe Ratio 0.005% Loss Rate 60% Win Rate 40% Profit-Loss Ratio 0.85 Alpha -0.185 Beta -0.004 Annual Standard Deviation 0.184 Annual Variance 0.034 Information Ratio -1.35 Tracking Error 0.279 Treynor Ratio 42.509 Total Fees $528.21 |
''' ICHIMOKU Cloud for 5 minute time buckets ''' #import a bunch of stuff from clr import AddReference AddReference("QuantConnect.Common") AddReference("QuantConnect.Algorithm") AddReference("QuantConnect.Algorithm.Framework") AddReference("QuantConnect.Indicators") from QuantConnect import * from QuantConnect.Indicators import * from QuantConnect.Algorithm import * from QuantConnect.Algorithm.Framework import * from QuantConnect.Algorithm.Framework.Alphas import * from QuantConnect.Algorithm.Framework.Portfolio import * from QuantConnect.Algorithm.Framework.Risk import * from QuantConnect.Algorithm.Framework.Selection import * from QuantConnect.Data.Consolidators import * from datetime import timedelta import numpy as np from System.Drawing import Color class IchimokuAlgorithm(QCAlgorithm): def Initialize(self): self.SetStartDate(2019,1, 1) # Set Start Date #self.SetEndDate(2020, 12, 17) # Set End Date self.SetCash(1000) # Set Strategy Cash self.SetBrokerageModel(BrokerageName.Bitfinex,AccountType.Cash) #self.UniverseSettings.Resolution = Resolution.Hours #self.UniverseSettings.Leverage = 5; # SET THE INSTRUMENTS WE ARE GOING TO USE IN OUR UNIVERSE self.AddCrypto("BTCUSD", Resolution.Minute) self.long_symbol ="BTCUSD" #self.long_symbol = self.AddForex("BTCUSD", Resolution.Minute, Market.Oanda).Symbol # Ichimoku Cloud TenkanPeriod = 9 KijunPeriod = 29 SenkouAPeriod =30 SenkouBPeriod =60 SenkouADelay = 30 SenkouBDelay = 30 self.Ichi = self.ICHIMOKU(self.long_symbol, TenkanPeriod, KijunPeriod, SenkouAPeriod, SenkouBPeriod, SenkouADelay, SenkouBDelay, Resolution.Hour) self.EMA200 = self.EMA(self.long_symbol, 55, Resolution.Hour) self.RegisterIndicator(self.long_symbol, self.EMA200, timedelta(hours=2)) self.RegisterIndicator(self.long_symbol, self.Ichi, timedelta(hours=2)) # going to use three values for Sentiment: Bullish, Bearish and Neutral # setting default values but these will get re-set during pre-market so not a big deal self.Sentiment = "Neutral" self.CloudTop = 0 self.CloudBottom = 0 self.AboveCloud = False self.BelowCloud = False self.ToverK = False self.TunderK = False # Warmup those indicators self.SetWarmup(SenkouBPeriod * 120) # Consolidate time into 5 min bars and call the handler Consolidator = QuoteBarConsolidator(timedelta(hours=2)) Consolidator.DataConsolidated += self.OnBarHandler self.SubscriptionManager.AddConsolidator(self.long_symbol, Consolidator) def OnData(self, data): if self.IsWarmingUp: return def OnBarHandler(self, sender, bar): if self.IsWarmingUp: return self.IchiHandler() holdings = self.Portfolio["BTCUSD"].Quantity self.CloudTop = max(self.Ichi.SenkouA.Current.Value, self.Ichi.SenkouB.Current.Value) self.CloudBottom = min(self.Ichi.SenkouA.Current.Value, self.Ichi.SenkouB.Current.Value) if (self.Securities[self.long_symbol].Price > self.CloudTop): self.AboveCloud = True else: self.AboveCloud = False if (self.Securities[self.long_symbol].Price < self.CloudBottom): self.BelowCloud = True else: self.BelowCloud = False if (self.Ichi.Tenkan.Current.Value > self.Ichi.Kijun.Current.Value): self.ToverK = True else: self.ToverK = False if (self.Ichi.Tenkan.Current.Value < self.Ichi.Kijun.Current.Value): self.TunderK = True else: self.TunderK = False if (self.AboveCloud and self.Ichi.Kijun.Current.Value > self.Ichi.Tenkan.Current.Value and bar.Close > self.EMA200.Current.Value ): if holdings <= 0: self.SetHoldings("BTCUSD", 1.0) if ( self.Ichi.Kijun.Current.Value <self.Ichi.Tenkan.Current.Value ): if holdings > 0: self.Liquidate("BTCUSD") #self.SetHoldings("BTCUSD", -0.5) def IchiHandler(self): if self.IsWarmingUp: return ''' end of the ICHIMOKU CLOUD logic '''