| Overall Statistics |
|
Total Trades 0 Average Win 0% Average Loss 0% Compounding Annual Return 0% Drawdown 0% Expectancy 0 Net Profit 0% Sharpe Ratio 0 Probabilistic Sharpe Ratio 0% Loss Rate 0% Win Rate 0% Profit-Loss Ratio 0 Alpha 0 Beta 0 Annual Standard Deviation 0 Annual Variance 0 Information Ratio 0 Tracking Error 0 Treynor Ratio 0 Total Fees $0.00 |
'''
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(2020, 8, 17) # Set Start Date
self.SetEndDate(2020, 8, 17) # Set End Date
self.SetCash(10000) # Set Strategy Cash
# SET THE INSTRUMENTS WE ARE GOING TO USE IN OUR UNIVERSE
self.long_symbol = self.AddEquity("SPXL", Resolution.Minute).Symbol
# Ichimoku Cloud
TenkanPeriod = 9
KijunPeriod = 26
SenkouAPeriod = 26
SenkouBPeriod = 52
SenkouADelay = 26
SenkouBDelay = 26
self.Ichi = self.ICHIMOKU(self.long_symbol, TenkanPeriod, KijunPeriod, SenkouAPeriod, SenkouBPeriod, SenkouADelay, SenkouBDelay, Resolution.Minute)
self.RegisterIndicator(self.long_symbol, self.Ichi, timedelta(minutes=5))
# 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 * 5)
# Consolidate time into 5 min bars and call the handler
Consolidator = TradeBarConsolidator(timedelta(minutes=5))
Consolidator.DataConsolidated += self.OnBarHandler
self.SubscriptionManager.AddConsolidator(self.long_symbol, Consolidator)
# Add a custom chart
self.chart = Chart('Trade Chart')
self.chart.AddSeries(Series('Price', SeriesType.Line, 0))
self.chart.AddSeries(Series('Sentiment', SeriesType.Line, 1))
self.AddChart(self.chart)
def OnData(self, data):
if self.IsWarmingUp:
return
def OnBarHandler(self, sender, bar):
if self.IsWarmingUp:
return
self.IchiHandler()
if self.Sentiment == "Neutral":
SentimentNumber = 1
if self.Sentiment == "Bullish":
SentimentNumber = 2
if self.Sentiment == "Bearish":
SentimentNumber = 0
self.Plot('Trade Chart', 'Price', self.Securities[self.long_symbol].Price)
self.Plot('Trade Chart', 'Sentiment', SentimentNumber)
def IchiHandler(self):
if self.IsWarmingUp:
return
'''
This is the IICHIMOKU CLOUD evaluator.
This block decides whether self.Sentiment gets set to Bullish, Bearish or Neutral.
'''
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):
if self.BelowCloud:
self.Debug("Price moving Above Cloud")
self.AboveCloud = True
else:
self.AboveCloud = False
if (self.Securities[self.long_symbol].Price < self.CloudBottom):
if self.AboveCloud:
self.Debug("Price moving Below Cloud")
self.BelowCloud = True
else:
self.BelowCloud = False
if (self.Ichi.Tenkan.Current.Value > self.Ichi.Kijun.Current.Value):
if self.TunderK:
self.Debug("Tenkan moving over Kijun")
self.ToverK = True
else:
self.ToverK = False
if (self.Ichi.Tenkan.Current.Value < self.Ichi.Kijun.Current.Value):
if self.ToverK:
self.Debug("Kijun moving over Tenkan")
self.TunderK = True
else:
self.TunderK = False
if (self.Sentiment == "Bearish" or self.Sentiment == "Neutral") and self.AboveCloud and self.ToverK:
self.Sentiment = "Bullish"
self.Debug("Sentiment turning Bullish")
self.Debug("Price " + str(self.Securities[self.long_symbol].Price))
self.Debug("Cloud Top " + str(self.CloudTop))
self.Debug("Cloud Bottom " + str(self.CloudBottom))
self.Debug("Tenkan " + str(self.Ichi.Tenkan.Current.Value))
self.Debug("Kijun " + str(self.Ichi.Kijun.Current.Value))
elif (self.Sentiment== "Bullish" or self.Sentiment == "Neutral") and self.BelowCloud and self.TunderK:
self.Sentiment = "Bearish"
self.Debug("Sentiment turning Bearish")
self.Debug("Price " + str(self.Securities[self.long_symbol].Price))
self.Debug("Cloud Top " + str(self.CloudTop))
self.Debug("Cloud Bottom " + str(self.CloudBottom))
self.Debug("Tenkan " + str(self.Ichi.Tenkan.Current.Value))
self.Debug("Kijun " + str(self.Ichi.Kijun.Current.Value))
elif (not self.AboveCloud and not self.BelowCloud):
self.Sentiment = "Neutral"
self.Debug("Sentiment turning Neutral")
self.Debug("Price " + str(self.Securities[self.long_symbol].Price))
self.Debug("Cloud Top " + str(self.CloudTop))
self.Debug("Cloud Bottom " + str(self.CloudBottom))
self.Debug("Tenkan " + str(self.Ichi.Tenkan.Current.Value))
self.Debug("Kijun " + str(self.Ichi.Kijun.Current.Value))
else:
pass
'''
end of the ICHIMOKU CLOUD logic
'''