Overall Statistics |
Total Trades 3236 Average Win 0.07% Average Loss -0.06% Compounding Annual Return 5.320% Drawdown 0.400% Expectancy 0.114 Net Profit 11.888% Sharpe Ratio 4.792 Probabilistic Sharpe Ratio 100% Loss Rate 49% Win Rate 51% Profit-Loss Ratio 1.17 Alpha 0.043 Beta -0.002 Annual Standard Deviation 0.009 Annual Variance 0 Information Ratio -0.292 Tracking Error 0.413 Treynor Ratio -23.388 Total Fees $13517.66 |
# Your New Python File Try = [("DXD","DDM",-1,.5,.5,1200)]
from Execution.ImmediateExecutionModel import ImmediateExecutionModel import pandas as pd from collections import deque GoodPairs = [("DGAZ","UGAZ",-1,.5,.5), #Natural Gas ("NUGT","DUST",-1,.5,.5), #Gold Miners ("ERY","ERX",-1,.5,.5), # Energy ("DSLV","USLV",-1,.5,.5),#Silver ("OILU","OILD",-1,.5,.5), #Oil ("SRTY","URTY",-1,.5,.5), #Russel 2000 ("RUSS","RUSL",-1,.5,.5),#Russia ("FAZ","FAS",-1,.5,.5),# Financials ("DRIP","GUSH",-1,.5,.5),# Oil and Gas Exploration ("JNUG","JDST",-1,.5,.5),# Junior Gold Miners ("TNA","TZA",-1,.5,.5,6000), #SP Small Cap ("UDOW","SDOW",-1,.5,.5,6000)] # Dow Jones info = GoodPairs[-2] lbs = [1200,6000,12000] class LETFArb(QCAlgorithm): def Initialize(self): self.SetStartDate(2016, 11, 1) # Set Start Date self.SetEndDate(2019, 1, 1) self.SetCash(100000) # Set Strategy Cash self.SetBrokerageModel(BrokerageName.AlphaStreams) self.AddEquity(info[0], Resolution.Minute) self.AddEquity(info[1], Resolution.Minute) self.SetExecution(ImmediateExecutionModel()) self.SetBenchmark(info[0]) symbols = [ Symbol.Create(info[0], SecurityType.Equity, Market.USA),Symbol.Create(info[1], SecurityType.Equity, Market.USA) ] self.SetUniverseSelection( ManualUniverseSelectionModel(symbols)) self.lr = info[2] self.bb = 3 self.lb= info[5] self.index_prices= deque(maxlen=2) self.letf_prices = deque(maxlen=2) self.spreads = deque(maxlen=self.lb) self.counter = 0 def OnData(self, data): if (self.counter <= self.lb): if (data.Bars.ContainsKey(info[0])) & (data.Bars.ContainsKey(info[1])): self.index_prices.append(data.Bars[info[0]].Close) self.letf_prices.append(data.Bars[info[1]].Close) self.counter+=1 if (self.counter >2): index_returns = pd.Series(self.index_prices).pct_change().iloc[-1] letf_returns = pd.Series(self.letf_prices).pct_change().iloc[-1] spread = float(letf_returns - self.lr* index_returns) self.spreads.append(spread) else: if (data.Bars.ContainsKey(info[0])) & (data.Bars.ContainsKey(info[1])): self.index_prices.append(data.Bars[info[0]].Close) self.letf_prices.append(data.Bars[info[1]].Close) index_returns = pd.Series(self.index_prices).pct_change().iloc[-1] letf_returns = pd.Series(self.letf_prices).pct_change().iloc[-1] spread = float(letf_returns - self.lr* index_returns) self.spreads.append(spread) spread_stds = pd.Series(self.spreads).std() lower_bb = -1*spread_stds*self.bb if (spread <= lower_bb): self.SetHoldings([PortfolioTarget(info[0], info[3]), PortfolioTarget(info[1], info[4])]) else: self.Liquidate()