Overall Statistics |
Total Trades 5087 Average Win 0.13% Average Loss -0.10% Compounding Annual Return 1535.244% Drawdown 1.100% Expectancy 1.063 Net Profit 1543.611% Sharpe Ratio 13.986 Loss Rate 10% Win Rate 90% Profit-Loss Ratio 1.28 Alpha 2.828 Beta 0.04 Annual Standard Deviation 0.202 Annual Variance 0.041 Information Ratio 8.474 Tracking Error 0.347 Treynor Ratio 70.305 Total Fees $50870.00 |
//Copyright HardingSoftware.com, granted to the public domain. //Use entirely at your own risk. namespace QuantConnect.Algorithm.CSharp { public class M : QCAlgorithm { string ticker = "AT"; int holdCount= 5; int count=0; decimal lowerRatio=0.995m; decimal upperRatio=1.005m; OrderTicket orderTicket; decimal leverage=.99m; decimal increment=0.01m; public override void Initialize() { SetStartDate(2017, 9, 26); //Set Start Date SetEndDate(2018, 9, 26); //Set End Date SetCash(7000); //Set Strategy Cash AddEquity(ticker, Resolution.Minute); SetBenchmark(ticker); Securities[ticker].FeeModel = new ConstantFeeModel(10m); } public override void OnData(Slice data) { count++; if (count<holdCount) { return; } count=0; if (data[ticker]==null || data.ContainsKey(ticker)==false) { return; } decimal price=data[ticker].Close; if (!Portfolio.Invested) { if (orderTicket!=null) { orderTicket.Cancel(); } //int quantity=(int)(leverage*Portfolio.Cash/price); int quantity=(int)(leverage*7000m/price); decimal buyPrice=FloorToIncrement(lowerRatio*price,increment); orderTicket = LimitOrder(ticker, quantity, buyPrice); } else { if (orderTicket!=null) { orderTicket.Cancel(); } int quantity=(int)Portfolio[ticker].Quantity; decimal sellPrice=CeilingToIncrement(upperRatio*price,increment); orderTicket = LimitOrder(ticker, -quantity, sellPrice); } } public decimal RoundToIncrement(decimal roundMe, decimal increment) { return (decimal)(Math.Round(roundMe/increment)*increment); } public decimal FloorToIncrement(decimal roundMe, decimal increment) { return (decimal)(Math.Floor(roundMe/increment)*increment); } public decimal CeilingToIncrement(decimal roundMe, decimal increment) { return (decimal)(Math.Ceiling(roundMe/increment)*increment); } } }