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 -2.268 Tracking Error 0.113 Treynor Ratio 0 Total Fees $0.00 |
from collections import deque from datetime import datetime, timedelta from numpy import sum import numpy as np from scipy import stats ### Demonstrates how to create a custom indicator and register it for automatic updated class CustomIndicatorAlgorithm(QCAlgorithm): def Initialize(self): self.SetStartDate(2019,1,1) self.SetEndDate(2019,12,31) self.AddEquity("SPY", Resolution.Daily) self.custom = My_Custom('My_Custom', 100) self.RegisterIndicator("SPY", self.custom, Resolution.Daily) history = self.History("SPY", 100, Resolution.Daily) self.custom.Warmup(history) def OnData(self, data): self.Plot("My_Custom_Slope", "Slope", self.custom.Slope) self.Plot("My_Custom_Intercept", "Intercept", self.custom.Intercept) self.Plot("My_Custom_R_value", "R_value", self.custom.R_value) #self.Plot("My_Custom_P_value", "P_value", self.custom.P_value) #self.Plot("My_Custom_Std_err", "Std_err ", self.custom.Std_err ) # Python implementation of Custom Indicator class My_Custom(PythonIndicator): def __init__(self, name, period): self.Name = name self.Time = datetime.min self.Value = 0 self.Slope = 0 self.Intercept = 0 self.R_value = 0 self.P_value = 0 self.Std_err = 0 self.queue = deque(maxlen=period) # Update method is mandatory def Update(self, input): self.queue.appendleft(input.Close) count = len(self.queue) self.Time = input.EndTime #### start here the indicator calulation if count == self.queue.maxlen: y = np.log(self.queue) x = [range(len(y))] slope, intercept, r_value, p_value, std_err = stats.linregress(x, y) self.Slope = slope * 10000 # value is very small an will display 0 if not multiplyed self.Intercept = intercept self.R_value = r_value * 10 self.P_value = p_value self.Std_err = std_err #### finish the custom indicator return count == self.queue.maxlen def Warmup(self,history): if self.Name not in history: return for index, row in history.loc[self.Name].iterrows(): self.Close=row["close"] self.queue.Add(row["close"]) self.Time=index