| 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 |
//Universe Selection and Past Bars - tester
using System;
using System.Collections.Generic;
using System.Linq;
using QuantConnect.Data;
using QuantConnect.Data.Consolidators;
using QuantConnect.Data.Market;
using QuantConnect.Indicators;
namespace QuantConnect
{
/*
* The underlying QCAlgorithm class has many methods which enable you to use QuantConnect.
* We have explained some of these here, but the full base class can be found at:
* https://github.com/QuantConnect/Lean/tree/master/Algorithm
*/
public class UniverseSelectionandPastBarsAlgorithm : QCAlgorithm
{
public readonly TimeSpan BarPeriod = TimeSpan.FromDays(1); //Daily data
public readonly int SimpleMovingAveragePeriod = 10;
public readonly int RollingWindowSize = 10;
private SecurityChanges _changes = SecurityChanges.None;
// Holds all of our data keyed by each symbol
public readonly Dictionary<string, SymbolData> Data = new Dictionary<string, SymbolData>();
public override void Initialize()
{
SetStartDate(2018, 05, 7);
SetEndDate(2018, 05, 8);
SetCash(25000);
UniverseSettings.Leverage = 1.0m;
UniverseSettings.Resolution = Resolution.Daily;
AddUniverse(Universe.DollarVolume.Top(5));
}
public void OnData(TradeBars data) // New data arrives here.
{
foreach (var universe in UniverseManager.Values) {
if (universe is UserDefinedUniverse) {continue;}
Debug (String.Format("====Symbols Count {0}", universe.Members.Keys.Count())); //How many symbols from universe
if (_changes == SecurityChanges.None)
{
Debug ("No Changes");
return;
}
foreach (Symbol symbol in universe.Members.Keys){
Securities[symbol].SetDataNormalizationMode(DataNormalizationMode.Raw);
Data.Add(symbol, new SymbolData(symbol, BarPeriod, RollingWindowSize));
Debug (String.Format("{0} - OHLC[{1:0.00}, {2:0.00}, {3:0.00}, {4:0.00}, {5:0}]",
symbol, data[symbol].Open, data[symbol].High, data[symbol].Low,
data[symbol].Close, data[symbol].Volume));
}
}
}
// Contains data pertaining to a symbol in our algorithm
public class SymbolData
{
// This symbol the other data in this class is associated with
public readonly Symbol Symbol;
// A rolling window of data, data needs to be pumped into Bars by using Bars.Update( tradeBar ) and
// can be accessed like:
// mySymbolData.Bars[0] - most first recent piece of data
// mySymbolData.Bars[5] - the sixth most recent piece of data (zero based indexing)
public readonly RollingWindow<TradeBar> Bars;
public readonly TimeSpan BarPeriod;
public SimpleMovingAverage SMA;
// Initializes a new instance of SymbolData
public SymbolData(Symbol symbol, TimeSpan barPeriod, int windowSize)
{
Symbol = symbol;
BarPeriod = barPeriod;
//Bars = new RollingWindow<IBaseDataBar>(windowSize); original
Bars = new RollingWindow<TradeBar>(windowSize);
}
// Returns true if all the data in this instance is ready (indicators, rolling windows, ect...)
public bool IsReady
{
get { return Bars.IsReady && SMA.IsReady; }
}
// Returns true if the most recent trade bar time matches the current time minus the bar's period, this
// indicates that update was just called on this instance
// <param name="current">The current algorithm time</param>
// <returns>True if this instance was just updated with new data, false otherwise</returns>
public bool WasJustUpdated(DateTime current)
{
return Bars.Count > 0 && Bars[0].Time == current - BarPeriod;
}
}
/// <summary>
/// Event fired each time the we add/remove securities from the data feed
/// </summary>
/// <param name="changes">Object containing AddedSecurities and RemovedSecurities</param>
public override void OnSecuritiesChanged(SecurityChanges changes)
{
_changes = changes;
}
} //BasicTemplateAlgorithm
} //namespace