Overall Statistics |
Total Trades 60 Average Win 0.40% Average Loss -0.60% Compounding Annual Return -70.649% Drawdown 6.500% Expectancy -0.218 Net Profit -3.896% Sharpe Ratio -4.605 Loss Rate 53% Win Rate 47% Profit-Loss Ratio 0.68 Alpha 0 Beta 0 Annual Standard Deviation 0.264 Annual Variance 0.07 Information Ratio 0 Tracking Error 0 Treynor Ratio 0 Total Fees $482.32 |
using System; using System.Collections.Generic; using QuantConnect.Data; using QuantConnect.Data.Market; using QuantConnect.Data.UniverseSelection; namespace QuantConnect.Algorithm.CSharp { public class ImportPicksAlgorithm : QCAlgorithm { private SecurityChanges _changes = SecurityChanges.None; //Initialize the data and resolution you require for your strategy: public override void Initialize() { // this is the resolution of securities added by our universe UniverseSettings.Resolution = Resolution.Minute; SetStartDate(2015, 9, 17); SetEndDate(2015, 9, 28); SetCash(100 * 1000); // this sets our universe based on our custom data type 'ImportPicks' AddUniverse<ImportPicks>("import-picks-universe", data => { // 'data' here is IEnumerable<ImportPicks> var symbols = new List<string>(); foreach (var d in data) { symbols.Add(d.ticker1); symbols.Add(d.ticker2); symbols.Add(d.ticker3); symbols.Add(d.ticker4); } // these are the universe tickers for today return symbols; }); // schedule event to place market on close orders at 15min before market close var weekdays = new[] { DayOfWeek.Monday, DayOfWeek.Tuesday, DayOfWeek.Wednesday, DayOfWeek.Thursday, DayOfWeek.Friday }; Schedule.Event("EOD Liquidate").Every(weekdays).At(new TimeSpan(15, 45, 0)).Run(() => { // submit market on close orders for all securities that have holdings foreach (var security in Securities.Values) { if (security.Invested) { MarketOnCloseOrder(security.Symbol, -security.Holdings.Quantity); } } }); } //Data Event Handler: New data arrives here. "TradeBars" type is a dictionary of strings so you can access it by symbol. public void OnData(TradeBars data) { // if we have no changes do nothing if (_changes == SecurityChanges.None) return; // enter each position equally foreach (var security in _changes.AddedSecurities) { SetHoldings(security.Symbol, 0.20m); } // reset our changes, we'll handle liquidate via a scheduled event/ MOC order _changes = SecurityChanges.None; } public override void OnSecuritiesChanged(SecurityChanges changes) { // save off the changes, these will come in at the time specified in the ImportPicks data _changes = changes; } } }
namespace QuantConnect { public class ImportPicks : BaseData { public string ticker1; public string ticker2; public string ticker3; public string ticker4; public override SubscriptionDataSource GetSource(SubscriptionDataConfig config, DateTime date, bool isLive) { return new SubscriptionDataSource("https://www.dropbox.com/s/kzo2kdu2v7q7qc1/dataforqc.csv?dl=1", SubscriptionTransportMedium.RemoteFile); } public override BaseData Reader(SubscriptionDataConfig config, string line, DateTime date, bool isLive) { ImportPicks importpicks = new ImportPicks(); string[] data = line.Split(','); importpicks.Symbol = config.Symbol; importpicks.Time = DateTime.Parse(data[0]).AddHours(0); // Make sure we only get this data AFTER trading day - don't want forward bias. importpicks.ticker1 = Convert.ToString(data[1]); importpicks.ticker2 = Convert.ToString(data[2]); importpicks.ticker3 = Convert.ToString(data[3]); importpicks.ticker4 = Convert.ToString(data[4]); return importpicks; } } }