Overall Statistics
Total Trades
152
Average Win
0.62%
Average Loss
-0.42%
Compounding Annual Return
6.780%
Drawdown
5.400%
Expectancy
0.208
Net Profit
12.757%
Sharpe Ratio
0.76
Probabilistic Sharpe Ratio
33.668%
Loss Rate
51%
Win Rate
49%
Profit-Loss Ratio
1.47
Alpha
0.047
Beta
0.121
Annual Standard Deviation
0.064
Annual Variance
0.004
Information Ratio
0.261
Tracking Error
0.134
Treynor Ratio
0.401
Total Fees
$465.18
Estimated Strategy Capacity
$120000000.00
Lowest Capacity Asset
XLV RGRPZX100F39
Portfolio Turnover
15.46%
# region imports
from AlgorithmImports import *
# endregion

class HipsterFluorescentPinkMule(QCAlgorithm):

    def Initialize(self):
        self.SetStartDate(2021, 9, 1)  # Set Start Date
        self.SetEndDate(2023, 7, 1)
        self.SetCash(100000)  # Set Strategy Cash
        self.symbol = self.AddEquity("XLV", Resolution.Daily).Symbol
        self.Settings.FreePortfolioValuePercentage = 0.25
        self.dataset_symbol = self.AddData(RegalyticsRegulatoryArticles, "REG").Symbol
        self.SetBenchmark(self.symbol)

    def OnData(self, slice: Slice) -> None:
        # Parse articles
        if not slice.ContainsKey(self.dataset_symbol):
            return
        fda_news = False
        articles = slice[self.dataset_symbol]
        for article in articles:
            if "FDA" in article.Title:
                fda_news = True
                self.last_fda_news = self.Time
        if fda_news and not self.Portfolio[self.symbol].IsLong:
            self.SetHoldings(self.symbol, 1)
        elif not fda_news and not self.Portfolio[self.symbol].IsShort:
            self.SetHoldings(self.symbol, -0.25)