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.276
Tracking Error
0.091
Treynor Ratio
0
Total Fees
$0.00
class VerticalParticleReplicator(QCAlgorithm):

    def Initialize(self):
        self.SetStartDate(2020, 1, 5) 
        self.SetEndDate(2020, 1, 30)
        self.SetCash(100000)
        
        self.SetUniverseSelection(FineFundamentalUniverseSelectionModel(self.CoarseSelectionFunction, self.FineSelectionFunction, None, None))
        self.UniverseSettings.Resolution = Resolution.Daily
        
        self.AddAlpha(MyAlphaModel())
        
        self.SetPortfolioConstruction(MyPortfolioConstructionModel())
        
        self.SetExecution(ImmediateExecutionModel())

    def CoarseSelectionFunction(self, coarse):
        sortedByDollarVolume = sorted(coarse, key=lambda x: x.DollarVolume, reverse=True)
        return [ x.Symbol for x in sortedByDollarVolume[:1] ]
    
    def FineSelectionFunction(self, fine):
        return [f.Symbol for f in fine]


class MyAlphaModel(AlphaModel):
    Name = "MyAlphaModel_Name"
    symbol = None
    
    def Update(self, algorithm, slice):
        if self.symbol is not None:
            return [Insight.Price(self.symbol, timedelta(days=100), InsightDirection.Up)]
        return []
        
    def OnSecuritiesChanged(self, algorithm, changes):
        for security in changes.AddedSecurities:
            self.symbol = security.Symbol

class MyPortfolioConstructionModel(PortfolioConstructionModel):
    def CreateTargets(self, algorithm, insights):
        for insight in insights:
            algorithm.Log(f"Alpha Model Name: {insight.SourceModel}")
        return []