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
-3.097
Tracking Error
0.09
Treynor Ratio
0
Total Fees
$0.00
Estimated Strategy Capacity
$0
Lowest Capacity Asset
# Custom Average Dollar Volume Indicator

import numpy as np

# -------------------------------------------------------------------
SMA = 63;
# -------------------------------------------------------------------

class CustomIndicatorAlgorithm(QCAlgorithm):
    
    def Initialize(self):
        self.SetStartDate(2021, 7, 1)  
        self.SetCash(1000000)
        
        self.AddUniverse(self.CoarseUniverseSelection)
        self.adv = {}
        
    def CoarseUniverseSelection(self, coarse):
        sortedByDollarVolume = sorted(coarse, key=lambda x: x.DollarVolume, reverse=True)[:100]
        
        for sec in sortedByDollarVolume:
            if sec not in self.adv:
                # initiate a new instance of the class
                self.adv[sec.Symbol] = AverageDollarVolume(SMA)
            
                # warm up
                history = self.History(sec.Symbol, SMA, Resolution.Daily)
                for index, bar in history.loc[sec.Symbol].iloc[:-1].iterrows():     # leave the last row
                    self.adv[sec.Symbol].Update(bar.close, bar.volume)
            
            # Update with newest dollar volume
            self.adv[sec.Symbol].Update(sec.AdjustedPrice, sec.Volume)
        
        # Sort by SMA of dollar volume
        sortedBySMADV = sorted(self.adv.items(), key=lambda x: x[1].Value, reverse=True)[:10]
        # Get Symbol object (the key of dict)
        self.filtered = [x[0] for x in sortedBySMADV]
        
        return self.filtered

    def OnEndOfDay(self, symbol):
        if self.IsWarmingUp or not any(self.adv): return
        
        self.Plot("Indicator", symbol, float(self.adv[symbol].Value))
        
            
class AverageDollarVolume(PythonIndicator):  # Average Dollar Volume
    def __init__(self, SMA ):
        self.dv = np.array([])
        self.Value = 0
    
    def Update(self, price, volume):
        dv = (price * volume)
        self.dv = np.append(self.dv, dv)[-SMA:]

        if len(self.dv) != SMA:
            return False
        
        self.Value = self.dv.mean()
        return True