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 -1.508 Tracking Error 0.198 Treynor Ratio 0 Total Fees $0.00 Estimated Strategy Capacity $0 Lowest Capacity Asset |
from datetime import date import numpy as np import datetime import pandas class SimpleBreakoutExample(QCAlgorithm): def Initialize(self): self.SetCash(100000) self.SetStartDate(2021,10,1) self.SetEndDate(date.today()) ticker = "MSFT" self.ticker = str(ticker) equity = self.AddEquity(ticker, Resolution.Minute) self.symbol = self.AddEquity(ticker, Resolution.Minute).Symbol equity.SetDataNormalizationMode(DataNormalizationMode.Raw) self.equity = equity.Symbol self.SetBenchmark(self.equity) option = self.AddOption(ticker, Resolution.Minute) option.SetFilter(-1,1,timedelta(5),timedelta(11)) self.Schedule.On(self.DateRules.EveryDay(self.symbol), \ self.TimeRules.AfterMarketOpen(self.symbol, 20), \ Action(self.EveryMarketOpen)) # def OnData(self, data): # option_invested = [x.Key for x in self.Portfolio if x.Value.Invested and x.Value.Type==SecurityType.Option] def EveryMarketOpen(self): ticker = str(self.ticker) start = datetime.datetime(2021, 2, 1) option_invested = [x.Key for x in self.Portfolio if x.Value.Invested and x.Value.Type==SecurityType.Option] end = date.today() qb = QuantBook() spy = qb.AddEquity(ticker) self.history = qb.History(spy.Symbol, start, end, Resolution.Daily) self.history['Close'] = self.history['close'] self.history['20_SMA'] = self.history['Close'].rolling(window=5, min_periods=1).mean() self.history['50_SMA'] = self.history['Close'].rolling(window=12, min_periods=1).mean() self.history['Signal'] = 0.0 self.history['Signal'] = np.where(self.history['20_SMA'] > self.history['50_SMA'], 1.0, 0.0) self.history['Position'] = self.history['Signal'].diff() self.history['Buy Signal'] = self.history['Position'] == 1 self.Signal = int(self.history.tail(1)['Position']) self.Log(f"Time: {self.Time} - Signal: {self.Signal}") if option_invested: if self.Time + timedelta(2) > option_invested[0].ID.Date: self.Liquidate(option_invested[0], "Too close to expiration") return if self.Signal == 1: for i in data.OptionChains: chains = i.Value self.BuyCall(chains) def BuyCall(self,chains): expiry = sorted(chains,key = lambda x: x.Expiry, reverse=True)[0].Expiry calls = [i for i in chains if i.Expiry == expiry and i.Right == OptionRight.Call] call_contracts = sorted(calls,key = lambda x: abs(x.Strike - x.UnderlyingLastPrice)) if len(call_contracts) == 0: return self.call = call_contracts[0] quantity = self.Portfolio.TotalPortfolioValue / self.call.AskPrice quantity = int( 0.05 * quantity / 100 ) self.Buy(self.call.Symbol, quantity) def OnOrderEvent(self, orderEvent): order = self.Transactions.GetOrderById(orderEvent.OrderId) if order.Type == OrderType.OptionExercise: self.Liquidate()