Overall Statistics |
Total Trades 1 Average Win 0% Average Loss 0% Compounding Annual Return -47.964% Drawdown 0.900% Expectancy 0 Net Profit 0% Sharpe Ratio -36.854 Loss Rate 0% Win Rate 0% Profit-Loss Ratio 0 Alpha -0.423 Beta -0.789 Annual Standard Deviation 0.009 Annual Variance 0 Information Ratio -9.977 Tracking Error 0.02 Treynor Ratio 0.411 Total Fees $1.00 |
using System.Collections.Generic; using QuantConnect.Data; using QuantConnect.Data.Market; using QuantConnect.Interfaces; using QuantConnect.Securities; using QuantConnect.Securities.Interfaces; namespace QuantConnect.Algorithm.Examples { /// <summary> /// Tick Filter Example /// </summary> public class TickDataAlgorithm : QCAlgorithm { /// <summary> /// Initialize the tick filtering example algorithm /// </summary> public override void Initialize() { SetCash(25000); SetStartDate(2015, 6, 1); SetEndDate(2015, 6, 2); AddSecurity(SecurityType.Equity, "SPY", Resolution.Tick); //Add our custom data filter. Securities["SPY"].DataFilter = new ExchangeDataFilter(this); } /// <summary> /// Data arriving here will now be filtered. /// </summary> /// <param name="data">Ticks data array</param> public void OnData(Ticks data) { if (!data.ContainsKey("SPY")) return; var spyTickList = data["SPY"]; //Ticks return a list of ticks this second foreach (var tick in spyTickList) { Log( tick.Price + " "+ tick.Exchange+ " "+ tick.Quantity+ " "+ tick.TickType); } if (!Portfolio.Invested) { SetHoldings("SPY", 1); } } } /// <summary> /// Exchange filter class /// </summary> public class ExchangeDataFilter : ISecurityDataFilter { private IAlgorithm _algo; /// <summary> /// Save instance of the algorithm namespace /// </summary> /// <param name="algo"></param> public ExchangeDataFilter(IAlgorithm algo) { _algo = algo; } /// <summary> /// Global Market Short Codes and their full versions: (used in tick objects) /// https://github.com/QuantConnect/QCAlgorithm/blob/master/QuantConnect.Common/Global.cs /// </summary> public static class MarketCodesFilter { /// US Market Codes public static Dictionary<string, string> US = new Dictionary<string, string>() { {"A", "American Stock Exchange"}, {"B", "Boston Stock Exchange"}, {"C", "National Stock Exchange"}, {"D", "FINRA ADF"}, {"I", "International Securities Exchange"}, {"J", "Direct Edge A"}, {"K", "Direct Edge X"}, {"M", "Chicago Stock Exchange"}, {"N", "New York Stock Exchange"}, {"P", "Nyse Arca Exchange"}, {"Q", "NASDAQ OMX"}, {"T", "NASDAQ OMX"}, {"U", "OTC Bulletin Board"}, {"u", "Over-the-Counter trade in Non-NASDAQ issue"}, {"W", "Chicago Board Options Exchange"}, {"X", "Philadelphia Stock Exchange"}, {"Y", "BATS Y-Exchange, Inc"}, {"Z", "BATS Exchange, Inc"} }; /// Canada Market Short Codes: public static Dictionary<string, string> Canada = new Dictionary<string, string>() { {"T", "Toronto"}, {"V", "Venture"} }; /// <summary> /// Select allowed exchanges for this filter: e.g. top 4 /// </summary> public static List<string> AllowedExchanges = new List<string>() { "P", //NYSE ARCA - SPY PRIMARY EXCHANGE //https://www.google.com/finance?q=NYSEARCA%3ASPY&ei=XcA2VKCSLs228waMhYCIBg }; } /// <summary> /// Filter out a tick from this vehicle, with this new data: /// </summary> /// <param name="data">New data packet:</param> /// <param name="asset">Vehicle of this filter.</param> public bool Filter(Security asset, BaseData data) { // TRUE --> Accept Tick // FALSE --> Reject Tick var tick = data as Tick; // This is a tick bar if (tick != null) { if (tick.Exchange == "P") //MarketCodesFilter.AllowedExchanges.Contains() { return true; } } //Only allow those exchanges through. return false; } } }