Overall Statistics |
Total Trades 21 Average Win 0.74% Average Loss -2.67% Compounding Annual Return 57.622% Drawdown 31.300% Expectancy -0.233 Net Profit 214.833% Sharpe Ratio 1.661 Probabilistic Sharpe Ratio 71.855% Loss Rate 40% Win Rate 60% Profit-Loss Ratio 0.28 Alpha 0.606 Beta -0.323 Annual Standard Deviation 0.319 Annual Variance 0.101 Information Ratio 0.697 Tracking Error 0.418 Treynor Ratio -1.639 Total Fees $247.84 Estimated Strategy Capacity $170000000.00 Lowest Capacity Asset AAPL R735QTJ8XC9X |
from QuantConnect.DataSource import * class BrainSentimentDataAlgorithm(QCAlgorithm): latest_sentiment_value = None target_holdings = 0 def Initialize(self): self.SetStartDate(2019, 1, 1) self.SetEndDate(2021, 7, 8) self.SetCash(100000) # Requesting data self.symbol = self.AddEquity("AAPL", Resolution.Daily).Symbol self.dataset_symbol = self.AddData(BrainSentimentIndicator30Day, self.symbol).Symbol # Historical data history = self.History(self.dataset_symbol, 100, Resolution.Daily) self.Debug(f"We got {len(history)} items from our history request for {self.dataset_symbol}") if history.empty: return # Warm up historical sentiment values previous_sentiment_values = history.loc[self.dataset_symbol].sentiment.values for sentiment in previous_sentiment_values: self.update(sentiment) def update(self, sentiment): if self.latest_sentiment_value is not None: self.target_holdings = int(sentiment > self.latest_sentiment_value) self.latest_sentiment_value = sentiment def OnData(self, data): if data.ContainsKey(self.dataset_symbol): sentiment = data[self.dataset_symbol].Sentiment self.update(sentiment) # Ensure we have security data in the current slice if not (data.ContainsKey(self.symbol) and data[self.symbol] is not None): return if self.target_holdings != self.Portfolio.Invested: self.SetHoldings(self.symbol, self.target_holdings)