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