Overall Statistics
Total Trades
383
Average Win
0.37%
Average Loss
-0.16%
Compounding Annual Return
281.134%
Drawdown
6.800%
Expectancy
1.960
Net Profit
94.720%
Sharpe Ratio
7.14
Probabilistic Sharpe Ratio
99.943%
Loss Rate
11%
Win Rate
89%
Profit-Loss Ratio
2.32
Alpha
1.58
Beta
-0.026
Annual Standard Deviation
0.221
Annual Variance
0.049
Information Ratio
6.323
Tracking Error
0.229
Treynor Ratio
-60.962
Total Fees
$67.09
class EMACrossoverCrypto(QCAlgorithm):

    def Initialize(self):
        #Set our main strategy parameters
        self.SetStartDate(2017,1, 1)
        self.SetEndDate(2017,6,30)
        self.SetCash(5000)
        
        self.SetBrokerageModel(BrokerageName.GDAX, AccountType.Cash)
        
        self.crypto = [
            self.AddCrypto("BTCUSD", Resolution.Daily, Market.GDAX).Symbol,
            self.AddCrypto("ETHUSD", Resolution.Daily, Market.GDAX).Symbol,
            self.AddCrypto("LTCUSD", Resolution.Daily, Market.GDAX).Symbol,
            self.AddCrypto("EOSUSD", Resolution.Daily, Market.GDAX).Symbol,
            self.AddCrypto("ETCUSD", Resolution.Daily, Market.GDAX).Symbol,
            self.AddCrypto("XLMUSD", Resolution.Daily, Market.GDAX).Symbol,
            self.AddCrypto("XRPUSD", Resolution.Daily, Market.GDAX).Symbol,
            self.AddCrypto("XTZUSD", Resolution.Daily, Market.GDAX).Symbol,
            self.AddCrypto("ZRXUSD", Resolution.Daily, Market.GDAX).Symbol,
            ]
        
      
        ema_fast_period = 8
        ema_medium_period = 21
        ema_slow_period = 200
        
        self.allocate = 0.1

        self.emafast = {}
        self.emamedium = {}
        self.emaslow = {}
        
        for symbol in self.crypto:
            self.emafast[symbol] = self.EMA(symbol, ema_fast_period)
            self.emamedium[symbol] = self.EMA(symbol,ema_medium_period)
            self.emaslow[symbol] = self.EMA(symbol, ema_slow_period)
       
        #Ensure that the indicator has enough data before trading 
        self.SetWarmUp(ema_slow_period)
        
    def OnData(self, data):
        '''OnData event is the primary entry point for your algorithm. Each new data point will be pumped in here.

        Arguments:
            data: Slice object keyed by symbol containing the asset data
        '''
        
        #Ensure indicators are warmed up
        if self.IsWarmingUp: 
            return
    
        pass
    
        for symbol in self.crypto:
            if self.emafast[symbol].IsReady and self.emamedium[symbol].IsReady and self.emaslow[symbol].IsReady:
                if self.emamedium [symbol] > self.emaslow[symbol]:
                    if self.emafast[symbol] > self.emamedium[symbol]:
                        self.SetHoldings(symbol, self.allocate)
                    
                    elif self.emafast[symbol] < self.emamedium[symbol]:
                        self.Liquidate(symbol)