Overall Statistics |
Total Trades 893 Average Win 0.40% Average Loss -0.23% Compounding Annual Return -16.424% Drawdown 28.800% Expectancy -0.154 Net Profit -16.464% Sharpe Ratio -0.63 Probabilistic Sharpe Ratio 2.767% Loss Rate 69% Win Rate 31% Profit-Loss Ratio 1.77 Alpha -0.12 Beta 0.073 Annual Standard Deviation 0.166 Annual Variance 0.028 Information Ratio -1.652 Tracking Error 0.192 Treynor Ratio -1.429 Total Fees $2287.48 |
from QuantConnect.Data.Custom.Tiingo import * class ParticleTachyonReplicator(QCAlgorithm): def Initialize(self): self.SetStartDate(2019, 1, 1) # Set Start Date self.SetEndDate(2020, 1, 1) # Set Start Date self.SetCash(100000) # Set Strategy Cash self.AddUniverseSelection( FineFundamentalUniverseSelectionModel(self.SelectCoarse, self.SelectFine) ) self.AddAlpha(KeywordNewsAlpha()) self.SetPortfolioConstruction(InsightWeightingPortfolioConstructionModel()) # Each news piece with the keywords increases the weight self.SetExecution(ImmediateExecutionModel()) self.UniverseSettings.Resolution = Resolution.Daily def SelectCoarse(self, coarse): return [c.Symbol for c in coarse if c.DollarVolume > 1e8] def SelectFine(self, fine): return [f.Symbol for f in fine if f.AssetClassification.MorningstarSectorCode == MorningstarSectorCode.Technology] class KeywordNewsAlpha: def __init__(self): self.keywords = {'privacy concern', 'compromised', 'vulnerability', 'security flaw'} self.alt_data_symbols = {} def Update(self, algorithm, slice): insights = [] tiingo_news = slice.Get(TiingoNews) for t in tiingo_news.Values: if [w for w in self.keywords if w in t.Title.strip().lower()]: # Examples of phrases in the title for symbol in t.Symbols: # Tagged securities if symbol in algorithm.ActiveSecurities.Keys: # In our universe insights.append(Insight.Price(symbol, timedelta(3), InsightDirection.Down,None,None,None,1)) # Increment short weight for stock return insights def OnSecuritiesChanged(self, algorithm, changes): for added in changes.AddedSecurities: self.alt_data_symbols[added.Symbol] = algorithm.AddData(TiingoNews, added.Symbol).Symbol for removed in changes.RemovedSecurities: symbol = self.alt_data_symbols.pop(removed.Symbol, None) if symbol: algorithm.RemoveSecurity(removed.Symbol)