Overall Statistics
namespace QuantConnect
{
    public class DataObject
    {
        #region Fields

        private string _symbol;
        private decimal _price;
        private DateTime _datetimepumped;
        private DateTime _datetimeend;

        #endregion

        #region Properties

        public string Symbol
        {
            get { return _symbol; }
            set
            {
                _symbol = value;
            }
        }

        public decimal Price
        {
            get { return _price; }
            set
            {
                _price = value;
            }
        }
        
        public DateTime DateTimePumped
        {
            get { return _datetimepumped; }
            set
            {
                _datetimepumped = value;
            }
        }
        
    	public DateTime DateTimeEnd
        {
            get { return _datetimeend; }
            set
            {
                _datetimeend = value;
            }
        }

        #endregion
        
        #region Constructor
        
        public DataObject(string symbol)
        {
        	Symbol = symbol;
        	Price = 0.0m;
        	DateTimePumped = DateTime.MinValue;
        	DateTimeEnd = DateTime.MinValue;
        }
        
        #endregion
    }
}
using MathNet.Numerics.Statistics;
using QuantConnect.Orders.Slippage;
using System.Text;

namespace QuantConnect 
{   
    public class MultiFeedTest : QCAlgorithm
    {
    	const string _symbolVXX = "VXX";
    	const string _symbolXIV = "XIV";
    	const string _symbolGSPC = "YAHOO/INDEX_GSPC";
    	const string _symbolVIX = "YAHOO/INDEX_VIX";
    	const string _symbolVX1 = "SCF/CBOE_VX1_EW";
    	const string _symbolVX2 = "SCF/CBOE_VX2_FW";
    	
    	Dictionary<string, DataObject> _dataobjects = new Dictionary<string, DataObject>();
    	
        public override void Initialize() 
        {
        	// Minimum Start Date: 2011-3-1
            SetStartDate(2012, 3, 1);         
            SetEndDate(2012, 3, 24);
            SetCash(5000);
            SetWarmup(10);
            
            AddSecurity(SecurityType.Equity, _symbolXIV, Resolution.Daily);
            AddSecurity(SecurityType.Equity, _symbolVXX, Resolution.Daily);
            AddData<Quandl>(_symbolGSPC, Resolution.Daily);
            AddData<Quandl>(_symbolVIX, Resolution.Daily);
            AddData<QuandlFuture>(_symbolVX1, Resolution.Daily);
            AddData<QuandlFuture>(_symbolVX2, Resolution.Daily);
            
            DataObject vxxobject = new DataObject(_symbolVXX);
            DataObject xivobject = new DataObject(_symbolXIV);
            DataObject gspcobject = new DataObject(_symbolGSPC);
            DataObject vixobject = new DataObject(_symbolVIX);
            DataObject vx1object = new DataObject(_symbolVX1);
            DataObject vx2object = new DataObject(_symbolVX2);
            
            _dataobjects.Add(_symbolVXX, vxxobject);
            _dataobjects.Add(_symbolXIV, xivobject);
            _dataobjects.Add(_symbolGSPC, gspcobject);
            _dataobjects.Add(_symbolVIX, vixobject);
            _dataobjects.Add(_symbolVX1, vx1object);
            _dataobjects.Add(_symbolVX2, vx2object);
            
            Schedule.Event().EveryDay().At(16, 00).Run(() =>
            {
				PrintData();
            });
        }

        public void OnData(TradeBars bars) 
        {   
        	foreach (KeyValuePair<Symbol, TradeBar> entry in bars)
        	{
        		string symbolstring = entry.Key;
        		TradeBar bar = entry.Value;
        	
				switch(bar.Symbol)
				{
					case(_symbolVXX):
					{
						_dataobjects[_symbolVXX].Price = bar.Value;
						_dataobjects[_symbolVXX].DateTimePumped = this.Time;
						_dataobjects[_symbolVXX].DateTimeEnd = bar.EndTime;
						break;
					}
					case(_symbolXIV):
					{
						_dataobjects[_symbolXIV].Price = bar.Value;
						_dataobjects[_symbolXIV].DateTimePumped = this.Time;
						_dataobjects[_symbolXIV].DateTimeEnd = bar.EndTime;
						break;
					}
				}
        	}
        }
        
        public void OnData(Quandl quandl) 
        {   
 			switch(quandl.Symbol)
			{
				case(_symbolGSPC):
				{
					_dataobjects[_symbolGSPC].Price = quandl.Value;
					_dataobjects[_symbolGSPC].DateTimePumped = this.Time;
					_dataobjects[_symbolGSPC].DateTimeEnd = quandl.EndTime;
					break;
				}
				case(_symbolVIX):
				{
					_dataobjects[_symbolVIX].Price = quandl.Value;
					_dataobjects[_symbolVIX].DateTimePumped = this.Time;
					_dataobjects[_symbolVIX].DateTimeEnd = quandl.EndTime;
					break;
				}
			}
        }
        
        public void OnData(QuandlFuture quandlfuture) 
        {   
  			switch(quandlfuture.Symbol)
			{
				case(_symbolVX1):
				{
					_dataobjects[_symbolVX1].Price = quandlfuture.Value;
					_dataobjects[_symbolVX1].DateTimePumped = this.Time;
					_dataobjects[_symbolVX1].DateTimeEnd = quandlfuture.EndTime;
					break;
				}
				case(_symbolVX2):
				{
					_dataobjects[_symbolVX2].Price = quandlfuture.Value;
					_dataobjects[_symbolVX2].DateTimePumped = this.Time;
					_dataobjects[_symbolVX2].DateTimeEnd = quandlfuture.EndTime;
					break;
				}
			}
        }
        
        public void PrintData()
        {
        	if (this.Time.Date.DayOfWeek != DayOfWeek.Saturday && this.Time.Date.DayOfWeek != DayOfWeek.Sunday)
        	{
        		if (IsWarmingUp)
        		{
        			Log("(WARMING UP) DATA SNAPSHOT");
        		}
        		else
        		{
	        		Log("DATA SNAPSHOT:");
        		}
	        	
				foreach(KeyValuePair<string, DataObject> entry in _dataobjects)
				{
					string stringsymbol = "Symbol: "+ entry.Value.Symbol.ToString();
					string stringprice = "Price: " + entry.Value.Price.ToString("#.##");
					string stringtimepumped = "Time Pumped: " + entry.Value.DateTimePumped.ToShortDateString() + " " + entry.Value.DateTimePumped.ToShortTimeString();
					string stringtimeend = "Time End: "+ entry.Value.DateTimeEnd.ToShortDateString() + " " + entry.Value.DateTimeEnd.ToShortTimeString();
					
				    Log(String.Format("\t{0,-30}{1,-20}{2,-40}{3,-40}", stringsymbol, stringprice, stringtimepumped, stringtimeend));
				}
        	}
        }
    }
}
namespace QuantConnect
{
    public class QuandlFuture : Quandl {
        
        public QuandlFuture() : base(valueColumnName: "Settle") 
        {
        }
    }
}