| Overall Statistics |
|
Total Trades 825 Average Win 0.31% Average Loss -0.07% Compounding Annual Return 24.561% Drawdown 8.800% Expectancy 0.561 Net Profit 24.524% Sharpe Ratio 1.69 Probabilistic Sharpe Ratio 71.876% Loss Rate 70% Win Rate 30% Profit-Loss Ratio 4.15 Alpha 0.174 Beta 0.149 Annual Standard Deviation 0.12 Annual Variance 0.014 Information Ratio 0.04 Tracking Error 0.279 Treynor Ratio 1.358 Total Fees $0.00 |
class MultidimensionalTachyonFlange(QCAlgorithm):
def Initialize(self):
self.SetStartDate(2020, 1, 1) # Set Start Date
self.SetCash(100000) # Set Strategy Cash
# self.AddEquity("SPY", Resolution.Minute)
self.vx = self.AddFuture(Futures.Indices.VIX, Resolution.Minute)
self.vx.SetFilter(timedelta(0), timedelta(100))
self.vx_contracts = []
self.es = self.AddCfd("SPX500USD", Resolution.Minute, Market.Oanda)
def OnData(self, data):
# Sort VIX contracts
for chain in data.FutureChains:
contracts = [contract for contract in chain.Value]
if len(contracts) == 0:
return
else:
self.vx_contracts = []
for i in contracts:
if Futures.Indices.VIX in str(i):
self.vx_contracts.append(i)
self.vx_contracts = self.ContractSorter(self.vx_contracts)
if self.Time.minute %10 ==0:
for i in range(len(self.vx_contracts)):
self.Debug(f"VX contract {i} is "+str(self.vx_contracts[i].AskPrice))
# If the second month contract is above the first, contango is true and buy SPX
if self.vx_contracts[1].AskPrice>self.vx_contracts[0].AskPrice:
self.contango=True
else:
self.contango = False
if self.Portfolio.Invested:
if self.contango == True:
return
else:
self.Liquidate(self.es.Symbol)
else:
if self.contango:
self.SetHoldings(self.es.Symbol,1)
else:
return
def ContractSorter(self,contract_list):
if len(contract_list)>1.5:
return sorted(contract_list, key = lambda x: x.Expiry,reverse = False)
else:
return contract_list