Overall Statistics
Total Trades
1
Average Win
0%
Average Loss
0%
Compounding Annual Return
-74.014%
Drawdown
16.800%
Expectancy
0
Net Profit
-10.705%
Sharpe Ratio
-4.515
Loss Rate
0%
Win Rate
0%
Profit-Loss Ratio
0
Alpha
-1.954
Beta
27.798
Annual Standard Deviation
0.305
Annual Variance
0.093
Information Ratio
-4.584
Tracking Error
0.305
Treynor Ratio
-0.05
Total Fees
$1.78
import numpy as np
from datetime import datetime, timedelta

class BasicTemplateAlgorithm(QCAlgorithm):

    def Initialize(self):

        self.SetStartDate(2018, 12, 1)  #Set Start Date
        self.SetEndDate(2018,12,31)    #Set End Date
        self.SetCash(100000)           #Set Strategy Cash
        
        self.AddEquity("SPY", Resolution.Minute)
        
        ## 10-period RSI Indicator using SMA
        self.rsi_30m = RelativeStrengthIndex(10, MovingAverageType.Simple)
        self.RegisterIndicator("SPY", self.rsi_30m)
        
        ## 30-min consolidator
        thirtyMinuteConsolidator = TradeBarConsolidator(timedelta(minutes=30))
        thirtyMinuteConsolidator.DataConsolidated += self.ThirtyMinuteBarHandler
        
        
        self.SubscriptionManager.AddConsolidator("SPY", thirtyMinuteConsolidator)

        ## 10-day ADX indicator using daily resolution data
        self.adx_daily = self.ADX("SPY", 10, Resolution.Daily)

    def ThirtyMinuteBarHandler(self, sender, bar):
        
        ## This will log indicator data at 30-min intervals
        ## Note that in the logs, RSI_daily logs the same value until the next day,
        ## indicating that it is functioning properly
        self.Log("ADX_daily 30-min Handler Log:" + str(round(self.adx_daily.Current.Value,4)))
        self.Log("RSI_30m 30-min Handler Log:" + str(round(self.rsi_30m.Current.Value,4)))
        self.Log(' ')
        
    def OnData(self, data):
        
        ## Log indicator and SPY data for every TradeBar, which occurs every minute
        self.Log("RSI_30m OnData Log: " + str(round(self.rsi_30m.Current.Value,4)))
        self.Log("ADX_daily OnData Log: " + str(round(self.adx_daily.Current.Value,4)))
        self.Log('SPY Period: ' + str(data['SPY'].Period))
        self.Log('SPY: ' + str(data['SPY'].Close))
        self.Log(' ')
        
        if not self.Portfolio.Invested:
            self.SetHoldings("SPY", 1)