Overall Statistics
Total Trades
1
Average Win
0%
Average Loss
0%
Compounding Annual Return
0.671%
Drawdown
15.300%
Expectancy
0
Net Profit
0.670%
Sharpe Ratio
0.121
Loss Rate
0%
Win Rate
0%
Profit-Loss Ratio
0
Alpha
0.383
Beta
-18.25
Annual Standard Deviation
0.156
Annual Variance
0.024
Information Ratio
-0.007
Tracking Error
0.156
Treynor Ratio
-0.001
Total Fees
$1.00
from datetime import datetime, timedelta
import numpy as np
import decimal as d
import dateutil

### <summary>
### Basic template algorithm simply initializes the date range and cash. This is a skeleton
### framework you can use for designing an algorithm.
### </summary>
class BasicTemplateAlgorithm(QCAlgorithm):
    '''Basic template algorithm simply initializes the date range and cash'''

    def Initialize(self):
        '''Initialise the data and resolution required, as well as the cash and start-end dates
        for your algorithm. All algorithms must initialized.'''

        self.SetStartDate(2017, 12, 1)  # Set Start Date
        self.SetEndDate(2018, 12, 1)  # Set End Date
        self.SetCash(10000)  # Set Strategy Cash
        # Find more symbols here: http://quantconnect.com/data
        self.AddEquity("IWM", Resolution.Minute)

        # define our 30 minute trade bar consolidator. we can
        # access the 30 minute bar from the DataConsolidated events
        thirtyMinuteConsolidator = TradeBarConsolidator(timedelta(minutes=60))

        # attach our event handler. The event handler is a function that will
        # be called each time we produce a new consolidated piece of data.
        thirtyMinuteConsolidator.DataConsolidated += self.ThirtyMinuteBarHandler

        # this call adds our 30-minute consolidator to
        # the manager to receive updates from the engine
        self.SubscriptionManager.AddConsolidator("IWM", thirtyMinuteConsolidator)

        # dailyConsolidator = TradeBarConsolidator(TimeSpan.FromDays(1))
        # self.SubscriptionManager.AddConsolidator("IWM", dailyConsolidator)
        # dailyConsolidator.DataConsolidated += self.dailyBarHandler

        self.adx = self.ADX("IWM", 14, Resolution.Daily)
        # self.RegisterIndicator("IWM", self.adx, Resolution.Daily)

        # def dailyBarHandler(self, sender, bar):

        # Chart('ADX')
        # self.Schedule.On(self.DateRules.EveryDay(), self.TimeRules.BeforeMarketClose("IWM"),
        #                  self.update_plots)

    def ThirtyMinuteBarHandler(self, sender, bar):
        '''This is our event handler for our 30-minute trade bar defined above in Initialize().
        So each time the consolidator produces a new 30-minute bar, this function will be called
        automatically. The sender parameter will be the instance of the IDataConsolidator that
        invoked the event '''
        printafterdate = "2018-11-18"
        odate = dateutil.parser.parse(printafterdate)
        currentdatetime = str(self.Time)
        currentdate = currentdatetime[:10]
        ocurrentdate = dateutil.parser.parse(currentdate)
        if ocurrentdate > odate and self.adx.IsReady:
        # if self.adx.IsReady:
            self.Debug(str(self.Time) + ":" + str(bar) + ":" + str(self.adx.Current.Value))
        # else:
        #     self.Debug(str(self.Time) + ":" + str(bar))
        # # self.Debug("Daily Bar Handler" + str(self.Time) + " " + str(bar) + str(adx))
        # float_bar_close = float(bar.Close)
        # self.determine_vma(float_bar_close)

    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 stock data
        '''
        if not self.Portfolio.Invested:
            self.SetHoldings("IWM", 1)

    def update_plots(self):
        if not self.adx.IsReady:
            return

        # Plots can also be created just with this one line command.
        self.Plot('ADX', self.adx)