| Overall Statistics |
|
Total Trades 87 Average Win 2.11% Average Loss -2.68% Compounding Annual Return -22.050% Drawdown 40.000% Expectancy -0.149 Net Profit -11.678% Sharpe Ratio 0.038 Probabilistic Sharpe Ratio 20.722% Loss Rate 52% Win Rate 48% Profit-Loss Ratio 0.79 Alpha -0.213 Beta 1.01 Annual Standard Deviation 0.645 Annual Variance 0.416 Information Ratio -0.332 Tracking Error 0.635 Treynor Ratio 0.024 Total Fees $160.12 Estimated Strategy Capacity $85000000.00 Lowest Capacity Asset TSLA UNU3P8Y3WFAD |
from AlgorithmImports import *
class USCoarseUniverseConstituentsDataAlgorithm(QCAlgorithm):
_number_of_symbols = 3
_changes = None
def Initialize(self):
self.SetStartDate(2021, 1, 1)
self.SetEndDate(2021, 7, 1)
self.SetCash(100000)
# Requesting data
self.AddUniverse(self.CoarseSelectionFunction)
def CoarseSelectionFunction(self, coarse):
sortedByDollarVolume = sorted(coarse, key=lambda x: x.DollarVolume, reverse=True)
return [ x.Symbol for x in sortedByDollarVolume[:self._number_of_symbols] ]
def OnData(self, data):
# 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._number_of_symbols)
self._changes = None
def OnSecuritiesChanged(self, changes):
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}")