| Overall Statistics |
|
Total Trades 8 Average Win 6.14% Average Loss -0.73% Compounding Annual Return 32.757% Drawdown 3.300% Expectancy 3.695 Net Profit 10.794% Sharpe Ratio 2.966 Probabilistic Sharpe Ratio 83.213% Loss Rate 50% Win Rate 50% Profit-Loss Ratio 8.39 Alpha 0.217 Beta 0.393 Annual Standard Deviation 0.114 Annual Variance 0.013 Information Ratio 0.221 Tracking Error 0.141 Treynor Ratio 0.857 Total Fees $8.00 |
from clr import AddReference
AddReference("System")
AddReference("QuantConnect.Algorithm")
AddReference("QuantConnect.Indicators")
AddReference("QuantConnect.Common")
from System import *
from QuantConnect import *
from QuantConnect.Indicators import *
from QuantConnect.Algorithm import *
from collections import deque
from datetime import datetime, timedelta
from numpy import sum
class OptimizedVerticalContainmentField(QCAlgorithm):
def Initialize(self):
self.SetStartDate(2020,8,24) # Set Start Date
self.SetEndDate(2020,12,31)
self.spy = self.AddEquity("SPY", Resolution.Minute)
self.SetCash(10000) # Set Strategy Cash
self.SetWarmUp(200)
self.Firststock = "SPY"
#Indicators that can be optimized
self.FirstBuyIndicator = .21
self.FirstSellIndicator = -.24
self.FirstHMAPeriod = 35
#Initializing the Hull Moving Average of the First Stock
self.Firsthma = self.HMA(self.Firststock, self.FirstHMAPeriod, Resolution.Minute)
#Initializing the rolling window (array) to hold historical data of the hull moving average
self.Firsthma.Updated += self.HmaUpdated
self.hmaWindow = RollingWindow[float](3)
self.window = RollingWindow[TradeBar](3)
#updates the rolling window for the First stock's Hull Moving Average Data
def HmaUpdated(self, sender, updated):
self.hmaWindow.Add(self.Firsthma.Current.Value)
#Where actions take place and you enter in the criteria to follow
def OnData(self, data):
#warming up the data, starts running the algorithm before the actual start data
if self.IsWarmingUp: return
self.window.Add(data[self.Firststock])
#Ensures that the rolling windows (arrays) have the required data to be used
if not (self.window.IsReady and self.hmaWindow.IsReady):
return
#Criteria value-2 minute slope of the first stock hull moving average
Firstslope = ((self.hmaWindow[0]-self.hmaWindow[2])/self.hmaWindow[2])*100
#First Stock Buy Action Area
if Firstslope > self.FirstBuyIndicator:
if (not self.Portfolio.Invested):
self.SetHoldings(self.Firststock, 1, True)
#First Stock Sell Action Area
if Firstslope < self.FirstSellIndicator:
if (self.Portfolio.Invested):
self.Liquidate(self.Firststock)