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.366
Tracking Error
0.117
Treynor Ratio
0
Total Fees
$0.00
Estimated Strategy Capacity
$0
Lowest Capacity Asset
Portfolio Turnover
0%
from AlgorithmImports import *
import pandas as pd

import os
from QuantConnect import Globals


class Testlocal(QCAlgorithm):
    def Initialize(self):
        self.SetStartDate(2019, 9, 19)  # Will be ignored in live trading
        self.SetEndDate(2019, 10, 20)  # Will be ignored in live trading
        self.SetWarmup(20)
        self.SetCash(100000)  # Will be ignored in live trading
        self.fundamentals_dict = {}

        self.UniverseSettings.Resolution = Resolution.Daily
        self.tickers = ["MSFT", "AEP", "CAT"]

        self.SetBenchmark("SPY")
        self.AddUniverseSelection(FineFundamentalUniverseSelectionModel(self.CoarseFilter, self.FineFilter)) 
        self.Schedule.On(self.DateRules.MonthStart(0), self.TimeRules.Midnight, self.Trade)
    
    def CoarseFilter(self, coarse):
        usEquities = [c for c in coarse if (c.Symbol.ID.Market.lower() == "usa") and (c.Symbol.SecurityType == SecurityType.Equity) and c.HasFundamentalData and (c.Symbol.Value in self.tickers)]

        return [c.Symbol for c in usEquities]

    def FineFilter(self, fine):
        self.fundamentals_dict = {}
        for f in fine:
            self.fundamentals_dict[f.Symbol.Value] = f.ValuationRatios.PERatio
        return [f.Symbol for f in fine]

    def OnSecuritiesChanged(self, changes):
        for security in changes.RemovedSecurities:
            self.RemoveSecurity(security.Symbol)
       
        for security in changes.AddedSecurities:
            self.AddEquity(security.Symbol, Resolution.Daily)

    def OnWarmupFinished(self):
        self.Debug("Warmed Up")
        self.Trade()

    def Trade(self):
        # Triggered by time event
        current_portfolio = [(sec.Symbol.Value,sec.Quantity) for sec in self.Portfolio.Values if sec.Quantity>0]
        self.Debug(f"Current Portfolio:{current_portfolio}")
        flag = "BAC" in list(self.fundamentals_dict.keys()) 
        self.Debug(f"Dict contains BAC {flag}")
        # self.Debug([elem.Value for elem in list(self.ActiveSecurities.Keys)])
        df = self.History(list(self.fundamentals_dict.keys()), 5, resolution=Resolution.Daily)
        self.Debug(f"Shape of hist {df.shape}")


    def OnData(self, data):
        """OnData event is the primary entry point for your algorithm. Each new data point will be pumped in here.
            Arguments:
                data: Slice object keyed by symbol containing the stock data
        """
        self.Trade()