| 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 -1.769 Tracking Error 0.183 Treynor Ratio 0 Total Fees $0.00 |
from Selection.FundamentalUniverseSelectionModel import FundamentalUniverseSelectionModel
import pandas as pd
class MultidimensionalDynamicProcessor(QCAlgorithm):
def Initialize(self):
self.SetStartDate(2020, 5, 2) # Set Start Date
self.SetCash(100000) # Set Strategy Cash
self.SetUniverseSelection(LiquidValueUniverseSelectionModel())
class LiquidValueUniverseSelectionModel(FundamentalUniverseSelectionModel):
def __init__(self):
self.lastWeek = -1
self.called = 0
super().__init__(True)
def SelectCoarse(self, algorithm, coarse):
if not algorithm.Time.day % 7 == 0:
return Universe.Unchanged
sortedByDollarVolume = sorted([x for x in coarse if x.HasFundamentalData],
key=lambda x: x.DollarVolume, reverse=True)
return [x.Symbol for x in sortedByDollarVolume[:100]]
def SelectFine(self, algorithm, fine):
if not algorithm.Time.day % 7 == 0:
return Universe.Unchanged
factors_by_security_id = pd.DataFrame()
for f in fine:
factors_by_security_id.loc[str(f.Symbol), 'cash_return'] = f.ValuationRatios.CashReturn
factors_by_security_id.loc[str(f.Symbol), 'earnings_yield'] = f.ValuationRatios.EarningYield
universe = factors_by_security_id.rank().sum(axis=1).sort_values().index[-10:]
return [algorithm.Symbol(security_identifier) for security_identifier in universe]