| 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;*/
}
}
}