Overall Statistics
Total Trades
0
Average Win
0%
Average Loss
0%
Compounding Annual Return
0%
Drawdown
0%
Expectancy
0
Net Profit
0%
Sharpe Ratio
0
Loss Rate
0%
Win Rate
0%
Profit-Loss Ratio
0
Alpha
0
Beta
0
Annual Standard Deviation
0
Annual Variance
0
Information Ratio
0
Tracking Error
0
Treynor Ratio
0
Total Fees
$0.00
using QuantConnect.Data;
using QuantConnect.Data.Consolidators;
using QuantConnect.Data.Market;
using QuantConnect.Data.UniverseSelection;
using QuantConnect.Indicators;
using System;
using System.Collections.Generic;

namespace QuantConnect.Algorithm.CSharp
{
    public class ForumHistory : QCAlgorithm
    {
        private const int SmaPeriod = 140;
        private TimeSpan _barPeriod;
        private List<string> _instrumentNames = new List<string> { "SPY", "TLT" };
        private Dictionary<Symbol, SimpleMovingAverage> _indicators = new Dictionary<Symbol, SimpleMovingAverage>();
        private Dictionary<Symbol, IDataConsolidator> _consolidators = new Dictionary<Symbol, IDataConsolidator>();

        public override void Initialize()
        {
            SetStartDate(2013, 10, 8);  //Set Start Date
            SetEndDate(2013, 10, 18);   //Set End Date
            SetCash(100000);            //Set Strategy Cash

            // We need to operate 15-min bars
            _barPeriod = TimeSpan.FromMinutes(15);
			
			RefreshSymbols();
			
            Schedule.On(DateRules.EveryDay(), TimeRules.At(11, 00), RefreshSymbols);
        }

        private void RefreshSymbols()
        {
            System.Console.WriteLine("Refreshing symbols");
            foreach (var symbol in Portfolio.Securities.Keys)
            {
                System.Console.WriteLine("Liquidating " + symbol.Value.ToString());
                if (Portfolio[symbol].Invested)
                {
                    Liquidate(symbol);
                }
                Securities.Remove(symbol);
            }
            foreach (var symbol in _instrumentNames)
            {
                System.Console.WriteLine("Adding " + symbol);
                AddEquity(symbol);
            }
        }

        private void OnNewBar(object sender, IBaseData baseData)
        {
            var symbol = baseData.Symbol;
            _indicators[symbol].Update(baseData);
            if (_indicators[symbol].IsReady && _indicators[symbol].Current.Price > baseData.Price)
                SetHoldings(symbol, 0.2);
        }

        // this event fires whenever we have changes to our universe
        public void OnSecuritiesChanged(SecurityChanges changes)
        {
            if (changes.AddedSecurities.Count > 0)
            {
                foreach (var security in changes.AddedSecurities)
                {
                    var symbol = security.Symbol;
                    if (!_indicators.ContainsKey(symbol))
                    {
                        var consolidator = (IDataConsolidator)new TradeBarConsolidator(_barPeriod);
                        var SMA = new SimpleMovingAverage(CreateIndicatorName(symbol, "SMA" + SmaPeriod, Resolution.Minute), SmaPeriod);
                        consolidator.DataConsolidated += OnNewBar;
                        SubscriptionManager.AddConsolidator(symbol, consolidator);
                        _consolidators.Add(symbol, consolidator);

                        /* SOMEWHERE HERE I NEED TO FILL MY INDICATOR HISTORY */
                        /* BUT I DON't KNOW HOW */
                        var history = History<TradeBar>(symbol, TimeSpan.FromMinutes(15 * 140), Resolution.Minute);
                        
                    }
                }
            }
            if (changes.RemovedSecurities.Count > 0)
            {
                foreach (var security in changes.RemovedSecurities)
                {
                    var symbol = security.Symbol;
                    SubscriptionManager.RemoveConsolidator(symbol, _consolidators[symbol]);
                    _indicators.Remove(symbol);
                    _consolidators.Remove(symbol);
                }
            }
        }
    }
}