Overall Statistics |
Total Orders 4314 Average Win 0.09% Average Loss -0.09% Compounding Annual Return -7.608% Drawdown 12.500% Expectancy -0.038 Start Equity 100000 End Equity 92392.33 Net Profit -7.608% Sharpe Ratio -1.307 Sortino Ratio -1.701 Probabilistic Sharpe Ratio 1.396% Loss Rate 52% Win Rate 48% Profit-Loss Ratio 1.00 Alpha -0.069 Beta -0.057 Annual Standard Deviation 0.061 Annual Variance 0.004 Information Ratio -2.108 Tracking Error 0.126 Treynor Ratio 1.395 Total Fees $4649.60 Estimated Strategy Capacity $6600000.00 Lowest Capacity Asset AVGO UEW4IOBWVPT1 Portfolio Turnover 55.30% |
from AlgorithmImports import * from QuantConnect.DataSource import * class ExtractAlphaCrossAssetModelAlgorithm(QCAlgorithm): def initialize(self) -> None: self.set_start_date(2019, 1, 1) self.set_end_date(2019, 12, 31) self.set_cash(100000) self.last_time = datetime.min self.add_universe(self.my_coarse_filter_function) self.dataset_symbol_by_symbol = {} self.points = {} 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[:100]] return selected def on_data(self, slice: Slice) -> None: if self.last_time > self.time: return # Accessing Data points = slice.Get(ExtractAlphaCrossAssetModel) if points: self.points = points if slice.time.time() < time(10): return sorted_by_score = sorted([x for x in self.points.items() if x[1].score != None], key=lambda x: x[1].score, reverse=True) long_symbols = [x[0].underlying for x in sorted_by_score[:10]] short_symbols = [x[0].underlying for x in sorted_by_score[-10:]] portfolio_targets = [] for symbol, security_holding in self.portfolio.items(): weight = 0 if symbol in long_symbols: weight = 0.05 elif symbol in short_symbols: weight = -0.05 elif not security_holding.invested: continue portfolio_targets.append(PortfolioTarget(symbol, weight)) self.set_holdings(portfolio_targets) self.last_time = Expiry.END_OF_DAY(self.time) def on_securities_changed(self, changes: SecurityChanges) -> None: for security in changes.added_securities: # Requesting data self.dataset_symbol_by_symbol[security.symbol] = self.add_data(ExtractAlphaCrossAssetModel, security.symbol).symbol for security in changes.removed_securities: dataset_symbol = self.dataset_symbol_by_symbol.pop(security.symbol, None) if dataset_symbol: self.remove_security(dataset_symbol)