| 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 0.557 Tracking Error 0.202 Treynor Ratio 0 Total Fees $0.00 Estimated Strategy Capacity $0 Lowest Capacity Asset |
#region imports
from AlgorithmImports import *
#endregion
from trSum import trSum
class trSumIndicator(QCAlgorithm):
def Initialize(self):
self.SetStartDate(2022, 1, 1) # Set Start Date
self.SetEndDate(2023, 1, 1) # Set Start Date
self.SetCash(100000) # Set Strategy Cash
self.resolution = Resolution.Daily
self.period = 10
self.sym = self.AddEquity("SPY", self.resolution).Symbol
self.trSum = trSum("trSum", self.period)
self.RegisterIndicator(self.sym, self.trSum, self.resolution)
self.SetWarmUp(20)
def OnData(self, data):
if not [self.trSum.IsReady]:
return
if self.IsWarmingUp:
return
self.Plot("trSum", "Value", self.trSum.Current.Value)
#region imports
from AlgorithmImports import *
#endregion
import numpy as np
class trSum(PythonIndicator):
def __init__(self, name, length):
self.Name = name
self.Length = length
self.highs = RollingWindow[float](length)
self.lows = RollingWindow[float](length)
self.closes = RollingWindow[float](length)
self.true_ranges = RollingWindow[float](length)
self.Value = 0
def Update(self, input):
self.highs.Add(input.High)
self.lows.Add(input.Low)
self.closes.Add(input.Close)
if not (self.highs.IsReady and self.lows.IsReady and self.closes.IsReady):
return False
self.true_ranges.Add(self.TrueRange(self.highs[0], self.lows[0], self.closes[1]))
if not self.true_ranges.IsReady:
return False
self.Value = sum(list(self.true_ranges)[0:self.Length])
return True
def TrueRange(self, high, low, close):
return max(high - low, abs(high - self.closes[1]), abs(low - self.closes[1]))