#region imports
using System.Linq;
using QuantConnect.Util;
using QuantConnect.Data;
using QuantConnect.Data.UniverseSelection;
using QuantConnect.Data.Auxiliary;
using QuantConnect.Securities;
using System;
#endregion
namespace QuantConnect.Algorithm.CSharp
{
public class GeekyGreenRat : QCAlgorithm
{
private uint _openTradeTickFlags = (uint)(TradeConditionFlags.OfficialOpen | TradeConditionFlags.OpeningPrints);
private uint _closeTradeTickFlags = (uint)(TradeConditionFlags.OfficialClose | TradeConditionFlags.ClosingPrints);
public override void Initialize()
{
SetStartDate(DateTime.Now.AddDays(-10));
UniverseSettings.FillForward = false;
UniverseSettings.Resolution = Resolution.Tick;
UniverseSettings.ExtendedMarketHours = true;
UniverseSettings.DataNormalizationMode = DataNormalizationMode.Raw;
AddUniverse(Universe.ETF("SPY",
f => {
var size = 30;
var g = f.Where(x => x.Weight != null).OrderByDescending(x => x.Weight).ToList();
Plot("Count", "All", f.Count());
Plot("Count", "Non-zero", g.Count);
g = [.. g.Take(size)];
var message = string.Join(" | ", g.Select(x => $"{x.Symbol.Value} ({x.Symbol.ID}): {x.Weight}"));
Log($"Top{size}: {message}");
return g.Select(x => x.Symbol);
}),
f => f.OrderByDescending(x => x.MarketCap).Take(10).Select(x => x.Symbol));
}
public override void OnData(Slice data)
{
foreach(var (symbol, ticks) in data.Ticks)
{
var tick = ticks
.Where(x => x.TickType == TickType.Trade)
.Where(x =>
(x.ParsedSaleCondition & _openTradeTickFlags) != 0 ||
(x.ParsedSaleCondition & _closeTradeTickFlags) != 0
).FirstOrDefault();
if (tick != null) Log($"{tick.EndTime} :: {tick} {tick.Exchange}");
}
}
}
}