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