| Overall Statistics |
|
Total Orders 591 Average Win 0.18% Average Loss -0.12% Compounding Annual Return 24.321% Drawdown 16.300% Expectancy 0.273 Net Profit 11.929% Sharpe Ratio 0.829 Sortino Ratio 1.11 Probabilistic Sharpe Ratio 41.960% Loss Rate 48% Win Rate 52% Profit-Loss Ratio 1.47 Alpha -0.159 Beta 1.556 Annual Standard Deviation 0.231 Annual Variance 0.053 Information Ratio -0.202 Tracking Error 0.166 Treynor Ratio 0.123 Total Fees $750.58 Estimated Strategy Capacity $120000000.00 Lowest Capacity Asset KO R735QTJ8XC9X Portfolio Turnover 11.81% |
#region imports
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Globalization;
using System.Drawing;
using QuantConnect;
using System.Text.RegularExpressions;
using QuantConnect.Algorithm.Framework;
using QuantConnect.Algorithm.Framework.Selection;
using QuantConnect.Algorithm.Framework.Alphas;
using QuantConnect.Algorithm.Framework.Portfolio;
using QuantConnect.Algorithm.Framework.Execution;
using QuantConnect.Algorithm.Framework.Risk;
using QuantConnect.Algorithm.Selection;
using QuantConnect.Parameters;
using QuantConnect.Benchmarks;
using QuantConnect.Brokerages;
using QuantConnect.Util;
using QuantConnect.Interfaces;
using QuantConnect.Algorithm;
using QuantConnect.Indicators;
using QuantConnect.Data;
using QuantConnect.Data.Consolidators;
using QuantConnect.Data.Custom;
using QuantConnect.DataSource;
using QuantConnect.Data.Fundamental;
using QuantConnect.Data.Market;
using QuantConnect.Data.UniverseSelection;
using QuantConnect.Notifications;
using QuantConnect.Orders;
using QuantConnect.Orders.Fees;
using QuantConnect.Orders.Fills;
using QuantConnect.Orders.Slippage;
using QuantConnect.Scheduling;
using QuantConnect.Securities;
using QuantConnect.Securities.Equity;
using QuantConnect.Securities.Future;
using QuantConnect.Securities.Option;
using QuantConnect.Securities.Forex;
using QuantConnect.Securities.Crypto;
using QuantConnect.Securities.Interfaces;
using QuantConnect.Storage;
using QCAlgorithmFramework = QuantConnect.Algorithm.QCAlgorithm;
using QCAlgorithmFrameworkBridge = QuantConnect.Algorithm.QCAlgorithm;
#endregion
namespace QuantConnect
{
public class BrainMLRankingDataAlgorithm : QCAlgorithm
{
private Dictionary<Symbol, Symbol> _symbolByDatasetSymbol = new Dictionary<Symbol, Symbol>();
public override void Initialize()
{
SetStartDate(2021, 1, 1);
SetEndDate(2021, 7, 8);
SetCash(100000);
var tickers = new List<string>() {"AAPL", "TSLA", "MSFT", "F", "KO"};
foreach (var ticker in tickers)
{
// Requesting data
var symbol = AddEquity(ticker, Resolution.Daily).Symbol;
var datasetSymbol = AddData<BrainStockRanking2Day>(symbol).Symbol;
_symbolByDatasetSymbol.Add(datasetSymbol, symbol);
// Historical data
var history = History<BrainStockRanking2Day>(datasetSymbol, 365, Resolution.Daily);
Debug($"We got {history.Count()} items from our history request for {symbol}");
}
}
public override void OnData(Slice slice)
{
// Collect rankings for all symbols
var points = slice.Get<BrainStockRanking2Day>();
if (points == null)
{
return;
}
var symbols = new List<Symbol>();
var ranks = new List<decimal>();
foreach (var point in points.Values)
{
symbols.Add(_symbolByDatasetSymbol[point.Symbol]);
ranks.Add(point.Rank);
}
// Rank each symbol's Brain ML ranking relative to the other symbols
if (ranks.Count() == 0) return;
var sortedRanksTemp = new List<decimal>(ranks);
sortedRanksTemp.Sort();
var sortedRanks = new List<decimal>();
for (var i = 0; i < symbols.Count(); i++)
{
sortedRanks.Add(sortedRanksTemp.IndexOf(ranks[i]) + 1);
}
// Place orders -- give higher weight to symbols with higher Brain ML Ranking
for (var i = 0; i < symbols.Count(); i++)
{
var rank = sortedRanks[i];
var weight = rank / sortedRanks.Sum();
SetHoldings(symbols[i], weight);
}
}
}
}