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) spy = self.AddEquity("SPY", Resolution.Daily).Symbol self.custom = My_Custom('My_Custom', spy, 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: def __init__(self, name, symbol, period): self.symbol = symbol 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) self.IsReady = False # Update method is mandatory def Update(self, input): return self.Update2(input.Time, input.Close) def Update2(self, time, value): self.queue.appendleft(value) count = len(self.queue) self.Time = time self.IsReady = count == self.queue.maxlen #### start here the indicator calulation if self.IsReady: 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 self.IsReady def Warmup(self,history): for index, row in history.loc[self.symbol].iterrows(): self.Update2(index, row['close'])