| 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)