Overall Statistics
Total Trades
132
Average Win
1.12%
Average Loss
-1.17%
Compounding Annual Return
5.089%
Drawdown
5.500%
Expectancy
0.363
Net Profit
31.954%
Sharpe Ratio
0.897
Loss Rate
30%
Win Rate
70%
Profit-Loss Ratio
0.96
Alpha
0.025
Beta
0.194
Annual Standard Deviation
0.052
Annual Variance
0.003
Information Ratio
-0.598
Tracking Error
0.105
Treynor Ratio
0.239
Total Fees
$132.00
from datetime import timedelta, datetime
class OptionExpirationWeekEffectAlgorithm(QCAlgorithm):

    def Initialize(self):
        self.SetStartDate(2013, 1, 1)
        self.SetEndDate(2018, 8, 1)
        self.SetCash(10000)
        self.AddEquity("OEF", Resolution.Minute)
        option = self.AddOption("OEF")
        option.SetFilter(-3, 3, timedelta(0), timedelta(days = 60))       
        self.Schedule.On(self.DateRules.Every(DayOfWeek.Monday, DayOfWeek.Monday), self.TimeRules.At(10, 0), self.Rebalance)
        self.lastest_expiry = datetime.min
        self.SetBenchmark("OEF")

    def OnData(self, slice):
        
        if self.Time.date() == self.lastest_expiry.date():
            self.Liquidate()

    
    def Rebalance(self):
        calendar = self.TradingCalendar.GetDaysByType(TradingDayType.OptionExpiration, self.Time, self.EndDate)
        expiries = [i.Date for i in calendar]
        if len(expiries) == 0: return
        self.lastest_expiry = expiries[0]

        if (self.lastest_expiry - self.Time).days <= 5:
            self.SetHoldings("OEF", 1)