| Overall Statistics |
|
Total Trades 1 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 0 Tracking Error 0 Treynor Ratio 0 Total Fees $1.00 Estimated Strategy Capacity $2300000000.00 Lowest Capacity Asset SPY R735QTJ8XC9X |
import datetime
import math
from QuantConnect.Securities.Option import OptionPriceModels
from datetime import timedelta
from QuantConnect.Data.UniverseSelection import *
SYMBOL = "SPY"
# BACKTEST SCENARIOS:
#####################
# SPY sharp decrease during 20 Feb - 20 Mar due to covid:
# STARTING_CASH = 32400; START = (2020, 1, 1); END = (2021, 1, 1)
# 5.5 Years:
# STARTING_CASH = 20700; START = (2015, 1, 1); END = (2021, 6, 1)
# Debug 1 day:
STARTING_CASH = 20700; START = (2015, 1, 1); END = (2015, 1, 3)
# Debug 1 month:
# STARTING_CASH = 50000; START = (2016, 1, 1); END = (2016, 2, 27)
# SPY price trends downwards:
# STARTING_CASH = 50000; START = (2020, 2, 20); END = (2020, 3, 20)
# SPY price trends upwards:
# STARTING_CASH = 50000; START = (2020, 2, 20); END = (2020, 3, 20)
class BlahBlahAlgorithm(QCAlgorithm):
def Initialize(self):
self.SetStartDate(*START); self.SetEndDate(*END); self.SetCash(STARTING_CASH)
equity = self.AddEquity(SYMBOL, Resolution.Minute)
option = self.AddOption(SYMBOL, Resolution.Minute)
self.symbol = option.Symbol
self.UniverseSettings.Resolution = Resolution.Daily
option.SetFilter(lambda universe: universe.WeeklysOnly().Strikes(0, +30).Expiration(timedelta(1), timedelta(30)))
self.SetBenchmark(SYMBOL)
def OnData(self,slice):
close = slice[SYMBOL].Close
price = slice[SYMBOL].Price
self.Debug(f'{self.Time} bid_open ask_low {close} {price}')
if not self.Portfolio[SYMBOL].Invested:
self.MarketOrder(SYMBOL, 1) # long 1 underlying.
def OnOrderEvent(self, orderEvent):
self.Log(str(orderEvent))from Selection.OptionUniverseSelectionModel import OptionUniverseSelectionModel
from datetime import date, timedelta
class OptionsUniverseSelectionModel(OptionUniverseSelectionModel):
def __init__(self, select_option_chain_symbols):
super().__init__(timedelta(1), select_option_chain_symbols)
def Filter(self, filter):
## Define options filter -- strikes +/- 3 and expiry between 0 and 180 days away
return (filter.Strikes(-2, +2)
.Expiration(timedelta(0), timedelta(180)))