| Overall Statistics |
|
Total Trades 51 Average Win 3.12% Average Loss -0.40% Compounding Annual Return 19792170106220.100% Drawdown 4.600% Expectancy 3.526 Net Profit 42.806% Sharpe Ratio 8.739 Loss Rate 48% Win Rate 52% Profit-Loss Ratio 7.70 Alpha -18.211 Beta 2577.436 Annual Standard Deviation 3.003 Annual Variance 9.021 Information Ratio 8.737 Tracking Error 3.002 Treynor Ratio 0.01 Total Fees $73.72 |
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:
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:
if self.position == None:
self.SetHoldings("SPY", 1)
elif self.position == "VIXY":
self.Liquidate("VIXY")
self.SetHoldings("SPY", 1)
self.position = "SPY"