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
from System import *
from QuantConnect import *
from QuantConnect.Data import *
from QuantConnect.Algorithm import *
from QuantConnect.Indicators import *
from QuantConnect.Data.Consolidators import *
from datetime import datetime, timedelta
import decimal as d
import numpy as np

class ema_cross(QCAlgorithm):

    def Initialize(self):
        self.SetStartDate(2019, 6, 1)  # Set Start Date
        self.SetEndDate(datetime.now())
        
        # Set up cash and BTC
        self.SetCash("USD", 10000)
        self.SetCash("BTC", 0)
        self.crypto_pair = "BTCUSD"
        
        # Set up basic symbol and fee structure
        self.SetBrokerageModel(BrokerageName.GDAX, AccountType.Cash)
        self.AddCrypto(self.crypto_pair, Resolution.Minute)
        
        # warmup indicator
        #self.SetWarmUp(timedelta(minutes=6000))

        
        # Define our EMA resolution, lookback and 
        self.short_tf_resolution = 30
        self.quick_lookback = 50
        self.long_lookback = 200
        
        
        # define ema_quick
        self.ema_quick = ExponentialMovingAverage(self.crypto_pair, self.quick_lookback)
        self.ema_quick.Updated += self.ema_quick_update
        self.ema_quick_win = RollingWindow[IndicatorDataPoint](5)
        
        
        # define ema_long
        self.ema_long = ExponentialMovingAverage(self.crypto_pair, self.long_lookback)
        self.ema_long.Updated += self.ema_long_update
        self.ema_long_win = RollingWindow[IndicatorDataPoint](5)
        
        ## Consolidator
        shortTimeFrameConsolidator = TradeBarConsolidator(timedelta(minutes=30))
        shortTimeFrameConsolidator.DataConsolidated += self.shortTimeFrameHandler
        self.RegisterIndicator(self.crypto_pair, self.ema_quick, shortTimeFrameConsolidator)
        self.RegisterIndicator(self.crypto_pair, self.ema_long, shortTimeFrameConsolidator)
        self.SubscriptionManager.AddConsolidator(self.crypto_pair, shortTimeFrameConsolidator)    

    def ema_quick_update(self, sender, updated):
        self.ema_quick_win.Add(updated)
    
    def ema_long_update(self, sender, updated):
        self.ema_long_win.Add(updated)
        
    def shortTimeFrameHandler(self, sender, bar):
        if not (self.ema_quick_win.IsReady): 
            return
        self.ema_quick.Update(bar.EndTime, bar.Close)
        self.ema_long.Update(bar.EndTime, bar.Close)
        self.Plot("Short EMA", self.ema_quick)
        self.Plot("Long EMA", self.ema_long)
        
    def OnData(self, data):
        pass