| 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)