| 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 Sortino 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.487 Tracking Error 0.147 Treynor Ratio 0 Total Fees $0.00 Estimated Strategy Capacity $0 Lowest Capacity Asset Portfolio Turnover 0% |
from AlgorithmImports import *
from QuantConnect.DataSource import *
import numpy as np
import math
class ETFConstituentsDataAlgorithm(QCAlgorithm):
def Initialize(self) -> None:
self.SetStartDate(2021, 1, 1)
self.SetEndDate(2023, 12, 10)
self.SetCash(100000)
res = Resolution.Daily
self.SetWarmup(1000)
self.symbol = self.AddEquity("PEP",res).Symbol
self.PBRatio_window = RollingWindow[float](1000)
self.Schedule.On(self.DateRules.MonthStart("PEP"),
self.TimeRules.AfterMarketOpen("PEP",30),
self.Rebalance)
def Rebalance(self) -> None:
if self.PBRatio_window.IsReady and not self.IsWarmingUp:
self.Log(f"{self.Time} Mean PBRatio: {sum([x for x in self.PBRatio_window]) / self.PBRatio_window.Count} ------ LastPBRatio: {[x for x in self.PBRatio_window][0]}")
def OnData(self, slice):
if slice is None or slice[self.symbol] is None:
return
close_price = slice[self.symbol].Close
book_value = self.Securities[self.symbol].Fundamentals.ValuationRatios.BookValuePerShare
if not math.isnan(close_price/book_value): # check for nan values
self.PBRatio_window.Add(close_price/book_value)