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)