| Overall Statistics |
|
Total Trades 2 Average Win 0% Average Loss -3.04% Compounding Annual Return 3.287% Drawdown 24.000% Expectancy -1 Net Profit 1.718% Sharpe Ratio 0.244 Loss Rate 100% Win Rate 0% Profit-Loss Ratio 0 Alpha -0.023 Beta -1.357 Annual Standard Deviation 0.328 Annual Variance 0.108 Information Ratio 0.279 Tracking Error 0.558 Treynor Ratio -0.059 Total Fees $2.50 |
from clr import AddReference
AddReference("System")
AddReference("QuantConnect.Algorithm")
AddReference("QuantConnect.Common")
from System import *
from QuantConnect import *
from QuantConnect.Algorithm import *
from datetime import timedelta
class OptionTrader(QCAlgorithm):
def Initialize(self):
self.SetStartDate(2018, 9, 1)
self.SetEndDate(2019, 3, 11)
self.SetCash(100000)
self.AddEquity("QQQ", Resolution.Hour)
self.rsi = self.RSI("QQQ", 30, MovingAverageType.Simple, Resolution.Hour)
self.SetWarmUp(10, Resolution.Hour)
option = self.AddOption("QQQ")
self.option_symbol = option.Symbol
# set our strike/expiry filter for this option chain
option.SetFilter(+1, +10, timedelta(0), timedelta(14))
# use the underlying equity as the benchmark
self.SetBenchmark("QQQ")
def OnData(self, slice):
if self.Portfolio.Invested: return
for kvp in slice.OptionChains:
if kvp.Key != self.option_symbol: continue
chain = kvp.Value
contracts = sorted(sorted(sorted(chain, \
key = lambda x: abs(chain.Underlying.Price - x.Strike < 0)), \
key = lambda x: x.Expiry, reverse=True), \
key = lambda x: x.Right, reverse=True)
option_invested = [x.Key for x in self.Portfolio if x.Value.Invested and x.Value.Type==SecurityType.Option]
if self.rsi.IsReady:
rsi_value = self.rsi.Current.Value
self.Debug("RSI: "+str(rsi_value))
if rsi_value < 30:
if len(contracts) == 0: continue
if len(option_invested) == 0:
symbol = contracts[0].Symbol
self.MarketOrder(symbol, 10)
self.Debug("Bought Option on QQQ")
self.Log("underlying price:" + str(chain.Underlying.Price))
#self.Log(contracts[0])
elif rsi_value > 70:
#if len(contracts) == 0: continue
if len(option_invested) > 0:
self.Debug("RSI: "+str(rsi_value))
self.Liquidate()
self.Debug("Closed Option on QQQ")