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)