| Overall Statistics |
|
Total Trades 58 Average Win 0.13% Average Loss -0.05% Compounding Annual Return 2288.702% Drawdown 1.300% Expectancy 0.613 Net Profit 5.967% Sharpe Ratio 11.537 Loss Rate 54% Win Rate 46% Profit-Loss Ratio 2.49 Alpha 2.465 Beta -0.005 Annual Standard Deviation 0.214 Annual Variance 0.046 Information Ratio 11.473 Tracking Error 0.214 Treynor Ratio -495.704 Total Fees $344.30 |
import numpy as np
from datetime import timedelta
from datetime import datetime
import pandas as pd
class MovingAverage(QCAlgorithm):
def Initialize(self):
self.SetStartDate(2018, 1, 1)
self.SetEndDate(2018, 1, 5)
self.SetCash(100000)
self.a = self.AddEquity("VIXY", Resolution.Hour).Symbol
self.b = self.AddEquity("SVXY", Resolution.Hour).Symbol
self.SetWarmUp(30,Resolution.Daily)
self.previous = None
self.position = None
self.macd1 = self.MACD(self.a, 40, 85, 30, MovingAverageType.Exponential, Resolution.Hour)
self.macd2 = self.MACD(self.b, 40, 85, 30, MovingAverageType.Exponential, Resolution.Hour)
#self.rsi_vixy = self.RSI("VIXY", 18, MovingAverageType.Exponential,Resolution.Hour)
#self.rsi_svxy = self.RSI("SVXY", 18, MovingAverageType.Exponential,Resolution.Hour)
def OnData(self,data):
if self.IsWarmingUp: return
if self.macd1.Current.Value > self.macd1.Signal.Current.Value and self.macd2.Current.Value < self.macd2.Signal.Current.Value:
if not self.Portfolio.Invested:
self.SetHoldings("SVXY", -0.3)
self.SetHoldings("VIXY", 1.3)
self.Log('SVXY %' + str(round((self.Securities["SVXY"].Price * self.Portfolio['SVXY'].Quantity)/self.Portfolio.TotalPortfolioValue,4)))
self.Log('VIXY %' + str(round((self.Securities["VIXY"].Price * self.Portfolio['VIXY'].Quantity)/self.Portfolio.TotalPortfolioValue,4)))
else:
self.Liquidate("SVXY")
self.SetHoldings("SVXY", -0.3)
self.SetHoldings("VIXY", 1.3)
self.Log('SVXY %' + str(round((self.Securities["SVXY"].Price * self.Portfolio['SVXY'].Quantity)/self.Portfolio.TotalPortfolioValue,4)))
self.Log('VIXY %' + str(round((self.Securities["VIXY"].Price * self.Portfolio['VIXY'].Quantity)/self.Portfolio.TotalPortfolioValue,4)))
if self.macd1.Current.Value < self.macd1.Signal.Current.Value and self.macd2.Current.Value > self.macd2.Signal.Current.Value:
if not self.Portfolio.Invested:
self.SetHoldings("VIXY", -0.3)
self.SetHoldings("SVXY", 1.3)
self.Log('SVXY %' + str(round((self.Securities["SVXY"].Price * self.Portfolio['SVXY'].Quantity)/self.Portfolio.TotalPortfolioValue,4)))
self.Log('VIXY %' + str(round((self.Securities["VIXY"].Price * self.Portfolio['VIXY'].Quantity)/self.Portfolio.TotalPortfolioValue,4)))
else:
self.Liquidate("VIXY")
self.SetHoldings("VIXY", -0.3)
self.SetHoldings("SVXY", 1.3)
self.Log('SVXY %' + str(round((self.Securities["SVXY"].Price * self.Portfolio['SVXY'].Quantity)/self.Portfolio.TotalPortfolioValue,4)))
self.Log('VIXY %' + str(round((self.Securities["VIXY"].Price * self.Portfolio['VIXY'].Quantity)/self.Portfolio.TotalPortfolioValue,4)))