| 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 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 |
# MultiIndicator v2 (Py)
from clr import AddReference
AddReference("System")
AddReference("QuantConnect.Algorithm")
AddReference("QuantConnect.Indicators")
AddReference("QuantConnect.Common")
from System import *
from QuantConnect import *
from QuantConnect.Data import *
from QuantConnect.Algorithm import *
from QuantConnect.Indicators import *
from datetime import datetime
import decimal as d
import numpy as np
class MultiIndicator(QCAlgorithm):
def Initialize(self):
# define email address for buy/sell notifications
# please change prior to Live deploy
self.email_address = 'test@test.com'
self.SetStartDate(2017,11,1) #Set Start Date
self.SetEndDate(2017,11,2) #Set End Date
self.SetCash(3000) #Set Strategy Cash
# define crypto we want to trade on
# ETHUSD or LTCUSD or BTCUSD
self.target_crypto = "ETHUSD"
# Set brokerage to GDAX for cryptos
self.SetBrokerageModel(BrokerageName.GDAX, AccountType.Cash)
# Set crypto and time resolution
self.AddCrypto(self.target_crypto, Resolution.Minute)
self.SetBenchmark(self.target_crypto)
# Request warmup data
self.SetWarmup(120)
# create consolidator for 1 minute
# even though base resolution is already Minute,
# manually consolidating at the same resolution
# ensures pattern can be the same for larger resolution bars.
consMinute = TradeBarConsolidator(1)
consMinute.DataConsolidated += self.OnMinuteData
self.SubscriptionManager.AddConsolidator(self.target_crypto, consMinute)
# create consolidator for 5 minute
cons15Minute = TradeBarConsolidator(5)
cons15Minute.DataConsolidated += self.On15MinuteData
self.SubscriptionManager.AddConsolidator(self.target_crypto, cons15Minute)
# Define EMAs at minute consolidated resolution
# Note we are at minute resolution
self.ema_minute_f = ExponentialMovingAverage("EMA_Min_f", 2)
self.ema_minute_m = ExponentialMovingAverage("EMA_Min_m", 15)
self.ema_minute_s = ExponentialMovingAverage("EMA_Min_s", 120)
# Define MOMs at 15 minute consolidated resolution
# Note we are at 15 minute resoltuion
self.mom_15minute_f = self.MOM(self.target_crypto, 3)
sPlot = Chart('Strategy Equity')
sPlot.AddSeries(Series('EMA Crossover', SeriesType.Line, 2)) #Only for axis title override
sPlot.AddSeries(Series('EMA 2min', SeriesType.Line, 2))
sPlot.AddSeries(Series('EMA 15min', SeriesType.Line, 2))
sPlot.AddSeries(Series('EMA 120min', SeriesType.Line, 2))
sPlot.AddSeries(Series('Momentum', SeriesType.Line, 3))
self.AddChart(sPlot)
# Initialize variables
self.holdings = 0
self.tolerance = .001
self.price = self.Securities[self.target_crypto].Price
self.price_last_buy = None
self.price_max = None
self.price_delta_buy = None
self.price_delta_max = None
self.first = True
def OnMinuteData(self, sender, bar):
self.ema_minute_f.Update(bar.EndTime, bar.Close)
self.ema_minute_m.Update(bar.EndTime, bar.Close)
self.ema_minute_s.Update(bar.EndTime, bar.Close)
#self.Debug(str(self.Time) + " > New Minute Bar!")
self.Plot('Strategy Equity', 'EMA 2min', float(str(self.ema_minute_f)))
self.Plot('Strategy Equity', 'EMA 15min', float(str(self.ema_minute_m)))
self.Plot('Strategy Equity', 'EMA 120min', float(str(self.ema_minute_s)))
def On15MinuteData(self, sender, bar):
self.mom_15minute_f.Update(bar.EndTime, bar.Close)
#self.Debug(str(self.Time) + " > New Minute Bar!")
self.Plot('Strategy Equity', 'Momentum', float(str(self.mom_15minute_f)))
def OnData(self, data):
if self.first and not self.IsWarmingUp:
self.first = False
pass