Overall Statistics
Total Trades
33
Average Win
6.24%
Average Loss
-1.98%
Compounding Annual Return
18269.169%
Drawdown
24.400%
Expectancy
1.333
Net Profit
23.892%
Sharpe Ratio
3.219
Loss Rate
44%
Win Rate
56%
Profit-Loss Ratio
3.15
Alpha
2.081
Beta
216.439
Annual Standard Deviation
1.806
Annual Variance
3.263
Information Ratio
3.209
Tracking Error
1.806
Treynor Ratio
0.027
Total Fees
$43.45
import numpy as np
from datetime import datetime
import pandas as pd



class VolTrading(QCAlgorithm):


    def Initialize(self):
      
        self.SetStartDate(2018,2,1)  #Set Start Date
        self.SetEndDate(2018,2,15)    #Set End Date
        self.SetCash(10000)           #Set Strategy Cash
        self.spy = self.AddEquity("SPY", Resolution.Minute).Symbol
        self.vixy = self.AddEquity("VIXY", Resolution.Minute).Symbol
        self.SetWarmUp(100)
        self.previous = None
        self.position = None

        

    def OnData(self, data):
        self.stop_price_v_high = float(data["VIXY"].Open) * 1.05
        self.stop_price_v_low = float(data["VIXY"].Open) * .9
        self.stop_price_s_high = float(data["SPY"].Open) * 1.05
        self.stop_price_s_low = float(data["SPY"].Open) * .9
        
        if self.IsWarmingUp: return      
                
                
        if data.Bars.ContainsKey("SPY") or data.Bars.ContainsKey("VIXY"):
         
    
            SPercent =  np.log(float(self.Securities[self.spy].Price/data["SPY"].Open))
            VPercent =  np.log(float(self.Securities[self.vixy].Price/data["VIXY"].Open))
             
             
            if SPercent <= -0.003:
                #and  VPercent >= .003
                if self.position == None:
                    self.SetHoldings("VIXY", 1)
                elif self.position == "SPY":
                     self.Liquidate("SPY")  
                     self.SetHoldings("VIXY", 1)
                self.position = "VIXY"
                  
                  
            if SPercent >= .003:
                #and VPercent <= -.003
                if self.position == None:
                    self.SetHoldings("SPY", 1)
                elif self.position == "VIXY":
                    self.Liquidate("VIXY")  
                    self.SetHoldings("SPY", 1)
                self.position = "SPY"
                
                
            if self.position =="VIXY" and  self.Securities[self.vixy].Price == self.stop_price_v_high:
                self.Liquidate("VIXY")
            elif self.position =="VIXY" and  self.Securities[self.vixy].Price == self.stop_price_v_low:
                self.Liquidate("VIXY")
            
            if self.position =="SPY" and  self.Securities[self.spy].Price == self.stop_price_s_high:
                self.Liquidate("SPY")
            elif self.position =="SPY" and  self.Securities[self.spy].Price == self.stop_price_s_low:
                self.Liquidate("SPY")
                    
                
                
                
                
                
            #if self.position =="VIXY" and  self.vixy == self.stop_price_v_high:
             #   self.StopMarketOrder(self.vixy, -self.Portfolio["VIXY"].Quantity, stop_price_v_high)
            #elif self.position =="VIXY" and  self.vixy == self.stop_price_v_low:
            #    self.StopMarketOrder(self.vixy, -self.Portfolio["VIXY"].Quantity, stop_price_v_low)
            
            #if self.position =="SPY" and  self.spy == self.stop_price_s_high:
            #    self.StopMarketOrder(self.spy, -self.Portfolio["SPY"].Quantity, stop_price_s_high)
            #elif self.position =="SPY" and  self.spy == self.stop_price_s_low:
            #    self.StopMarketOrder(self.spy, -self.Portfolio["SPY"].Quantity, stop_price_s_low)
                
                
                
                
                
                ### want to lock in returns and start algorthim over 
                # if return is >= .5:
                #liquidate all positions and start algrothim over 
                #elif return <=-.3:
                #stop loss
                #else:
                #keep running 
                
                ## change vixy to another VIX
                ## look to  see if can use correlation as 
                # when correctation is close to - 1 and 1 use
                ## try to use X
                
                
                ### id sd is high buy into or if sd hight and regression is hight buy into 
                
                ###                        
import numpy as np
from datetime import datetime
import pandas as pd



class VolTrading(QCAlgorithm):


    def Initialize(self):
      
        self.SetStartDate(2018,2,1)  #Set Start Date
        self.SetEndDate(2018,2,15)    #Set End Date
        self.SetCash(10000)           #Set Strategy Cash
        self.spy = self.AddEquity("SPY", Resolution.Minute).Symbol
        self.vixy = self.AddEquity("VIXY", Resolution.Minute).Symbol
        self.SetWarmUp(100)
        self.previous = None
        self.position = None

        

    def OnData(self, data):
        self.stop_price_v_high = float(data["VIXY"].Open) * 1.05
        self.stop_price_v_low = float(data["VIXY"].Open) * .9
        self.stop_price_s_high = float(data["SPY"].Open) * 1.05
        self.stop_price_s_low = float(data["SPY"].Open) * .9
        
        if self.IsWarmingUp: return      
        
        if self.position =="VIXY" and  self.vixy == self.stop_price_v_high:
            self.StopMarketOrder(self.vixy, -self.Portfolio["VIXY"].Quantity, stop_price_v_high)
        elif self.position =="VIXY" and  self.vixy == self.stop_price_v_low:
            self.StopMarketOrder(self.vixy, -self.Portfolio["VIXY"].Quantity, stop_price_v_low)
            
        if self.position =="SPY" and  self.spy == self.stop_price_s_high:
            self.StopMarketOrder(self.spy, -self.Portfolio["SPY"].Quantity, stop_price_s_high)
        elif self.position =="SPY" and  self.spy == self.stop_price_s_low:
            self.StopMarketOrder(self.spy, -self.Portfolio["SPY"].Quantity, stop_price_s_low)        
                
        if data.Bars.ContainsKey("SPY") or data.Bars.ContainsKey("VIXY"):
       
         
    
            SPercent =  np.log(float(self.Securities[self.spy].Price/data["SPY"].Open))
            VPercent =  np.log(float(self.Securities[self.vixy].Price/data["VIXY"].Open))
             
             
            if SPercent <= -0.003:
                #and  VPercent >= .003
                if self.position == None:
                    self.SetHoldings("VIXY", 1)
                elif self.position == "SPY":
                     self.Liquidate("SPY")  
                     self.SetHoldings("VIXY", 1)
                self.position = "VIXY"
                  
                  
            if SPercent >= .003:
                #and VPercent <= -.003
                if self.position == None:
                    self.SetHoldings("SPY", 1)
                elif self.position == "VIXY":
                    self.Liquidate("VIXY")  
                    self.SetHoldings("SPY", 1)
                self.position = "SPY"
                
                
            #if self.position =="VIXY" and  self.Securities[self.vixy].Price == self.stop_price_v_high:
             #   self.Liquidate("VIXY")
            #elif self.position =="VIXY" and  self.Securities[self.vixy].Price == self.stop_price_v_low:
             #   self.Liquidate("VIXY")
            
            #if self.position =="SPY" and  self.Securities[self.spy].Price == self.stop_price_s_high:
             #   self.Liquidate("SPY")
            #elif self.position =="SPY" and  self.Securities[self.spy].Price == self.stop_price_s_low:
            #    self.Liquidate("SPY")
                    
                
                
                
                
                
            #if self.position =="VIXY" and  self.vixy == self.stop_price_v_high:
            #    self.StopMarketOrder(self.vixy, -self.Portfolio["VIXY"].Quantity, stop_price_v_high)
            #elif self.position =="VIXY" and  self.vixy == self.stop_price_v_low:
            #    self.StopMarketOrder(self.vixy, -self.Portfolio["VIXY"].Quantity, stop_price_v_low)
            
            #if self.position =="SPY" and  self.spy == self.stop_price_s_high:
            #    self.StopMarketOrder(self.spy, -self.Portfolio["SPY"].Quantity, stop_price_s_high)
            #elif self.position =="SPY" and  self.spy == self.stop_price_s_low:
            #    self.StopMarketOrder(self.spy, -self.Portfolio["SPY"].Quantity, stop_price_s_low)
                
                
                
                
                
                ### want to lock in returns and start algorthim over 
                # if return is >= .5:
                #liquidate all positions and start algrothim over 
                #elif return <=-.3:
                #stop loss
                #else:
                #keep running 
                
                ## change vixy to another VIX
                ## look to  see if can use correlation as 
                # when correctation is close to - 1 and 1 use
                ## try to use X
                
                
                ### id sd is high buy into or if sd hight and regression is hight buy into 
                
                ###                        
import numpy as np
from datetime import datetime
import pandas as pd



class VolTrading(QCAlgorithm):


    def Initialize(self):
      
        self.SetStartDate(2018,2,1)  #Set Start Date
        self.SetEndDate(2018,2,15)    #Set End Date
        self.SetCash(10000)           #Set Strategy Cash
        self.spy = self.AddEquity("SPY", Resolution.Minute).Symbol
        self.vixy = self.AddEquity("VIXY", Resolution.Minute).Symbol
        self.SetWarmUp(10)
        self.previous = None
        self.position = None

        

    def OnData(self, data):
        if self.IsWarmingUp: return         
        if data.Bars.ContainsKey("SPY") or data.Bars.ContainsKey("VIXY"):

    
            SPercent =  np.log(float(self.Securities[self.spy].Price/data["SPY"].Open))
            VPercent =  np.log(float(self.Securities[self.vixy].Price/data["VIXY"].Open))
             
             
            if SPercent <= -0.003:
                #or Vpercent >= .001
                if self.position == None:
                    self.SetHoldings("VIXY", 1)
                elif self.position == "SPY":
                     self.Liquidate("SPY")  
                     self.SetHoldings("VIXY", 1)
                self.position = "VIXY"
                  
                  
            if SPercent >= 0.003:
                #or Vpercent<=-.01
                if self.position == None:
                    self.SetHoldings("SPY", 1)
                elif self.position == "VIXY":
                    self.Liquidate("VIXY")  
                    self.SetHoldings("SPY", 1)
                self.position = "SPY"                        
import numpy as np
from datetime import datetime
import pandas as pd



class VolTrading(QCAlgorithm):


    def Initialize(self):
      
        self.SetStartDate(2018,2,1)  #Set Start Date
        #self.SetEndDate(2018,2,5)    #Set End Date
        self.SetCash(10000)           #Set Strategy Cash
        self.spy = self.AddEquity("SPY", Resolution.Minute).Symbol
        self.vixy = self.AddEquity("VIXY", Resolution.Minute).Symbol
        self.SetWarmUp(10)
        self.previous = None
        self.position = None

        

    def OnData(self, data):
        if self.IsWarmingUp: return         
        if data.Bars.ContainsKey("SPY") or data.Bars.ContainsKey("VIXY"):

            history_s = self.History([self.spy], 1, Resolution.Minute)
            history_v = self.History([self.vixy], 1, Resolution.Minute)
            if str(self.spy) in history_s.index and str(self.vixy) in history_v.index:
                last_minute_close_s = history_s.loc[str(self.spy)]["close"][-1]
                last_minute_close_v = history_v.loc[str(self.vixy)]["close"][-1]
         
    
            SPercent =  np.log(float(self.Securities[self.spy].Price/data["SPY"].Open))
            VPercent =  np.log(float(self.Securities[self.vixy].Price/data["VIXY"].Open))
             
             
            if SPercent <= -0.001:
                #or Vpercent >= .001
                if self.position == None:
                    self.SetHoldings("VIXY", 1)
                elif self.position == "SPY":
                     self.Liquidate("SPY")  
                     self.SetHoldings("VIXY", 1)
                self.position = "VIXY"
                  
                  
            if SPercent >= .001:
                #or Vpercent<=-.01
                if self.position == None:
                    self.SetHoldings("SPY", 1)
                elif self.position == "VIXY":
                    self.Liquidate("VIXY")  
                    self.SetHoldings("SPY", 1)
                self.position = "SPY"
                
                
                
                
                ### want to lock in returns and start algorthim over 
                # if return is >= .5:
                #liquidate all positions and start algrothim over 
                #elif return <=-.3:
                #stop loss
                #else:
                #keep running
                
                ### id sd is high buy into or if sd hight and regression is hight buy into