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 QuantConnect.Securities.Option import OptionPriceModels

class AutomatonTrade(QCAlgorithm):

    def Initialize(self):
        
        # Init
        self.SetStartDate(2020, 1, 1)
        self.SetEndDate(2020, 1, 3)

        self.SetSecurityInitializer(self.CustomSecurityInitializer)
        
        self.tsla = Symbol.Create("TSLA", SecurityType.Equity, Market.USA)
                
        # Live universe with selection.
        self.AddUniverse(self.CoarseSelectionFunction)
        
        self.called = 0
        
        

    def CustomSecurityInitializer(self, security):
        '''Initialize the security with raw prices'''
        security.SetDataNormalizationMode(DataNormalizationMode.Raw)
        
        if security.Type == SecurityType.Equity:
            security.VolatilityModel = StandardDeviationOfReturnsVolatilityModel(30)
            history = self.History(security.Symbol, 31, Resolution.Daily)
            if history.empty or 'close' not in history.columns:
                return
            
            for time, row in history.loc[security.Symbol].iterrows():
                trade_bar = TradeBar(time, security.Symbol, row.open, row.high, row.low, row.close, row.volume)    
                security.VolatilityModel.Update(security, trade_bar)
        
        elif security.Type == SecurityType.Option:
            security.PriceModel = OptionPriceModels.CrankNicolsonFD() #  BlackScholes()
            

    def CoarseSelectionFunction(self, coarse):
        return [self.tsla]
        
        
    def OnData(self, data):
        
        self.called += 1
        
        symbols = self.OptionChainProvider.GetOptionContractList(self.tsla, data.Time)[:3]
        for symbol in symbols:
            if symbol not in self.Securities.Keys:
                self.AddOptionContract(symbol, Resolution.Minute)
    
        for symbol, chain in data.OptionChains.items():
            for contract in chain:
                self.Log(f"Delta {contract.Greeks.Delta} for {contract}")
                    
        if self.called >= 4:
            self.Quit()