Overall Statistics
Total Orders
0
Average Win
0%
Average Loss
0%
Compounding Annual Return
0%
Drawdown
0%
Expectancy
0
Start Equity
100000
End Equity
100000
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
-19.619
Tracking Error
0.104
Treynor Ratio
0
Total Fees
$0.00
Estimated Strategy Capacity
$0
Lowest Capacity Asset
Portfolio Turnover
0%
from AlgorithmImports import *
from universe import CustomUniverseSelectionModel
from datetime import timedelta


class FT1UniverseSelection(QCAlgorithm):
    def initialize(self):
        self.set_start_date(2020, 2, 1)
        self.set_end_date(2020, 2, 10)
        self.set_cash(100000)

        # Set custom universe
        self.universe_settings.schedule.on(self.date_rules.week_end())
        self.set_universe_selection(CustomUniverseSelectionModel())

        self.set_alpha(ConstantAlphaModel(InsightType.PRICE, InsightDirection.UP, timedelta(5)))

        self.set_portfolio_construction(EqualWeightingPortfolioConstructionModel())

        self.set_risk_management(NullRiskManagementModel())

        self.set_execution(NullExecutionModel())
from AlgorithmImports import *
import numpy as np
from Selection.FundamentalUniverseSelectionModel import FundamentalUniverseSelectionModel


class CustomUniverseSelectionModel(FundamentalUniverseSelectionModel):
    def __init__(self):
        super().__init__()

        self.number_of_symbols = 5

    def select(self, algorithm: QCAlgorithm, fundamental: [Fundamental]) -> [Symbol]:
        algorithm.log(f"Updating Universe on {algorithm.time}")

        filtered_symbols = [
            f
            for f in fundamental
            if f.has_fundamental_data
            and f.OperationRatios.ROE.HasValue
            and f.OperationRatios.ROE.Value > 0.10
        ]

        # Sort by top in market cap, and select the top number_of_symbols
        sorted_by_market_cap = sorted(
            filtered_symbols,
            key=lambda c: c.MarketCap,
            reverse=True,
        )[: self.number_of_symbols]

        # Log selected symbols
        algorithm.log("*" * 30)
        algorithm.log("Standard Fundamental Data")
        for index, f in enumerate(sorted_by_market_cap):
            algorithm.log(
                f"DATE: {algorithm.time} SYMBOL: {f.symbol.value}, ROE: {f.operation_ratios.roe.value} DividendPerShare: {f.earning_reports.dividend_per_share.value}"
            )

        return []