Overall Statistics |
Total Trades 161 Average Win 0.83% Average Loss -0.66% Compounding Annual Return -2.152% Drawdown 4.900% Expectancy 0.312 Net Profit -0.247% Sharpe Ratio -0.662 Probabilistic Sharpe Ratio 29.064% Loss Rate 42% Win Rate 58% Profit-Loss Ratio 1.27 Alpha -0.436 Beta 1.933 Annual Standard Deviation 0.201 Annual Variance 0.04 Information Ratio -2.894 Tracking Error 0.1 Treynor Ratio -0.069 Total Fees $161.00 Estimated Strategy Capacity $6600000.00 Lowest Capacity Asset SPY R735QTJ8XC9X |
using QuantConnect.Data.UniverseSelection; using QuantConnect.Securities; using static System.DateTime; using System; using System.Collections.Generic; using System.Linq; using QuantConnect.Data; using QuantConnect.Data.Custom; using QuantConnect.Data.Market; using QuantConnect.Indicators; using QuantConnect.Securities.Equity; using QuantConnect.Interfaces; namespace QuantConnect { /// <summary> /// Basic template algorithm simply initializes the date range and cash /// </summary> public class DailyIdentityAlgorithm : QCAlgorithm { decimal initial_cash = 10000; ////////////////////////////////////// SPY VARIABLES ////////////////////////////////////////////////// private Symbol _spy = QuantConnect.Symbol.Create("SPY", SecurityType.Equity, Market.USA); private SimpleMovingAverage _sma_SPY; private Identity _identity_spy; private decimal highOfTheDaySpy=0; private RollingWindow<decimal> SPY_trailing; private bool trade=false; /// <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(2020, 11 ,24); //Set Start Date SetEndDate(2021, 12, 27); //Set End Date initial_cash = 10000; SetCash(initial_cash); //////////////////////// Manual Universe Selection /////////////////////////////////////////////////////////////// ////////////////////////////////////// SPY VARIABLES INITIALIZATION ////////////////////////////////////////////////// AddEquity("SPY", Resolution.Minute); _sma_SPY = SMA("SPY", 60, Resolution.Daily, x => ((TradeBar)x).Volume); _identity_spy = Identity("SPY", Resolution.Daily, Field.High); SPY_trailing = new RollingWindow<decimal>(20); //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // schedule an event to fire every trading day for a security // the time rule here tells it to fire 10 minutes before SPY's market close bool liquidate = Convert.ToBoolean(GetParameter("liquidate")); if (liquidate = true){ Schedule.On(DateRules.EveryDay("SPY"), TimeRules.BeforeMarketClose("SPY", 10), () => //Don't have to change it for every instrument in the portfolio { Liquidate();//Liquidate entire portfolio }); } }//closes initialize /// <summary> /// OnData event is the primary entry point for your algorithm. Each new data point will be pumped in here. /// </summary> /// <param name="data">Slice object keyed by symbol containing the stock data</param> public override void OnData(Slice data) { TradeBars bars = data.Bars; //////////////////////////// SPY BLOCK /////////////////////////////////////////////////// if (Portfolio["SPY"].Invested==true){ //block for trailing st SPY_trailing.Add(Securities["SPY"].Holdings.UnrealizedProfit); var SPY_trailing_list = new List<Decimal>(20); SPY_trailing_list.AddRange(SPY_trailing); //var max = SPY_trailing_list.GetRange(20, 20).Max(); Debug("Max unrealized profit"); //Debug(max); } if (data.Bars.ContainsKey("SPY") ){ var ticket = LimitOrder("SPY", 10, 5000); } }//closes OnData } }