| Overall Statistics |
|
Total Trades 810 Average Win 0.36% Average Loss -0.36% Compounding Annual Return -8.205% Drawdown 20.000% Expectancy -0.018 Net Profit -4.178% Sharpe Ratio -0.048 Probabilistic Sharpe Ratio 19.036% Loss Rate 51% Win Rate 49% Profit-Loss Ratio 0.99 Alpha -0.206 Beta 0.822 Annual Standard Deviation 0.311 Annual Variance 0.097 Information Ratio -0.832 Tracking Error 0.298 Treynor Ratio -0.018 Total Fees $1299.13 Estimated Strategy Capacity $52000000.00 Lowest Capacity Asset AEMD W25U9A0OOMLH Portfolio Turnover 44.02% |
from AlgorithmImports import *
class MorningStarDataAlgorithm(QCAlgorithm):
def Initialize(self) -> None:
self.SetStartDate(2021, 1, 1)
self.SetEndDate(2021, 7, 1)
self.SetCash(100000)
# Requesting data
self.AddUniverse(self.FundamentalSelectionFunction)
self.num_coarse_symbols = 100
self.num_fine_symbols = 10
self.UniverseSettings.Resolution = Resolution.Daily
def FundamentalSelectionFunction(self, fundamental: List[Fundamental]) -> List[Symbol]:
selected = [f for f in fundamental if f.HasFundamentalData and f.Price > 1]
sorted_by_dollar_volume = sorted(selected, key=lambda f: f.DollarVolume, reverse=True)[:self.num_coarse_symbols]
sorted_by_pe_ratio = sorted(sorted_by_dollar_volume, key=lambda f: f.ValuationRatios.PERatio, reverse=False)[:self.num_fine_symbols]
return [ f.Symbol for f in sorted_by_pe_ratio ]
def OnData(self, slice: Slice) -> None:
# if we have no changes, do nothing
if self._changes is None: return
# liquidate removed securities
for security in self._changes.RemovedSecurities:
if security.Invested:
self.Liquidate(security.Symbol)
# we want 1/N allocation in each security in our universe
for security in self._changes.AddedSecurities:
self.SetHoldings(security.Symbol, 1 / self.num_fine_symbols)
self._changes = None
def OnSecuritiesChanged(self, changes: SecurityChanges) -> None:
self._changes = changes
for security in changes.AddedSecurities:
# Historical data
history = self.History(security.Symbol, 7, Resolution.Daily)
self.Debug(f"We got {len(history)} from our history request for {security.Symbol}")