/// <summary> /// Initializes a new instance of the <see cref="ChartingInsightManagerExtension"/> class /// </summary> /// <param name="algorithm">The algorithm instance. This is only used for adding the charts /// to the algorithm. We purposefully do not save a reference to avoid potentially inconsistent reads</param> /// <param name="statisticsManager">Statistics manager used to access mean population scores for charting</param> public ChartingInsightManagerExtension(IAlgorithm algorithm, StatisticsInsightManagerExtension statisticsManager) { _statisticsManager = statisticsManager; _liveMode = algorithm.LiveMode; // chart for average scores over sample period var scoreChart = new Chart("Alpha"); foreach (var scoreType in InsightManager.ScoreTypes) { var series = new Series($"{scoreType} Score", SeriesType.Line, "%"); scoreChart.AddSeries(series); _insightScoreSeriesByScoreType[scoreType] = series; } // chart for insight count over sample period var insightCount = new Chart("Insight Count"); insightCount.AddSeries(_totalInsightCountSeries); algorithm.AddChart(scoreChart); algorithm.AddChart(insightCount); algorithm.AddChart(_totalInsightCountPerSymbolChart); // removing this for now, not sure best way to display this data //Algorithm.AddChart(_dailyInsightCountPerSymbolChart); }
/// <summary> /// Initializes this alpha handler to accept insights from the specified algorithm /// </summary> /// <param name="job">The algorithm job</param> /// <param name="algorithm">The algorithm instance</param> /// <param name="messagingHandler">Handler used for sending insights</param> /// <param name="api">Api instance</param> public virtual void Initialize(AlgorithmNodePacket job, IAlgorithm algorithm, IMessagingHandler messagingHandler, IApi api) { // initializing these properties just in case, doens't hurt to have them populated Job = job; Algorithm = algorithm; MessagingHandler = messagingHandler; _fitnessScore = new FitnessScoreManager(); _securityValuesProvider = new AlgorithmSecurityValuesProvider(algorithm); InsightManager = CreateInsightManager(); // send scored insights to messaging handler InsightManager.AddExtension(CreateAlphaResultPacketSender()); var statistics = new StatisticsInsightManagerExtension(algorithm); RuntimeStatistics = statistics.Statistics; InsightManager.AddExtension(statistics); _charting = new ChartingInsightManagerExtension(algorithm, statistics); InsightManager.AddExtension(_charting); // when insight is generated, take snapshot of securities and place in queue for insight manager to process on alpha thread algorithm.InsightsGenerated += (algo, collection) => InsightManager.Step(collection.DateTimeUtc, CreateSecurityValuesSnapshot(), collection); }
/// <summary> /// Initializes this alpha handler to accept insights from the specified algorithm /// </summary> /// <param name="job">The algorithm job</param> /// <param name="algorithm">The algorithm instance</param> /// <param name="messagingHandler">Handler used for sending insights</param> /// <param name="api">Api instance</param> public virtual void Initialize(AlgorithmNodePacket job, IAlgorithm algorithm, IMessagingHandler messagingHandler, IApi api) { // initializing these properties just in case, doesn't hurt to have them populated Job = job; Algorithm = algorithm; MessagingHandler = messagingHandler; _fitnessScore = new FitnessScoreManager(); _insights = new List <Insight>(); _securityValuesProvider = new AlgorithmSecurityValuesProvider(algorithm); InsightManager = CreateInsightManager(); var statistics = new StatisticsInsightManagerExtension(algorithm); RuntimeStatistics = statistics.Statistics; InsightManager.AddExtension(statistics); AddInsightManagerCustomExtensions(statistics); // when insight is generated, take snapshot of securities and place in queue for insight manager to process on alpha thread algorithm.InsightsGenerated += (algo, collection) => { lock (_insights) { _insights.AddRange(collection.Insights); } }; }
/// <summary> /// Initializes this alpha handler to accept insights from the specified algorithm /// </summary> /// <param name="job">The algorithm job</param> /// <param name="algorithm">The algorithm instance</param> /// <param name="messagingHandler">Handler used for sending insights</param> /// <param name="api">Api instance</param> public virtual void Initialize(AlgorithmNodePacket job, IAlgorithm algorithm, IMessagingHandler messagingHandler, IApi api) { // initializing these properties just in case, doens't hurt to have them populated Job = job; Algorithm = algorithm; _messagingHandler = messagingHandler; _isNotFrameworkAlgorithm = !algorithm.IsFrameworkAlgorithm; if (_isNotFrameworkAlgorithm) { return; } _securityValuesProvider = new AlgorithmSecurityValuesProvider(algorithm); InsightManager = CreateInsightManager(); var statistics = new StatisticsInsightManagerExtension(); RuntimeStatistics = statistics.Statistics; InsightManager.AddExtension(statistics); _charting = new ChartingInsightManagerExtension(algorithm, statistics); InsightManager.AddExtension(_charting); // when insight is generated, take snapshot of securities and place in queue for insight manager to process on alpha thread algorithm.InsightsGenerated += (algo, collection) => _insightQueue.Enqueue(new InsightQueueItem(collection.DateTimeUtc, CreateSecurityValuesSnapshot(), collection)); }
/// <summary> /// Initializes a new instance of the <see cref="ChartingInsightManagerExtension"/> class /// </summary> /// <param name="algorithm">The algorithm instance. This is only used for adding the charts /// to the algorithm. We purposefully do not save a reference to avoid potentially inconsistent reads</param> /// <param name="statisticsManager">Statistics manager used to access mean population scores for charting</param> public ChartingInsightManagerExtension(IAlgorithm algorithm, StatisticsInsightManagerExtension statisticsManager) { _algorithm = algorithm; _statisticsManager = statisticsManager; _liveMode = algorithm.LiveMode; // Add our series for average scores over sample period to our "Alpha" chart foreach (var scoreType in InsightManager.ScoreTypes) { var series = new Series($"{scoreType} Score", SeriesType.Line, "%"); _insightScoreSeriesByScoreType[scoreType] = series; _insightScoreChart.AddSeries(series); } // Add a series for insight count over sample period to the "Insight Count" chart _totalInsightCountChart.AddSeries(_totalInsightCountSeries); }
/// <summary> /// Initializes this alpha handler to accept insights from the specified algorithm /// </summary> /// <param name="job">The algorithm job</param> /// <param name="algorithm">The algorithm instance</param> /// <param name="messagingHandler">Handler used for sending insights</param> /// <param name="api">Api instance</param> /// <param name="transactionHandler">Algorithms transaction handler</param> public virtual void Initialize(AlgorithmNodePacket job, IAlgorithm algorithm, IMessagingHandler messagingHandler, IApi api, ITransactionHandler transactionHandler) { // initializing these properties just in case, doesn't hurt to have them populated Job = job; Algorithm = algorithm; MessagingHandler = messagingHandler; _fitnessScore = new FitnessScoreManager(); _insights = new List <Insight>(); _securityValuesProvider = new AlgorithmSecurityValuesProvider(algorithm); InsightManager = CreateInsightManager(); var statistics = new StatisticsInsightManagerExtension(algorithm); RuntimeStatistics = statistics.Statistics; InsightManager.AddExtension(statistics); AddInsightManagerCustomExtensions(statistics); var baseDirectory = Config.Get("results-destination-folder", Directory.GetCurrentDirectory()); var directory = Path.Combine(baseDirectory, AlgorithmId); if (!Directory.Exists(directory)) { Directory.CreateDirectory(directory); } _alphaResultsPath = Path.Combine(directory, "alpha-results.json"); // when insight is generated, take snapshot of securities and place in queue for insight manager to process on alpha thread algorithm.InsightsGenerated += (algo, collection) => { lock (_insights) { _insights.AddRange(collection.Insights); } }; }
/// <summary> /// Allows each alpha handler implementation to add there own optional extensions /// </summary> protected virtual void AddInsightManagerCustomExtensions(StatisticsInsightManagerExtension statistics) { // send scored insights to messaging handler InsightManager.AddExtension(new AlphaResultPacketSender(Job, MessagingHandler, TimeSpan.FromSeconds(3), 50)); InsightManager.AddExtension(new ChartingInsightManagerExtension(Algorithm, statistics)); }