| Overall Statistics |
|
Total Trades 0 Average Win 0% Average Loss 0% Compounding Annual Return 0% Drawdown 0% Expectancy 0 Net Profit 0% Sharpe Ratio 0 Probabilistic Sharpe Ratio 0% Loss Rate 0% Win Rate 0% Profit-Loss Ratio 0 Alpha 0 Beta 0 Annual Standard Deviation 0 Annual Variance 0 Information Ratio 5.35 Tracking Error 0.107 Treynor Ratio 0 Total Fees $0.00 Estimated Strategy Capacity $0 Lowest Capacity Asset |
#region imports
from AlgorithmImports import *
#endregion
import datetime
import pandas as pd
import ht_auth
class ModulatedHorizontalAutosequencers(QCAlgorithm):
def Initialize(self):
ht_auth.SetToken(self.GetParameter("mlfinlab-api-key"))
import mlfinlab as ml
self.ml = ml
self.SetStartDate(2019, 1, 18) # Set Start Date
self.SetEndDate(2019, 1, 22)
self.SetCash(100000) # Set Strategy Cash
self.spy = self.AddEquity("SPY", Resolution.Tick).Symbol
self.windowsize = 10000
self.batch_size=1000000
self.lastsample = datetime.datetime.min
self.initialisation = True
self.runningtotal = 0
self.dollarhistory = pd.DataFrame()
self.threshold = 500000000
self.SetWarmUp(10000)
def OnData(self, data):
if data:
dollarvolumes = [tick.LastPrice * tick.Quantity for tick in data[self.spy]]
self.runningtotal += sum(dollarvolumes)
if self.runningtotal > self.threshold and data.Time > self.lastsample:
if self.lastsample == datetime.datetime.min:
self.lastsample = data.Time
self.threshold = self.GetAvgDollarVolume(self.spy, data.Time, 5) / 50
history = self.History(self.spy,
self.lastsample,
data.Time,
Resolution.Tick)
history = history[["lastprice", "quantity"]]
history = history.loc[self.spy]
nextdollarbar = self.Ticks_to_Dollars(history, self.threshold, self.batch_size)
self.dollarhistory = pd.concat([self.dollarhistory, nextdollarbar]).drop_duplicates().reset_index(drop=True).iloc[-self.windowsize:]
self.runningtotal =0
self.lastsample = data.Time
self.threshold = self.GetAvgDollarVolume(self.spy, data.Time, 5) / 50
self.Debug(str(data.Time)+" New Dollar Bar. total bars in history: "+str(len(self.dollarhistory))+" new threshold: "+str(self.threshold))
def Ticks_to_Dollars(self, ticks, threshold, batch_size):
df = pd.DataFrame()
df["date_time"] = ticks.index.values
df["price"] = ticks.lastprice.values
df["volume"] = ticks.quantity.values
return self.ml.data_structures.get_dollar_bars(df,
threshold = threshold,
batch_size = batch_size,
verbose = False)
def GetAvgDollarVolume(self, security, time, lookback):
volhistory = self.History(security, time - timedelta(days = lookback), time, Resolution.Daily)
dollarvolumes = [day[1].close * day[1].volume for day in volhistory.iterrows()]
return sum(dollarvolumes)/len(dollarvolumes)
#region imports
from AlgorithmImports import *
#endregion
import datetime
import pandas as pd
import ht_auth
class ModulatedHorizontalAutosequencers(QCAlgorithm):
def Initialize(self):
ht_auth.SetToken(self.GetParameter("mlfinlab-api-key"))
import mlfinlab as ml
self.ml = ml
self.SetStartDate(2019, 1, 18) # Set Start Date
self.SetEndDate(2019, 1, 22)
self.SetCash(100000) # Set Strategy Cash
self.spy = self.AddEquity("SPY", Resolution.Tick).Symbol
self.lookback = 10000
self.batch_size=1000000
self.lastsample = datetime.datetime.min
self.initialisation = True
self.runningtotal = 0
def OnData(self, data):
if data:
if self.initialisation:
self.dollarhistory = pd.DataFrame()
start = data.Time - timedelta(days = 5)
end = data.Time
self.Debug("Initialising. Adding history from "+str(start)+" to "+str(end))
self.threshold = self.GetAvgDollarVolume(self.spy, data.Time, 5) / 50
history = self.History(self.spy,
start,
end,
Resolution.Tick)
history = history[["lastprice", "quantity"]]
history = history.loc[self.spy]
self.dollarhistory = pd.concat([self.dollarhistory, self.Ticks_to_Dollars(history, self.threshold, self.batch_size)])
start += timedelta(days = 5)
end += timedelta(days = 5)
self.Debug("Initialising. Dollar History with "+str(len(self.dollarhistory))+" bars ")
self.initialisation = False
else:
if self.lastsample == datetime.datetime.min:
self.lastsample = data.Time
if data.ContainsKey(self.spy):
dollarvolumes = [tick.LastPrice * tick.Quantity for tick in data[self.spy]]
self.runningtotal += sum(dollarvolumes)
if self.runningtotal > self.threshold and data.Time > self.lastsample:
history = self.History(self.spy,
self.lastsample,
data.Time,
Resolution.Tick)
history = history[["lastprice", "quantity"]]
history = history.loc[self.spy]
nextdollarbar = self.Ticks_to_Dollars(history, self.threshold, self.batch_size)
self.dollarhistory = pd.concat([self.dollarhistory, nextdollarbar]).drop_duplicates().reset_index(drop=True).iloc[-self.lookback:]
self.runningtotal =0
self.lastsample = data.Time
self.threshold = self.GetAvgDollarVolume(self.spy, data.Time, 5) / 50
self.Debug(str(data.Time)+" New Dollar Bar. total bars in history: "+str(len(self.dollarhistory))+" new threshold: "+str(self.threshold))
def Ticks_to_Dollars(self, ticks, threshold, batch_size):
df = pd.DataFrame()
df["date_time"] = ticks.index.values
df["price"] = ticks.lastprice.values
df["volume"] = ticks.quantity.values
return self.ml.data_structures.get_dollar_bars(df,
threshold = threshold,
batch_size = batch_size,
verbose = False)
def GetAvgDollarVolume(self, security, time, lookback):
volhistory = self.History(security, time - timedelta(days = lookback), time, Resolution.Daily)
dollarvolumes = [day[1].close * day[1].volume for day in volhistory.iterrows()]
return sum(dollarvolumes)/len(dollarvolumes)