| Overall Statistics |
|
Total Trades 575 Average Win 0.18% Average Loss -0.13% Compounding Annual Return 24.407% Drawdown 16.300% Expectancy 0.269 Net Profit 11.970% Sharpe Ratio 0.843 Probabilistic Sharpe Ratio 42.038% Loss Rate 47% Win Rate 53% Profit-Loss Ratio 1.42 Alpha -0.159 Beta 1.555 Annual Standard Deviation 0.231 Annual Variance 0.053 Information Ratio -0.199 Tracking Error 0.166 Treynor Ratio 0.125 Total Fees $722.35 Estimated Strategy Capacity $130000000.00 Lowest Capacity Asset KO R735QTJ8XC9X |
# region imports
from AlgorithmImports import *
# endregion
class BrainMLRankingDataAlgorithm(QCAlgorithm):
def Initialize(self) -> None:
self.SetStartDate(2021, 1, 1)
self.SetEndDate(2021, 7, 8)
self.SetCash(100000)
tickers = ["AAPL", "TSLA", "MSFT", "F", "KO"]
self.symbol_by_dataset_symbol = {}
for ticker in tickers:
# Requesting data
symbol = self.AddEquity(ticker, Resolution.Daily).Symbol
dataset_symbol = self.AddData(BrainStockRanking2Day, symbol).Symbol
self.symbol_by_dataset_symbol[dataset_symbol] = symbol
# Historical data
history = self.History(dataset_symbol, 365, Resolution.Daily)
self.Debug(f"We got {len(history)} items from our history request for {symbol}")
def OnData(self, slice: Slice) -> None:
# Collect rankings for all symbols
points = slice.Get(BrainStockRanking2Day)
if points is None:
return
symbols = []
ranks = []
for point in points.Values:
symbols.append(self.symbol_by_dataset_symbol[point.Symbol])
ranks.append(point.Rank)
# Rank each symbol's Brain ML ranking relative to each other
if len(ranks) == 0:
return
ranks = [sorted(ranks).index(rank) + 1 for rank in ranks]
# Place orders
for i, rank in enumerate(ranks):
weight = rank / sum(ranks)
self.SetHoldings(symbols[i], weight)