Overall Statistics |
Total Trades 32 Average Win 3.11% Average Loss -3.53% Compounding Annual Return -9.361% Drawdown 40.400% Expectancy -0.123 Net Profit -6.080% Sharpe Ratio -0.045 Probabilistic Sharpe Ratio 17.851% Loss Rate 53% Win Rate 47% Profit-Loss Ratio 0.88 Alpha -0.031 Beta 0.07 Annual Standard Deviation 0.359 Annual Variance 0.129 Information Ratio -0.624 Tracking Error 0.377 Treynor Ratio -0.23 Total Fees $116.46 |
using QuantConnect.Data; using QuantConnect.Data.Auxiliary; using QuantConnect.Data.Custom.SEC; namespace QuantConnect.Algorithm.CSharp { public class SECReport8KAlgorithm : QCAlgorithm { /// <summary> /// Initialise the data and resolution required, as well as the cash and start-end dates for your algorithm. All algorithms must initialized. /// </summary> public override void Initialize() { SetStartDate(2019, 1, 1); SetEndDate(2019, 8, 21); SetCash(100000); UniverseSettings.Resolution = Resolution.Minute; AddUniverseSelection(new CoarseFundamentalUniverseSelectionModel(CoarseSelector)); // Request underlying equity data. var ibm = AddEquity("IBM", Resolution.Minute).Symbol; // Add SEC report 10-Q data for the underlying IBM asset var earningsFiling = AddData<SECReport10Q>(ibm).Symbol; // Request 120 days of history with the SECReport10Q IBM custom data Symbol. var history = History<SECReport10Q>(earningsFiling, 120, Resolution.Daily); // Count the number of items we get from our history request Debug($"We got {history.Count()} items from our history request"); } public IEnumerable<Symbol> CoarseSelector(IEnumerable<CoarseFundamental> coarse) { // Add SEC data from the filtered coarse selection var symbols = coarse.Where(x => x.HasFundamentalData && x.DollarVolume > 50000000) .Select(x => x.Symbol) .Take(10); foreach (var symbol in symbols) { AddData<SECReport8K>(symbol); } return symbols; } public override void OnData(Slice data) { // Store the symbols we want to long in a list // so that we can have an equal-weighted portfolio var longEquitySymbols = new List<Symbol>(); // Get all SEC data and loop over it foreach (var report in data.Get<SECReport8K>().Values) { // Get the length of all contents contained within the report var reportTextLength = report.Report.Documents.Select(x => x.Text.Length).Sum(); if (reportTextLength > 20000) { longEquitySymbols.Add(report.Symbol.Underlying); } } foreach (var equitySymbol in longEquitySymbols) { SetHoldings(equitySymbol, 1m / longEquitySymbols.Count); } } public override void OnSecuritiesChanged(SecurityChanges changes) { foreach (var r in changes.RemovedSecurities.Where(x => x.Symbol.SecurityType == SecurityType.Equity)) { // If removed from the universe, liquidate and remove the custom data from the algorithm Liquidate(r.Symbol); RemoveSecurity(QuantConnect.Symbol.CreateBase(typeof(SECReport8K), r.Symbol, Market.USA)); } } } }