Overall Statistics
Total Trades
1
Average Win
0%
Average Loss
0%
Compounding Annual Return
1.592%
Drawdown
0.200%
Expectancy
0
Net Profit
0.372%
Sharpe Ratio
1.749
Probabilistic Sharpe Ratio
66.692%
Loss Rate
0%
Win Rate
0%
Profit-Loss Ratio
0
Alpha
0.005
Beta
-0.02
Annual Standard Deviation
0.006
Annual Variance
0
Information Ratio
1.578
Tracking Error
0.208
Treynor Ratio
-0.549
Total Fees
$1.00
Estimated Strategy Capacity
$4300000.00
Lowest Capacity Asset
MSFT X1B3PFLLX65I|MSFT R735QTJ8XC9X
from AlgorithmImports import *


class Coveredc(QCAlgorithm):
    def Initialize(self):
        self.SetStartDate(2018, 10, 7)  # Set Start Date
        self.SetEndDate(2019, 1, 1)  # Set End Date
        self.SetCash(100000)  # Set Strategy Cash

        #equity=self.AddEquity("MSFT", Resolution.Minute)
        #equity.SetDataNormalizationMode(DataNormalizationMode.Raw)
        #self.equity = equity.Symbol
        #self.SetBenchmark(self.equity)

        option = self.AddOption("MSFT",Resolution.Minute)
        self.symbol = option.Symbol
        option.SetFilter(-10, +10, timedelta(0), timedelta(180))


    def OnData(self, slice):
        """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 we have already sold a call
        if self.Portfolio.Invested:return  
        for kvp in slice.OptionChains:
            if kvp.Key != self.symbol:
                continue
            optionchain = kvp.Value
                # Filter call options from optionchain
            call = [x for x in optionchain if x.Right == OptionRight.Call]
                # price of underlying stock
            price = optionchain.Underlying.Price
                # Filtering OTM contracts
            contracts = [x for x in call if price - x.Strike < 0]
                # Sorting OTM contracts as per their expiry
            contracts = sorted(contracts, key = lambda x: x.Expiry, reverse = True)

            if len(contracts) == 0: return

            symbol = contracts[0].Symbol
            self.MarketOrder(symbol, -1)
            self.Log("Underlying price at time of selling option: {0}".format(price))