| Overall Statistics |
|
Total Orders 42 Average Win 0.53% Average Loss -0.20% Compounding Annual Return -1.238% Drawdown 4.400% Expectancy -0.611 Start Equity 100000 End Equity 97536.62 Net Profit -2.463% Sharpe Ratio -1.882 Sortino Ratio -1.346 Probabilistic Sharpe Ratio 0.189% Loss Rate 89% Win Rate 11% Profit-Loss Ratio 2.63 Alpha -0.023 Beta -0.017 Annual Standard Deviation 0.014 Annual Variance 0 Information Ratio -0.929 Tracking Error 0.214 Treynor Ratio 1.47 Total Fees $43.92 Estimated Strategy Capacity $180000000.00 Lowest Capacity Asset ZM X3RPXTZRW09X Portfolio Turnover 0.39% |
from AlgorithmImports import *
from QuantConnect.DataSource import *
class ExtractAlphaEstimizeAlgorithm(QCAlgorithm):
def initialize(self) -> None:
self.set_start_date(2019, 1, 1)
self.set_end_date(2020, 12, 31)
self.set_cash(100000)
self.last_time = datetime.min
self.add_universe(self.my_coarse_filter_function)
self.universe_settings.resolution = Resolution.MINUTE
def my_coarse_filter_function(self, coarse: List[CoarseFundamental]) -> List[Symbol]:
sorted_by_dollar_volume = sorted([x for x in coarse if x.has_fundamental_data and x.price > 4],
key=lambda x: x.dollar_volume, reverse=True)
selected = [x.symbol for x in sorted_by_dollar_volume[:500]]
return selected
def on_data(self, slice: Slice) -> None:
if self.last_time > self.time: return
# Accessing Data
consensus = slice.Get(EstimizeConsensus)
estimate = slice.Get(EstimizeEstimate)
release = slice.Get(EstimizeRelease)
if not estimate: return
sorted_by_eps_estimate = sorted([x for x in estimate.items() if x[1].eps], key=lambda x: x[1].eps)
long_symbols = [x[0].underlying for x in sorted_by_eps_estimate[-10:]]
short_symbols = [x[0].underlying for x in sorted_by_eps_estimate[:10]]
for symbol in [x.symbol for x in self.portfolio.Values if x.invested]:
if symbol not in long_symbols + short_symbols:
self.liquidate(symbol)
long_targets = [PortfolioTarget(symbol, 0.05) for symbol in long_symbols]
short_targets = [PortfolioTarget(symbol, -0.05) for symbol in short_symbols]
self.set_holdings(long_targets + short_targets)
self.last_time = Expiry.END_OF_MONTH(self.time)
def on_securities_changed(self, changes: SecurityChanges) -> None:
for security in changes.added_securities:
# Requesting Data
estimize_consensus_symbol = self.add_data(EstimizeConsensus, security.symbol).symbol
estimize_estimate_symbol = self.add_data(EstimizeEstimate, security.symbol).symbol
estimize_release_symbol = self.add_data(EstimizeRelease, security.symbol).symbol
# Historical Data
history = self.history([estimize_consensus_symbol,
estimize_estimate_symbol,
estimize_release_symbol
], 10, Resolution.DAILY)
self.debug(f"We got {len(history)} items from our history request")