| 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()