Overall Statistics |
Total Trades 0 Average Win 0% Average Loss 0% Compounding Annual Return 0% Drawdown 0% Expectancy 0 Net Profit 0% Sharpe Ratio 0 Probabilistic Sharpe Ratio 0% Loss Rate 0% Win Rate 0% Profit-Loss Ratio 0 Alpha 0 Beta 0 Annual Standard Deviation 0 Annual Variance 0 Information Ratio 0.072 Tracking Error 0.243 Treynor Ratio 0 Total Fees $0.00 Estimated Strategy Capacity $0 Lowest Capacity Asset |
#region imports using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Globalization; using System.Drawing; using QuantConnect; 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.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 QuantConnect.Data.Custom.AlphaStreams; using QCAlgorithmFramework = QuantConnect.Algorithm.QCAlgorithm; using QCAlgorithmFrameworkBridge = QuantConnect.Algorithm.QCAlgorithm; #endregion namespace QuantConnect.Algorithm.CSharp { public class GapUpShort : QCAlgorithm { /** CONSTANTS **/ private const string BENCHMARK = "SPY"; const bool ENABLE_TESTING = true; /** DATA TRACKERS **/ /// Indicator Data Tracking List<Symbol> _symbolTracker = new List<Symbol>(); List<string> _nonAddedSymbols = new List<string>(); /** PRIVATE VARS **/ string[] _TestShortsList = {"PFGC", "MBRK", "GTXI", "BSC", "TSRA", "POZN", "ISPH", "CRME", "SCRX", "ABK", "AHG", "AMAG", "MNT", "DVAX", "CYPB", "CVTX", "PDGI", "ITMN", "MBI", "GERN", "PFG", "CTX", "ELX", "BCRX", "NVAX", "VNDA", "STEC", "ANPI", "NVAX", "JAZZ", "JAZZ", "BCRX", "HGSI", "SPSS", "ANDS", "INO", "AVNR", "HURN", "VG", "IMMU", "DCTH", "VG", "VVUS", "DVAX", "SLXP", "KERX", "ASPM", "RPRX", "IPCS", "EWBC", "CHLN", "ACHN", "ATHX", "ATHX", "CGEN", "CGEN", }; /// NYS = NYSE /// NAS = NASDAQ /// ASE = AMEX /// See: https://www.quantconnect.com/forum/discussion/12234/exchange-id-mapping/p1 /// See: https://www.quantconnect.com/forum/discussion/11121/how-to-backtest-and-live-trade-on-chinese-stocks/p1 string[] _ValidExchanges = {"NYS", "NAS", "ASE"}; /// *** CONFIGURATION VARIABLES *** /// private DateTime _startDate = new DateTime(2007, 1, 1); private DateTime _endDate = new DateTime(2009, 11, 20); private int _accountStartSize = 20_000; /// Used For Consolidating Open/Close Price For Custom Time Ranges private const int CUSTOM_TIME_PERIOD_IN_MINUTES = 5; /// -- /// Initialize and Prepare Algo /// Warm-up Data and Indicators public override void Initialize() { /// Date Setup SetStartDate(_startDate); SetEndDate(_endDate); /// Account Setup SetCash(_accountStartSize); /// Benchmark Setup var lBenchmarkSecurity = AddEquity(BENCHMARK, Resolution.Minute); /// AddEquity("PFGC" , Resolution.Minute); /// AddEquity("MBRK" , Resolution.Minute); SetBenchmark(BENCHMARK); foreach(var symbol in _TestShortsList) { /// AddEquity(symbol, Resolution.Minute); } /// Universe Setup UniverseSettings.Resolution = Resolution.Minute; //UniverseSettings.DataNormalizationMode = DataNormalizationMode.SplitAdjusted; //UniverseSettings.ExtendedMarketHours = true; //EnableAutomaticIndicatorWarmUp = true; /// SetBrokerageModel(BrokerageName.InteractiveBrokersBrokerage); AddUniverseSelection(new FineFundamentalUniverseSelectionModel(SelectCoarse, SelectFine)); /// AddUniverseSelection(new CoarseFundamentalUniverseSelectionModel(SelectCoarse)); /// Warmup One Week Worth Of Data SetWarmUp(new TimeSpan(2, 0, 0, 0)); } /// Called At Exit of Algorithm public override void OnEndOfAlgorithm() { string lSymbolsString = "string[] _TestShortsList = {"; foreach(var symbol in _symbolTracker) { lSymbolsString += "\"" + symbol.Value + "\", "; } lSymbolsString += " };"; Log(lSymbolsString); base.OnEndOfAlgorithm(); } /// Called Based On Changes To Current Stock Universe public override void OnSecuritiesChanged(SecurityChanges changes) { // If we have no changes, do nothing if (changes == SecurityChanges.None) return; foreach (var security in changes.AddedSecurities) { /// Set Leverage to 1 For Added Securities security.SetLeverage(1); if(!_symbolTracker.Contains(security.Symbol)) { _symbolTracker.Add(security.Symbol); } } // If you have a dynamic universe, track removed securities foreach (var security in changes.RemovedSecurities) { } } /// Coarse Universe Selector IEnumerable<Symbol> SelectCoarse(IEnumerable<CoarseFundamental> coarse) { var lStocks = (from security in coarse //where security.Volume > 0 && security.Price > 0 where DoesTickerExist(security.Symbol.Value) select security.Symbol).ToList(); return lStocks; } /// Fine Universe Selector IEnumerable<Symbol> SelectFine(IEnumerable<FineFundamental> fine) { var filteredFine = (from security in fine //where _ValidExchanges.Contains(security.CompanyReference.PrimaryExchangeID) //where security.MarketCap < MAXIMUM_MARKET_CAP //orderby security.MarketCap descending select security.Symbol).ToList(); return filteredFine; } /// If Testing Is Enabled. We Only Run The Code With Our Test List public bool DoesTickerExist(string ticker) { if(!ENABLE_TESTING) { return true; } return _TestShortsList.Contains(ticker); /*bool lTickerExists = false; foreach(var symbol in _TestShortsList) { if(ticker == symbol) { lTickerExists = true; break; } } return lTickerExists;*/ } } }