Overall Statistics
import numpy as np
from pprint import pprint
import pandas as pd
from datetime import timedelta

### <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(2016,10,01)  #Set Start Date
        self.SetEndDate(2016,11,16)    #Set End Date
        self.SetCash(25000)           #Set Strategy Cash
        # Find more symbols here: http://quantconnect.com/data
        # self.AddUniverse(self.CoarseSelectionFunction)
        self.AddEquity("GOOG", Resolution.Daily)
        option = self.AddOption("GOOG", Resolution.Daily)
        option.SetFilter(-10, +10, timedelta(0), timedelta(180))
        # option.SetFilter(-2, 2, TimeSpan.FromDays(30), TimeSpan.FromDays(180));
        # self.Schedule.On(self.DateRules.Every([DayOfWeek.Thursday]), self.TimeRules.BeforeMarketClose("SPY", 45), Action(self.MakeTrades))
    
    def CoarseSelectionFunction(self, coarse):
        '''Take the top 5 by dollar volume using coarse'''
        # sort descending by daily dollar volume
        sortedByDollarVolume = sorted(coarse, \
            key=lambda x: x.DollarVolume, reverse=True) 
    
        # add Options
        # for x in sortedByDollarVolume[:5]:
        #     self.AddOption(x.Symbol.Value, Resolution.Daily)
    
        # we need to return only the symbol objects
        return [ x.Symbol for x in sortedByDollarVolume[:5] ]
        
    def GetOptionTrades(self, data):
        '''figure out which trades to make, and trade size as well'''
        trades_to_make = []
        return trades_to_make
        
    def MakeTrades(self, data):
        '''Make Options Trades'''
        option_trades = self.GetOptionTrades(data)

    def OnData(self,slice): 
        self.Log("ondata")
        for i in slice.OptionChains:
            optionchain = i.Value 
            self.Log("underlying price:" + str(optionchain.Underlying.Price))
            df = pd.DataFrame([[x.Right,float(x.Strike),x.Expiry,float(x.BidPrice),float(x.AskPrice)] for x in optionchain],
               index=[x.Symbol.Value for x in optionchain],
               columns=['type(call 0, put 1)', 'strike', 'expiry', 'ask price', 'bid price'])
            self.Log(str(df))